gpt4 book ai didi

kubernetes - 如何将名称服务器添加到 Google Container Engine [GKE] 中的所有 pod?

转载 作者:行者123 更新时间:2023-12-04 02:01:29 24 4
gpt4 key购买 nike

我正在尝试将我的本地集群迁移到 GKE。为了促进这种转变,我需要能够解析遗留服务的名称。

假设网络/VPN 是一个已解决的问题。

目前有没有办法用 GKE 做到这一点?

实际上,我正在尝试将 NS 添加到每个/etc/resolv.conf

最佳答案

我想补充 Eric 所说的内容,并对其进行一些改动。

我们在 kubernetes 1.1“稳定期”期间的一个认识是,对于 resolv.conf 和解析器行为等内容并没有真正的规范。不同的解析器库做不同的事情,这给我们的用户带来了痛苦。

具体来说,一些常见的解析器假定所有 nameserver s 是可替代的,如果您有处理 DNS 命名空间不同部分的名称服务器,它会中断。我们决定,对于 kube 1.2,我们不会传递多个 nameserver线入容器。相反,我们只传递处理 cluster.local 的 kube-dns 服务器。查询并将任何其他查询转发到“上游”名称服务器。

我们怎么知道什么是“上游”?我们使用 nameservers的节点。有一个 per-pod dnsPolicy 字段来管理此选择。最终结果是容器看到单个 nameserver在我们拥有的 resolv.conf 中,该名称服务器处理整个 DNS namespace 。

这实际上意味着你没有一个很好的钩子(Hook)来插入你自己的名称服务器。您可以更改 --cluster-dns标记 kubelets 以指向您自己的 DNS 服务器,然后将其转发到 kube-dns,然后转发到“上游”。问题是 GKE 并不真正支持以这种方式更改标志。如果/当节点更新时,该标志将消失以支持默认值。

可能的解决方案:

  • 让 kubelet 从集群内配置中读取它们的标志。这已经是记录计划,但不在 v1.2
  • 让 kube-dns 使用一个标志来指示“上游”是什么。 Kube-dns 是一个“集群插件”,因此最终用户并不是真正可变的(我们将使用您的集群对其进行更新并丢失您的更改)。
  • 让 kube-dns 从集群内配置中读取其标志,并获取一个指示“上游”是什么的标志。这是一个可行的想法,但可能不适用于 v1.2(为时已晚)。可以将其修补到 v1.2.x 中,但这并不是真正的错误修复,而是一个功能。
  • 将您自己的 DNS 服务器放入每个节点的 resolv.conf 中,以便 kube-dns 将您用作上游。我不认为 GKE 有办法配置它不会在节点升级时丢失。您可以编写一个 Controller ,定期通过 SSH 连接到虚拟机并将其写出来,然后检查您的 kube-dns 容器的正确性。布莱赫。

  • 我认为正确的答案是使用集群内配置映射来通知 kubelet 或 DNS(或两者)。如果您认为这些可能是可行的答案(尽管存在时间框架问题),那么如果您打开一个 GitHub 问题进行讨论,那就太好了。它将在那里获得更多的知名度。

    关于kubernetes - 如何将名称服务器添加到 Google Container Engine [GKE] 中的所有 pod?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35783655/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com