【问题标题】:Openshift/Kubernates kube dns best practise (ndots = 5)Openshift/Kubernetes kube dns 最佳实践 (ndots = 5)
【发布时间】:2020-08-08 12:12:14
【问题描述】:

我使用 Openshift/Kubernates 已经有一段时间了,这就是我的理解。 用于服务间通信

  • 如果它们在同一命名空间下,则使用${service-name} 的 DNS 名称
  • 如果它们来自不同的命名空间(网络已加入),则使用${service-name}.${namespace}.svc.cluster.local 的 DNS 名称

最近有人向我介绍了“我们应该在 svc.cluster.local 之后添加一个点以使其成为 FQDN,以提高 DNS 查找速度”的主题。做了一些测试,确实使用点查找要快得多。 (~100ms 不带点,10ms 带点)

经过一番研究,这是由 kubernates 的默认 dns 设置引起的

sh-4.2$ cat /etc/resolv.conf
search ${namespace}.svc.cluster.local svc.cluster.local cluster.local
nameserver X.X.X.X
options ndots:5

如果 dns 名称不包含 5 个点,则 ndots = 5 将执行本地搜索(顺序)。 在${service-name}.${namespace}.svc.cluster.local的情况下,本地搜索将是这样的

  1. ${service-name}.${namespace}.svc.cluster.local + ${namespace}.svc.cluster.local // 查找失败
  2. ${service-name}.${namespace}.svc.cluster.local + svc.cluster.local // 查找失败
  3. ${service-name}.${namespace}.svc.cluster.local + cluster.local // 查找失败
  4. ${service-name}.${namespace}.svc.cluster.local // 成功查询

对于${service-name}.${namespace}.svc.cluster.local.,本地搜索将是这样的

  1. ${service-name}.${namespace}.svc.cluster.local // 成功查询

参考文献

  1. link
  2. how to debug

问题:

  1. 既然ndots = 5是kubernetes的默认设置,为什么${service-name}.${namespace}.svc.cluster.local.官方没有记录呢?
  2. 我们应该将所有服务调用更改为${service-name}.${namespace}.svc.cluster.local. 吗?有什么潜在的缺点吗?

【问题讨论】:

    标签: networking kubernetes dns openshift kube-dns


    【解决方案1】:

    既然ndots = 5 是 kubernetes 的默认设置,为什么 ${service-name}.${namespace}.svc.cluster.local. 未记录在 官方?

    嗯,这是一个非常好的问题。我搜索了官方文档,看起来这不是文档化的功能。出于这个原因,发布您的疑问和请求改进文档的更好的地方是Kubernetes DNS 的官方 GitHub 站点。

    我们是否应该将所有服务调用更改为 ${service-name}.${namespace}.svc.cluster.local. ?任何潜在的 缺点?

    如果它对您很有效并且肯定会提高性能,我会说- 为什么不呢? 我看不出这里有任何潜在的缺点。通过添加最后一个点,如果您以${service-name}.${namespace}.svc.cluster.local 的形式使用Service 域名,那么您只是省略了那些注定会失败的前3 个查找

    从您描述的查找过程和您的测试推断,我猜如果您只使用${service-name}(当然只在同一个namespace 内),dns 查找也应该更快更接近您观察到的10ms当使用${namespace}.svc.cluster.local svc.cluster.local cluster.local. as then 它在第一次迭代中匹配。

    【讨论】:

    • 感谢您的建议,我确实在 kubernates repo 上发布了这个问题。 github.com/kubernetes/kubernetes/issues/… 显然他们仍在寻找解决问题的正确方法
    • 简而言之,这可能是我总结/推荐的 - 对于出站呼叫,使用 FQDN - 对于相同的 ns 呼叫,使用 ${service-name} - 对于不同的服务名称,也使用 FQDN跨度>
    【解决方案2】:

    基于最新的文档here,它指出我们应该使用${service}.${namespace} 从不同的命名空间调用服务并期望在第二次尝试时解决

    【讨论】:

      猜你喜欢
      • 2016-09-08
      • 2020-01-15
      • 1970-01-01
      • 2012-08-19
      • 2017-09-17
      • 1970-01-01
      • 2018-09-24
      • 2023-03-22
      • 2017-08-15
      相关资源
      最近更新 更多