3

有关 How to call a service exposed by a Kubernetes cluster from another Kubernetes cluster in same projectKubernetes多集群服务发现

自从7月以来Kubernetes已经发生了很大的变化,

语境:

我正在与多个集群服务于不同的目的,例如基础设施:

  • 群集A上运行的服务/应用食用创建数据
  • 集群B运行的服务/应用程序使用由群集A中的应用程序创建的数据
  • 群集C运行数据服务,如Redis,Memcache,等等。

所有集群位于default名称空间中。

问题:

在Kubernetes,每个集群都有自己的kubernetes(在default命名空间)和KUBE-DNS(在kube-system命名空间)使用不同的IP服务。

这种设置会发生什么情况,上面的集群A和B中的服务无法发现(在服务发现术语中),假设Redis位于集群C中。因此,来自集群A/D中某个服务的nslookup redis.default.svc.cluster.local B回来了** server can't find redis.default.svc.cluster.local: NXDOMAIN注:这个工作从内部集群C.

我,因为我发现了大约KUBE-DNS和读过许多文件几乎都假定一个群集设置。

集群信息:

以下是示出没有共同KUBE-DNS祖先的DNS名称服务器/etc/resolv.conf从两个不同的簇:

集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 

什么是理想的修复/更新此设置可以跨所有Kubernetes集群曝光率,在GCE共享服务环境?

回答

5

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

如果您已经使用了黑客解决描述here之一,你也许可以破解你的/etc/resolve.conf也从其他集群搜索域名服务器。要小心,因为这可能会让你陷入截断问题。

您可能还可以修改您的集群的sky-dns RC以包含指向其他集群的kubernetes服务的额外kube2sky窗格(我还没有尝试过这一点,或者考虑过所有的含义)。

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

+0

感谢您的信息,CJ!我已经遇到了这些黑客/解决方案,并且在距离Kube Federation大约半年的时间之前,我已经为此解决了单个群集解决方案,直到Kubernetes找到适当的解决方案。 –