k8s 中不同命名空间中的服务的 DNS 名称是什么?

inj*_*joy 2 dns fqdn kubernetes

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

那么这两者有什么区别呢?哪一款更值得推荐呢?为什么?

mar*_*rio 5

这两种形式都被认为是正确的(与本文相比,并且在大多数情况下工作正常,但是当人们遇到一些仅与短名称解析相关的问题时,我可以在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>,它将解析为命名空间本地的服务。这对于跨多个命名空间(例如开发、登台和生产)使用相同的配置非常有用。如果要跨命名空间访问,则需要使用完全限定域名 (FQDN)

在我看来,坚持FQDN(完全限定域名)标准要好得多,并且通常显式被认为是比隐式更好的做法。