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

时间:2019-10-14 07:57:20

标签: kubernetes dns fqdn

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

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

2 个答案:

答案 0 :(得分:1)

这些是等效的。如果您查看注入到每个容器中的默认resolv.conf:

search mynamespace.svc.cluster.local svc.cluster.local cluster.local mydomain
options ndots:5

您会看到它会自动为您查询链。假设您使用的是默认的Linux DNS客户端行为。如果您有自己的自定义解析器,则尽管大多数人都会检查resolv.conf,但它可能无法理解部分查找语法。

答案 1 :(得分:1)

两种形式都被认为是正确的(与this文章比较),并且大多数情况下都可以正常工作,但是我可以在 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 (fully qualified domain name)标准要好得多,而且经常明确地被认为比隐性更好。