去哪儿Kube DNS架构优化
出处:
mp.weixin.qq.com
作者:
王坤
DNS是Kubernetes集群中非常重要的基础服务,在客户端设置不合理、集群规模较大等情况下比较容易出现解析超时、解析失败等现象,严重时可能会对业务造成相关影响。 尤其在节点异常宕机,或集群整体负载、coredns所分布在的节点负载较大时,该情况会非常常见,我们不定期会收到相关解析异常报警和业务线同学反馈,虽然每次持续时间较短,但在高峰期频繁出现也非常折磨。经过多种方案对比考量,我们最终决定对原生DNS架构做下改动: 将原架构集中请求pod→kube-dns svc→coredns pod的方式改造为:各node节点上的pod首选请求所在node本地的dns服务(后续称为q-dnsmasq),在q-dnsmasq服务不可用时再去请求kube-svc; 并将q-dnsmasq启用all-servers模式,让其识别请求域名是K8S内部(如cluster.local)还是外部,内部则同时转发多个Coredns并取最快响应结果; 如为K8S外部域名则在转发请求至公司dns-server时,也通过并发的方式同时请求3台公司dns-server(后续称为localdns),取最快响应结果;