【发布时间】:2016-02-22 08:15:40
【问题描述】:
再次询问,因为 Kubernetes 自 7 月以来发生了很大变化。
上下文:
我正在开发具有多个服务于不同目的的集群的基础架构,例如:
- 集群 A 运行服务/应用程序创建消费数据
- 集群 B 运行服务/应用程序,使用集群 A 中的应用程序创建的数据
- C 集群运行 Redis、Memcache 等数据服务。
所有集群都在 default 命名空间中。
问题:
在 Kubernetes 中,每个集群都有自己的 kubernetes(在 default 命名空间中)和 kube-dns(在 kube-system 命名空间中)具有不同 IP 的服务。
这种设置发生的情况是,上面集群 A 和 B 中的服务无法发现(在服务发现术语中),比如说集群 C 中的 Redis。所以来自集群 A 中的服务之一的 nslookup redis.default.svc.cluster.local /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
两个集群都使用它们各自的 IP 在 kube-system 命名空间中运行这些服务:
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 集群中发现共享服务?
【问题讨论】:
标签: dns kubernetes google-kubernetes-engine service-discovery skydns