美文网首页
Kubernetes Dns query调优

Kubernetes Dns query调优

作者: YichenWong | 来源:发表于2018-01-15 13:56 被阅读300次

Kubernetes 目前使用的kube-dns来实现集群内部的service dns记录解析。默认情况下/etc/resolv

/ # more /etc/resolv.conf
nameserver 172.19.0.10
search crm-platform.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

search doamin列表默认情况下,它只包含本地域名。这可以通过在search关键字后面列出所需的域搜索路径来添加。kubernetes为每个容器配置默认是${namespace}.svc.cluster.local svc.cluster.local cluster.local。在一次dns域名查询时,将会尝试使用每个search doamin依次搜索少于ndots点(默认值为1)的解析器查询,直到找到匹配项。对于具有多个子域的环境,建议调整选项ndots:n,以避免man-in-the-middle攻击和root-dns-servers的不必要通信。
请注意,如果搜索域对应的服务器不是本地的,那么这个查询过程可能会很慢,并且会产生大量的网络流量。如果其中一个搜索域域没有可用的服务器,则查询将超时。

kubernetes 集群内容器里面dns查询抓包过程如下:
kubernetes pod内容器默认的dns请求过程,我们ping www.baidu.com抓包分析

/ # tcpdump -i eth0 -nt -s 500 port domain -v | grep r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 500 bytes
    172.16.6.243.46930 > 172.19.0.10.53: 64884+ A? r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com.crm-platform.svc.cluster.local. (90)
    172.16.6.243.46930 > 172.19.0.10.53: 65374+ AAAA? r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com.crm-platform.svc.cluster.local. (90)
    172.16.6.243.48706 > 172.19.0.10.53: 51041+ A? r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com.svc.cluster.local. (77)
    172.16.6.243.48706 > 172.19.0.10.53: 51397+ AAAA? r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com.svc.cluster.local. (77)
    172.16.6.243.56542 > 172.19.0.10.53: 2243+ A? r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com.cluster.local. (73)
    172.16.6.243.56542 > 172.19.0.10.53: 2519+ AAAA? r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com.cluster.local. (73)
    172.16.6.243.44830 > 172.19.0.10.53: 22499+ A? r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com. (59)
    172.16.6.243.44830 > 172.19.0.10.53: 22789+ AAAA? r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com. (59)
    172.19.0.10.53 > 172.16.6.243.44830: 22499* 1/0/0 r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com. A 192.168.1.224 (75)

可以看到如上信息,r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com中ndots为4小于5,会一次从search domain查询,会造成大量的网络通信,降低dns query性能。
当我们设置ndots:2之后:

/ # tcpdump -i eth0 -nt -s 500 port domain -v | grep r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 500 bytes
    172.16.6.243.38612 > 172.19.0.10.53: 10944+ A? r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com. (59)
    172.16.6.243.38612 > 172.19.0.10.53: 11338+ AAAA? r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com. (59)
    172.19.0.10.53 > 172.16.6.243.38612: 10944* 1/0/0 r-2ze2f5a0ee3afde4.redis.rds.aliyuncs.com. A 192.168.1.224 (75)

由于以上原因,我们建议将设置ndots:2,包含跨namespace service(servie.namepsace)通信即可,可以减少大量无用的dns query来避免查询超时。

自定义pod的dns配置在1.9以上才被得到支持.建议在集群内查询dns 域名时指定绝对路径:www.baidu.com.

参考地址:

相关文章

  • Kubernetes Dns query调优

    Kubernetes 目前使用的kube-dns来实现集群内部的service dns记录解析。默认情况下/etc...

  • DNS 关键字

    1. dns_query 使用dns_query检查DNS请求查询。dns_query关键字与普通内容修饰符略有不...

  • k8s kubeDNS

    k8s DNS 参考: dns-pod-service kubernetes-dns dns name 同一个na...

  • ElasticSearch QueryCache漫谈

    前言 这些天在做ES调优,因为之前更多的是考虑ES的架构和可运维性,并没有过多关注query调优这块。今天一查Qu...

  • JVM调优

    1 调优层次 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。架构调优和代...

  • MySQL 数据库规范--设计篇

    目录 1.设计阶段2.开发阶段3.调优阶段(未开发,pt_query_digest、show_slow_log、查...

  • 基于External-DNS的多集群Ingress DNS实践

    概要 External-DNS提供了编程方式管理Kubernetes Ingress资源的DNS的功能,方便用户从...

  • k8s网络配置DNS

    Pod 的四种DNS策略 Kubernetes支持Pod维度DNS策略设置,通过pod规约中dnsPolicy字段...

  • Twitter 工程师谈 JVM 调优

    一. 调优需要关注的几个方面 内存调优 CPU 使用调优 锁竞争调优 I/O 调优 二. Twitter 最大的敌...

  • Kubernetes addons 之 coredns部署

    DNS 是 Kubernetes 的核心功能之一,通过 kube-dns 或 CoreDNS 作为集群的必备扩展来...

网友评论

      本文标题:Kubernetes Dns query调优

      本文链接:https://www.haomeiwen.com/subject/abgroxtx.html