【问题标题】:What's the DNS name for services in different namespaces in k8s?k8s中不同命名空间中服务的DNS名称是什么?
【发布时间】:2019-10-14 07:57:20
【问题描述】:

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

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

【问题讨论】:

    标签: kubernetes dns fqdn


    【解决方案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>,它会解析到服务 这是命名空间的本地。这对于使用相同的 跨多个命名空间的配置,例如 Development、Staging 和生产。如果你想跨命名空间,你需要 使用完全限定域名 (FQDN)

    在我看来,坚持FQDN (fully qualified domain name) 标准要好得多,而且通常认为明确比含蓄更好。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-07
        • 2021-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多