dns - Kubernetes 多集群服务发现

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

Relates to How to call a service exposed by a Kubernetes cluster from another Kubernetes cluster in same project.

Asking again since Kubernetes has been changes a lot since July.

上下文:

我正在开发一个具有多个集群的基础设施,服务于不同的目的,例如:

  • 集群 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 中的一项服务返回 ** 服务器找不到 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 集群中发现共享服务?

最佳答案

这是 Kubernetes 试图用 Cross-Cluster Service Discovery 解决的大问题之一作为集群联合计划的一部分。您还可以 checkout /参与 Federation SIG .

如果您使用过 here 中描述的技巧解决方案之一,您也许可以破解您的 /etc/resolve.conf 以从其他集群搜索名称服务器。请小心,因为这可能会使您遇到截断问题。

您也可以修改 sky-dns RC让您的集群包含一个额外的 kube2sky pod,它指向另一个集群的 kubernetes 服务(我没有尝试过这个,也没有考虑过所有的影响)。

我上面描述的两种 hack 都不能防止名称冲突,因此您必须手动防止这种情况。

关于dns - Kubernetes 多集群服务发现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33816575/

相关文章:

.net - Http 请求 - 绕过 DNS [.Net]

ssh - autossh退出,因为ssh(dropbear)无法解析主机

Kubernetes 节点健康检查

docker - 带有 env vars 的 Kubernetes cronjob args

kubernetes - Kubernetes 是如何跟踪 StatefulSet 中哪个云盘挂载到哪个 Pod 上的?

seo - 将多个域转发到一个 Web 服务器的(seo 友好的)最佳技术是什么?

networking - DNS 区域和 DNS 域之间的区别

docker - 使用 Helm2 的 Kubernetes 滚动更新

go - 从容器内运行的应用程序使用 Gmail API

docker - 如何通过 SSH 连接到 Kubernetes 集群中的 docker 容器?