Kubernetes多集群服务发现

时间:2015-11-19 23:54:26

标签: dns kubernetes google-kubernetes-engine service-discovery skydns

  

相关   How to call a service exposed by a Kubernetes cluster from another Kubernetes cluster in same project

     

自从7月份Kubernetes发生了很大变化以来,再次询问。

上下文

我正在使用多个群集服务于不同目的的基础架构,例如:

  • 群集A运行服务/应用创建供消费的数据
  • 群集B运行服务/应用程序,消耗群集A中的应用程序创建的数据
  • 群集C运行Redis,Memcache等数据服务

所有群集都在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集群中发现共享服务?

1 个答案:

答案 0 :(得分:5)

这是Kubernetes试图用Cross-Cluster Service Discovery作为群集联合计划的一部分来解决的一个大问题。您还可以查看/提供Federation SIG

如果您使用了here所述的 hacks 解决方案之一,您可能会破解/etc/resolve.conf以从另一个搜索名称服务器簇。要小心,因为这可能会让你陷入截断问题。

您也可以修改群集的sky-dns RC,以包含一个额外的kube2sky pod,它指向其他群集的kubernetes服务(我还没试过这个,或者想过所有的影响)。

我上面描述的两个黑客都不会阻止名称冲突,所以你必须手动阻止它。