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.com
和web-0.web.default.svc.clustera.com
等端点。
这可能吗?我想访问各个服务,而不是负载平衡端点。
答案 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记录来访问来自多个群集的后端。