与如何从同一项目中的另一个Kubernetes集群调用由Kubernetes集群公开的服务相关。由于Kubernetes自七月以来发生了很多变化,所以再次提问。
我正在处理具有多个集群的基础架构,用于不同的目的,例如:
- 集群A运行创建供消费使用的数据的服务/应用程序 - 集群B运行使用由集群A中的应用程序创建的数据的服务/应用程序 - 集群C运行数据服务,如Redis、Memcache等。
所有集群都在默认命名空间中。
问题是,在Kubernetes中,每个集群都有自己的kubernetes(在默认命名空间中)和kube-dns(在kube-system命名空间中)服务,并带有不同的IP。
这种设置会导致上述A和B集群中的服务无法发现(在服务发现术语中),比如集群C中的Redis。因此,对于集群A/B中的服务之一,
我已经阅读了尽可能多的关于kube-dns的文档,几乎所有文档都假定只有一个集群设置。
以下是来自两个不同集群的
这个设置的理想修复/更新方案是什么,可以在GCE环境中让所有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集群发现共享服务?