【问题标题】:Google Compute Engine: Internal DNS server and issues with the resolvingGoogle Compute Engine:内部 DNS 服务器和解决问题
【发布时间】:2015-07-08 10:21:48
【问题描述】:

由于谷歌计算引擎不提供内部 DNS,我创建了 2 个 centos 绑定机器,它们将为 GCE 上的机器进行解析,并将解析通过 vpn 转发到我的私有云,反之亦然。

正如谷歌云帮助文档所建议的那样,您可以有这种情况。并在每个实例上编辑 resolv.conf 以进行解析。

我所做的是编辑 ifcg-eth0 以禁用 PEERDNS 和 /etc/resolv.conf 我添加了搜索域和我的实例的前 2 个名称服务器。

现在在一个实例重新启动后..它不会再次启动,因为它正在搜索 metadata.google.internal 域

7 月 8 日 10:17:14 instance-1 google:等待元数据服务器,尝试 412

在这种情况下,最佳做法是什么?

ty

我还需要内部 DNS 来执行穷人循环故障转移,因为 GCE 不提供内部平衡器。

【问题讨论】:

  • 我设法发现有一个 onboot 脚本试图获取元数据信息,如果它找不到本地元数据服务器失败。循环完成和服务器启动需要 30 分钟 github.com/GoogleCloudPlatform/compute-image-packages/blob/…
  • 因此,如果有人需要在 GCE 实例上拥有一个带有自己的名称服务器条目的静态 resolv.conf (centos),请编辑 ifcfg-eth 并更改 PEERDNS=no 编辑 /etc/resolv.conf 并放在上面您的域名服务器 + 搜索域编辑 /etc/hosts 并添加:169.254.169.254 metadata.google.internal
  • 最近谷歌默认将 metadata.google.internal 添加到 hosts 文件中。我注意到网络管理器有时在更新后,即使 peer-dns 不存在,也会创建一个空的 resolv.conf 文件。问题已通过 [chattr +i /etc/resolv.conf] 解决

标签: google-compute-engine


【解决方案1】:

https://cloud.google.com/compute/docs/networking 所述:

每个实例的元数据服务器都充当 DNS 服务器。它将所有网络 IP 地址的 DNS 条目存储在本地网络中,并调用 Google 的公共 DNS 服务器以获取网络外的条目。您无法配置此 DNS 服务器,但您可以根据需要设置自己的 DNS 服务器,并通过编辑 /etc/resolv.conf 文件来配置您的实例以使用该服务器。

所以您应该可以只使用 169.254.169.254 作为您的 DNS 服务器。如果您需要定义外部 DNS 条目,您可能喜欢Cloud DNS。如果您使用 Cloud DNS 或任何其他 DNS 提供商设置域,则 169.254.169.254 解析器应该会找到它。

如果您需要更复杂的内容,例如客户内部 DNS 名称,那么您自己的 BIND 服务器可能是最佳解决方案。只需确保 metadata.google.internal. 解析为 169.254.169.254。

【讨论】:

  • 嗨,大卫,解决方案正如我在第 1 篇文章第 2 条评论中所写的那样。
  • 我有这个。设法弄清楚串行控制台命令,所以我可以看到它。我使用本地 dns,因此在对它们运行查询时,我不会被垃圾邮件阻止列表查找阻止。期待 30 分钟结束 :(,有点遗憾的是元查询查找被阻塞了!
【解决方案2】:

好的,我刚遇到这个.. 但不幸的是,30 分钟后没有超时,让它工作。幸运的是,nelasx 已经正确诊断它,并给出了修复。我添加这个是为了根据他的出色问题和评论答案给出我必须采取的步骤。我刚刚提取了我必须在一个地方收集的信息,以便找到解决方案。

症状:在启动 google 实例时 - 连接被拒绝 检查串行控制台输出后,将看到:

Jul 8 10:17:14 instance-1 google: Waiting for metadata server, attempt 412

您可以尝试等待,对我不起作用,然后检查https://github.com/GoogleCloudPlatform/compute-image-packages/blob/master/google-startup-scripts/usr/share/google/onboot

# Failed to resolve host or connect to host.  Retry indefinitely.
6|7) sleep 1.0
log "Waiting for metadata server, attempt ${count}"

让我相信这是行不通的。

所以,解决方案是摆弄磁盘,添加 nelasx 的解决方案: “编辑 ifcfg-eth 并更改 PEERDNS=no 编辑 /etc/resolv.conf 并将您的名称服务器放在顶部 + 搜索域编辑 /etc/hosts 并添加:169.254.169.254 metadata.google.internal”

为此,

  1. 最好在开始之前创建快照备份,以防万一出现问题

  2. 为您的实例取消选中“删除实例时删除启动磁盘”

  3. 删除实例

  4. 创建微实例

  5. 挂载磁盘

    sudo ls -l /dev/disk/by-id/* # 这将为您提供实例的名称

    sudo mkdir /mnt/new

    sudo mount /dev/disk/by-id/scsi-0Google_PersistentDisk_instance-1-part1 /mnt/new

instance-1 将根据您的设置进行更改

  1. 按照 nelasx 的解决方案进行编辑 - 我陷入了白痴陷阱 - 使用相对路径 - 不要只 sudo vi /etc/hosts 使用 /mnt/new/etc/hosts - 这花了我 15更多的时间,因为我不得不经历:沮丧,挠头,踢自己循环。

  2. 删除调试实例,确保未选中附加磁盘删除选项

  3. 创建一个与您的原始文件相匹配的新实例,并将已编辑的磁盘作为您的启动磁盘并启动它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-02
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 2015-08-02
    相关资源
    最近更新 更多