Kubernetes StatefulSets:外部DNS

时间:2018-03-13 19:10:06

标签: kubernetes google-cloud-platform google-cloud-dns google-kubernetes-engine

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

  

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

我正在尝试无头服务,这对于各个服务之间的通信非常有用,例如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.comweb-0.web.default.svc.clustera.com等端点。

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

1 个答案:

答案 0 :(得分:2)

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

  • 第一个肯定是最简单的,我相信你没有因为某些原因实现它而且你没有在问题中报告原因。

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

      

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

    因此,如果您需要指定其他群集的服务,则需要注册指向相对IP handleFormSubmit = async (e) => { e.preventDefault() // <-- missing this const formData = new FormData(); formData.append( "file", this.state.file ); const response = await axios.post( "/api/upload", formData ); } handleFileChange = ( e ) => { this.setState( { file: e.target.files[ 0 ] } ); } 的域名。

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

      

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