首页 文章

Kubernetes StatefulSets:外部DNS

提问于
浏览
3

Kubernetes StatefulSets使用稳定的网络ID创建内部DNS条目 . 文档在这里描述:

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

我正在尝试无头服务,这对于各个服务之间的通信非常有用,即 web-0.web.default.svc.cluster.local 可以与_2908246连接和通信就好了 .

Is there any way that I can configure this to work outside of the cluster network as well, where "cluster.local" is replaced with something like "clustera.com"?

我想给另一个kubernetes集群,让我们称之为clusterb.com,访问原始集群的各个服务(clustera.com);我希望它看起来像clusterb只是命中像 web-1.web.default.svc.clustera.comweb-0.web.default.svc.clustera.com 这样的 endpoints .

这可能吗?我想访问各个服务,而不是负载 balancer endpoints .

1 回答

  • 2

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

    • 第一个肯定是最简单的,我相信你没有因某种原因实现它,你没有在问题中报告为什么 .

    我在谈论Headless services没有外部名称类型服务的选择器CNAME记录 .

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

    因此,如果您需要指向其他群集的服务,则需要注册指向 clusterb 的相对IP的域名 .

    • 我从未测试过的第二个解决方案,但我相信它可以适用于你的情况是使用Federated Cluster,其原因使用它是符合文档:

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

相关问题