【问题标题】:Kubernetes multi-cluster service discoveryKubernetes 多集群服务发现
【发布时间】:2016-02-22 08:15:40
【问题描述】:

涉及到 How to call a service exposed by a Kubernetes cluster from another Kubernetes cluster in same project.

再次询问,因为 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


    【解决方案1】:

    这是 Kubernetes 试图通过 Cross-Cluster Service Discovery 作为集群联合计划的一部分来解决的大问题之一。您也可以查看/投稿到Federation SIG

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

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

    我上面描述的两个黑客都不能防止名称冲突,所以你必须手动防止它。

    【讨论】:

    • 感谢您的信息,CJ!我遇到了这些 hacks/解决方案,而且距离 Kube Federation 大约有半年的时间,我现在已经选择了单集群解决方案,直到 Kubernetes 有一个合适的解决方案。
    猜你喜欢
    • 2022-11-30
    • 2020-07-28
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    相关资源
    最近更新 更多