首页 > 解决方案 > k8s中不同命名空间中服务的DNS名称是什么?

问题描述

在命名空间 A 中,我有一个服务nginx正在运行。在命名空间 B 中,我可以使用nginx.Anginx.A.svc.cluster.local访问nginx命名空间 A 中的。

那么这两者有什么区别呢?哪个更推荐?为什么?

标签: kubernetesdnsfqdn

解决方案


这两种形式都被认为是正确的(与本文相比)并且在大多数情况下都可以正常工作,但是当人们遇到一些仅与短名称解析相关的问题时,我可以在github上找到一些问题,例如:

https://github.com/kubernetes/dns/issues/109

https://github.com/kubernetes/kubernetes/issues/10014

正如您在Kubernetes官方文档(ref1ref2)中所读到的,它建议使用长格式以防跨命名空间访问服务:

创建服务时,它会创建相应的 DNS 条目。此条目的形式为 <service-name>.<namespace-name>.svc.cluster.local,这意味着如果容器仅使用<service-name>,它将解析为名称空间本地的服务。这对于跨多个命名空间(例如 Development、Staging 和 Production)使用相同的配置很有用。如果要跨命名空间进行访问,则需要使用完全限定域名 (FQDN)

在我看来,坚持FQDN(完全合格的域名)标准要好得多,而且通常明确被认为是比隐含更好的做法。


推荐阅读