Kubernetes多集群服务发现
有关 How to call a service exposed by a Kubernetes cluster from another Kubernetes cluster in same project。Kubernetes多集群服务发现
自从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共享服务环境?
这是Kubernetes试图用Cross-Cluster Service Discovery作为群集联合计划的一部分解决的一个大问题。您也可以检查/捐助Federation SIG。
如果您已经使用了黑客解决描述here之一,你也许可以破解你的/etc/resolve.conf
也从其他集群搜索域名服务器。要小心,因为这可能会让你陷入截断问题。
您可能还可以修改您的集群的sky-dns RC以包含指向其他集群的kubernetes服务的额外kube2sky窗格(我还没有尝试过这一点,或者考虑过所有的含义)。
我上面描述的两种黑客都不会阻止名称冲突,所以你必须手动阻止。
感谢您的信息,CJ!我已经遇到了这些黑客/解决方案,并且在距离Kube Federation大约半年的时间之前,我已经为此解决了单个群集解决方案,直到Kubernetes找到适当的解决方案。 –