Kubernetes 多集群服务发现

3
如何从同一项目中的另一个Kubernetes集群调用由Kubernetes集群公开的服务相关。由于Kubernetes自七月以来发生了很多变化,所以再次提问。
我正在处理具有多个集群的基础架构,用于不同的目的,例如:
- 集群A运行创建供消费使用的数据的服务/应用程序 - 集群B运行使用由集群A中的应用程序创建的数据的服务/应用程序 - 集群C运行数据服务,如Redis、Memcache等。
所有集群都在默认命名空间中。
问题是,在Kubernetes中,每个集群都有自己的kubernetes(在默认命名空间中)和kube-dns(在kube-system命名空间中)服务,并带有不同的IP。
这种设置会导致上述A和B集群中的服务无法发现(在服务发现术语中),比如集群C中的Redis。因此,对于集群A/B中的服务之一,nslookup redis.default.svc.cluster.local返回** server can't find redis.default.svc.cluster.local: NXDOMAIN注意:这在集群C内部可以正常工作。
我已经阅读了尽可能多的关于kube-dns的文档,几乎所有文档都假定只有一个集群设置。
以下是来自两个不同集群的/etc/resolv.conf显示没有共同kube-dns祖先的DNS名称服务器:
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集群发现共享服务?
1个回答

5
这是Kubernetes试图通过Cross-Cluster Service Discovery解决的一个大问题,作为集群联邦计划的一部分。您还可以查看/贡献于Federation SIG
如果您使用了这里描述的某种解决方案,您可能可以修改/etc/resolve.conf以搜索来自其他集群的nameserver。请小心,因为这可能会导致截断问题。
您也可以修改您集群的sky-dns RC,包括一个额外的kube2sky pod,指向另一个集群的kubernetes服务(我没有尝试过这个方法,或者考虑所有的影响)。

我所描述的两种黑客攻击都无法防止名称冲突,因此您需要手动防止冲突。


谢谢提供的信息,CJ!我已经碰到这些hack /解决方案,并且考虑到Kube联邦需要大约半年的时间,我已经在此阶段选择了单个集群的解决方案,直到Kubernetes有一个适当的解决方案。 - mohsenrezaeithe

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