在启动时为GCE实例配置FQDN

4
我将尝试启动一个预配置了FQDN的谷歌计算引擎(GCE)实例。我们打算运行一个基于/etc/hosts内容许可的应用程序。我会使用Google Cloud SDK工具 - gcloud来启动实例。
我已经尝试使用metadata选项设置“hostname”键,如下所示:
gcloud compute instances create mynode (standard opts) --metadata hostname=mynode.example.com

每当我登录到开发者控制台,在计算机下的实例中,我可以在“自定义元数据”下看到主机名。这似乎是一个新的、自定义的键 - 它对什么没有影响。
http://metadata.google.internal/computeMetadata/v1/instance/hostname

返回。

我也尝试设置“instance / hostname”,如下所示,使用gcloud时会导致解析错误。

--metadata instance/hostname=mynode.example.com

我已经成功地使用元数据服务器的启动脚本功能来运行一个启动脚本,解析新创建实例的内部IP地址并更新 /etc/hosts。这似乎可以工作,但感觉不太符合“谷歌方式”。
在实例创建期间,我能否使用元数据服务器功能配置实例的完整域名(特别是因为实例名称始终为主机名)?
6个回答

6

请按以下步骤操作:

  1. 前往 GCE >> VM 实例面板。
  2. 停止您的 GCE 实例。
  3. 单击实例名称。
  4. 编辑您的实例,在自定义元数据字段中添加以下值:

    • 键字段: hostname / 值字段: your.server.hostname

    • 键字段: startup-script / 值字段: sudo -s hostnamectl set-hostname your.server.hostname

    setup-example-image.png

最后,启动您的实例并使用 hostnamectl 命令进行测试。

祝好!


3
根据这篇文章,“hostname”是提供有关实例信息的默认元数据条目之一,而且不可能手动编辑任何默认元数据对。您还可以查看来自Google团队的此视频。在前几分钟内,它提到了您不能修改默认元数据对这一点。因此,除了使用像您已经做过的启动脚本之类的方法外,在实例创建时似乎无法指定主机名。值得一提的是,您指定的主机名将在重新启动时由元数据服务器删除并自动同步,除非您使用会每次修改它的启动脚本或其他工具。

如果您当前正在进行的操作适用于您要完成的工作,那么这可能是您场景下唯一可行的解决办法。


我已经多次阅读了链接的文章,但显然忽略了你指出的句子 - 您无法手动编辑这些元数据对之一。 谢谢你,我将不得不使用启动脚本。无论如何,这是一个糟糕的许可证方法。 - The_Viper

2
这是一个补丁程序,用于将FQDN设置为GCE实例的/usr/share/google/set-hostname

https://gist.github.com/yuki-takeichi/3080521322f0f1d159ea6a343e2323e6

在使用此补丁之前,您必须通过指定hostname键在实例的元数据中设置所需的FQDN。
每次实例的IP地址被dhclient更新时,都会设置主机名。 set-hostname只是一个挂钩脚本,dhclient执行并向其提供新的IP地址和内部主机名,并修改/etc/hosts。 此补丁通过从元数据服务器查询实例的元数据来更改主机名的来源。
原始的set-hostname脚本在此处: https://github.com/GoogleCloudPlatform/compute-image-packages/blob/master/google_config/bin/set_hostname
请自行承担使用此补丁的风险。

获取仓库URL时出现404未找到错误。您能提供更新后的URL吗? - el.severo
你看到了我在你的gits上的最后一条评论吗? - el.severo

1
创建虚拟机时,您可以指定自定义的完全限定域名 (FQDN) 主机名作为可选参数。该功能目前处于测试阶段 (Beta)。
$ gcloud beta compute instances create INSTANCE_NAME --hostname example.hostname

这应该适用于各种操作系统,并消除了解决方案脚本的需求。有关更多信息,请参见文档
-- Sirui(Google计算引擎产品经理)

0

我在整个网站上寻找答案并找到了一些可行的解决方案,但需要结合几个解决方案。这个帖子似乎是回答的地方。

1)echo example.com > /etc/hostname

2)在/etc/hosts中添加--127.0.1.1 example.com

3)将命令hostnamectl set-hostname example.com添加到/etc/rc.local脚本中

4)取消注释/etc/dhcp/dhclient.conf行:

supersede domain-name "example.com";

5)利润....每次重新启动后似乎都会保持

(请注意,example.com是您的域名:fqdndomain.com - yourfqdndomain.org) 还要注意,这适用于Ubuntu或Debian。其他Unix可能略有不同。我已在Ubuntu 16.04上测试过。


-2

关于“不可能手动编辑任何默认元数据对”的措辞,那么即时级别的默认元数据“/调度”呢?正如在此文章中提到的,我们可以手动设置它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接