Jak*_*ake 8 kubernetes google-kubernetes-engine
我正在尝试将我的内部群集迁移到GKE.为了促进这种转变,我需要能够解析遗留服务的名称.
假设网络/ VPN是一个已解决的问题.
目前GKE有办法做到这一点吗?
实际上我正在尝试为每个/etc/resolv.conf添加一个NS
我想补充埃里克所说的内容,并稍微修改一下。
我们在 kubernetes 1.1“稳定期”期间的认识之一是,对于 resolv.conf 和解析器行为等内容并没有真正的规范。不同的解析器库做不同的事情,这给我们的用户带来了痛苦。
具体来说,一些常见的解析器假设所有nameserver
s 都是可替换的,并且如果您有处理 DNS 名称空间不同部分的名称服务器,则会中断。我们决定,对于 kube 1.2,我们不会将多行传递nameserver
到容器中。相反,我们仅传递 kube-dns 服务器,该服务器处理cluster.local
查询并将任何其他查询转发到“上游”名称服务器。
我们如何知道什么是“上游”?我们使用nameservers
节点的。每个 pod 有一个 dnsPolicy 字段来控制此选择。最终结果是容器nameserver
在 resolv.conf 中看到一个我们拥有的名称服务器,并且该名称服务器处理整个 DNS 名称空间。
这实际上意味着没有一个很好的钩子让你插入你自己的域名服务器。您可以将--cluster-dns
标志更改为 kubelet 以指向您自己的 DNS 服务器,然后该服务器将转发到 kube-dns,然后 kube-dns 将转发到“上游”。问题是 GKE 并不真正支持以这种方式更改标志。如果/当节点更新时,该标志将消失以支持默认值。
可能的解决方案:
让 kubelet 从集群内配置中读取它们的标志。这已经是记录计划,但不在 v1.2 中
让 kube-dns 带有一个标志来指示什么是“上游”。Kube-dns 是一个“集群插件”,因此最终用户并不真正可变(我们将使用您的集群更新它并丢失您的更改)。
让 kube-dns 从集群内配置中读取其标志,并获取一个指示“上游”是什么的标志。这是一个可行的想法,但可能不适用于 v1.2(太晚了)。也许可以将其修补到 v1.2.x 中,但这并不是真正的错误修复,而是一个功能。
将您自己的 DNS 服务器放入每个节点上的 resolv.conf 中,以便 kube-dns 将您用作上游。我认为 GKE 没有办法配置它,并且不会在节点升级时丢失。您可以编写一个控制器,定期通过 SSH 连接到虚拟机并将其写出,然后检查 kube-dns 容器的正确性。布莱赫。
我认为正确的答案是使用集群内配置映射来通知 kubelet 或 DNS(或两者)。如果您认为这些可能是可行的答案(尽管存在时间框架问题),那么如果您打开 GitHub 问题进行讨论,那就太好了。它将在那里获得更多的知名度。
归档时间: |
|
查看次数: |
1886 次 |
最近记录: |