3

涉及 如何从同一项目中的另一个 Kubernetes 集群调用 Kubernetes 集群公开的服务

自从 Kubernetes 自 7 月以来发生了很大变化,再次询问。

语境:

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

  • 集群 A 运行服务/应用程序,为消费创建数据
  • 集群 B 运行服务/应用程序,使用集群 A 中的应用程序创建的数据
  • Cluster C 运行 Redis、Memcache 等数据服务。

所有集群都在default命名空间中。

问题:

在 Kubernetes 中,每个集群都有自己的 kubernetes(在default命名空间中)和 kube-dns(在kube-system命名空间中)具有不同 IP 的服务。

这种设置发生的情况是,上面集群 A 和 B 中的服务无法发现(在服务发现术语中),比如说集群 C 中的 Redis。所以nslookup redis.default.svc.cluster.local集群 A/B 中的一个服务中的 a 会返回** 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

两个集群都在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 集群中发现共享服务?

4

1 回答 1

5

这是 Kubernetes 试图通过跨集群服务发现作为集群联合计划的一部分来解决的大问题之一。您还可以签出/贡献到联合 SIG

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

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

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

于 2015-11-20T20:02:19.680 回答