自从7月份Kubernetes发生了很大变化以来,再次询问。
上下文
我正在使用多个群集服务于不同目的的基础架构,例如:
所有群集都在default
命名空间中。
问题:
在Kubernetes中,每个集群都有自己的kubernetes(在default
名称空间中)和kube-dns(在kube-system
名称空间中)服务,具有不同的IP。
此设置会发生的情况是,上面的群集A和群组B中的服务无法发现(在服务发现术语中),比如群集C中的Redis。所以nslookup redis.default.svc.cluster.local
从集群A / B中的一个服务返回** server can't find redis.default.svc.cluster.local: NXDOMAIN
。 注意:这适用于群集C中。
我读了很多关于kube-dns的文档,而且几乎都假设有一个群集设置。
群集信息:
以下是来自两个不同群集的/etc/resolv.conf
,显示没有共同kube-dns祖先的DNS名称服务器:
群集A:
nameserver 10.67.240.10
nameserver 169.254.169.254
nameserver 10.240.0.1
search default.svc.cluster.local svc.cluster.local cluster.local c.project-name.internal. 1025230764914.google.internal. google.internal.
群集C:
nameserver 10.91.240.10
nameserver 169.254.169.254
nameserver 10.240.0.1
search default.svc.cluster.local svc.cluster.local cluster.local c.project-name.internal. google.internal.
options ndots:5
这两个群集都在kube-system
命名空间中为其群集运行这些服务及其各自的IP:
NAME LABELS SELECTOR
kube-dns k8s-app=kube-dns,kubernetes.io/cluster-service=true,kubernetes.io/name=KubeDNS k8s-app=kube-dns
kube-ui k8s-app=kube-ui,kubernetes.io/cluster-service=true,kubernetes.io/name=KubeUI k8s-app=kube-ui
monitoring-heapster kubernetes.io/cluster-service=true,kubernetes.io/name=Heapster k8s-app=heapster
此设置的理想修复/更新是什么,可以在GCE环境中的所有Kubernetes集群中发现共享服务?
答案 0 :(得分:5)
这是Kubernetes试图用Cross-Cluster Service Discovery作为群集联合计划的一部分来解决的一个大问题。您还可以查看/提供Federation SIG。
如果您使用了here所述的 hacks 解决方案之一,您可能会破解/etc/resolve.conf
以从另一个搜索名称服务器簇。要小心,因为这可能会让你陷入截断问题。
您也可以修改群集的sky-dns RC,以包含一个额外的kube2sky pod,它指向其他群集的kubernetes服务(我还没试过这个,或者想过所有的影响)。
我上面描述的两个黑客都不会阻止名称冲突,所以你必须手动阻止它。