库伯内特斯StatefulSets创建具有稳定网络ID的内部DNS条目。文档描述如下:
StatefulSet中的每个Pod都从StatefulSet的名称和Pod的序号中派生其主机名。构造的主机名的模式是$(statefulset name)-$(序号)。上面的示例将创建三个名为web-0、web-1、web-2的Pod。StatefulSet可以使用Headless Service来控制其Pod的域。此Service管理的域采用以下形式:$(service name)。$(namespace). svc.club.local,其中“club.local”是集群域。当每个Pod被创建时,它会得到一个匹配的DNS子域,形式为:$(podname)。$(管理服务域),其中管理服务由StatefulSet上的serviceName字段定义。
我正在试验无头服务,这对于各个服务之间的通信非常有用,即web-0. web.default.svc.club.local
可以与web-1.web.default.svc.club.local
连接和通信。
是否有任何方法可以将其配置为在集群网络之外工作,其中“group. local”被替换为“clustera.com”之类的东西?
我想给另一个kubernetes集群,让我们称之为clusterb.com,访问原始集群(clustera.com)的各个服务;我希望它看起来像grousterb,只是访问web-1.web.default.svc.clustera.com
和web-0.web.default.svc.clustera.com
这样的endpoint。
这可能吗?我希望访问各个服务,而不是负载平衡endpoint。
我建议您测试以下解决方案,并检查它们是否可以帮助您在特定场景中实现目标:
>
第一个肯定是最简单的,我相信你因为某种原因没有实现它,你也没有在为什么的问题中报告。
我说的是没有选择器的Headless服务CNAMEExternalName类型服务的记录。
ExternalName:通过返回带有值的CNAME记录,将服务映射到externalName字段的内容(例如foo.bar.example.com)。没有设置任何类型的代理。这需要1.7或更高版本的库贝-dns
因此,如果您需要指向其他集群的服务,您将需要注册一个指向grousterb
相对IP的域名。
我从未测试过的第二个解决方案,但我相信它可以适用于您的情况是使用联邦集群,其使用原因是符合留档:
跨群集发现:联合提供了自动配置DNS服务器和负载均衡器以及来自所有群集的后端的能力。例如,您可以确保全局VIP或DNS记录可用于访问来自多个群集的后端。