3

Kubernetes StatefulSets创建具有稳定网络 ID 的内部 DNS 条目。文档在这里描述了这一点:

StatefulSet 中的每个 Pod 都从 StatefulSet 的名称和 Pod 的序号派生其主机名。构造主机名的模式是 $(statefulset name)-$(ordinal)。上面的示例将创建三个名为 web-0、web-1、web-2 的 Pod。StatefulSet 可以使用 Headless Service 来控制其 Pod 的域。此 Service 管理的域采用以下形式:$(service name).$(namespace).svc.cluster.local,其中“cluster.local”是集群域。在创建每个 Pod 时,它会获得一个匹配的 DNS 子域,格式为:$(podname).$(governing service domain),其中管理服务由 StatefulSet 上的 serviceName 字段定义。

我正在试验无头服务,这对于单个服务之间的通信非常有用,即web-0.web.default.svc.cluster.local可以很好地连接和通信web-1.web.default.svc.cluster.local

有什么方法可以将它配置为在集群网络之外也可以工作,其中“cluster.local”被替换为“clustera.com”之类的东西?

我想给另一个kubernetes集群,我们称之为clusterb.com,访问原始集群(clustera.com)的各个服务;我希望它看起来像 clusterb 只是简单地击中web-1.web.default.svc.clustera.com和之类的端点web-0.web.default.svc.clustera.com

这可能吗?我想访问单个服务,而不是负载平衡端点。

4

1 回答 1

2

我建议您测试以下解决方案并检查它们是否可以帮助您在特定情况下实现目标:

  • 第一个肯定是最简单的,我相信您出于某种原因没有实施它,并且您没有在问题中报告原因。

    我说的是没有选择器 CNAME 记录的外部名称类型服务的无头服务。

    ExternalName:通过返回带有其值的 CNAME 记录,将服务映射到 externalName 字段的内容(例如 foo.bar.example.com)。没有设置任何类型的代理。这需要 1.7 或更高版本的 kube-dns

    因此,如果您需要指向其他集群的服务,则需要注册一个指向clusterb.

  • 我从未测试过的第二个解决方案,但我相信它可以适用于您的案例是使用联邦集群,其使用它的原因是根据文档:

    跨集群发现:联合提供了自动配置 DNS 服务器和负载均衡器以及来自所有集群的后端的能力。例如,您可以确保可以使用全局 VIP 或 DNS 记录来访问来自多个集群的后端。

于 2018-03-14T14:53:37.567 回答