rke1 coreDNS 加速外部域名解析
|字数总计: 774|阅读时长: 3分钟|阅读量:
本文永久链接: https://www.xtplayer.cn/coredns/accelerate-external-domain-resolution/
问题背景
有时候业务可能对 DNS 解析有很高要求,通过以下脚本循环去访问一个域名,时而会出现解析到过 1s 的错误提示。
for i in `seq 1 500`; do curl -LSs -I api.mch.weixin.qq.com --connect-timeout 1 | grep HTTP/1.1 done
|
问题分析
在 coredns 配置中添加 log 参数可以打印详细的请求日志。
.:53 { log errors health { lameduck 5s } ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa } template ANY AAAA . { rcode NXDOMAIN } prometheus :9153 forward . "/etc/resolv.conf" bufsize 4096 cache 30 loop reload loadbalance }
|
以 api.mch.weixin.qq.com
为例,通过查看日志发现,在最后成功解析域名之前经过了多次搜索域的查询,从而增加了查询时间。
[INFO] 10.42.46.33:49935 - 64126 "AAAA IN api.mch.weixin.qq.com.prod-mail.svc.cluster.local. udp 67 false 512" NXDOMAIN qr,aa,rd 67 0.000146797s [INFO] 10.42.46.33:49935 - 10869 "A IN api.mch.weixin.qq.com.prod-mail.svc.cluster.local. udp 67 false 512" NXDOMAIN qr,aa,rd 160 0.000168806s [INFO] 10.42.46.33:41691 - 27825 "A IN api.mch.weixin.qq.com.svc.cluster.local. udp 57 false 512" NXDOMAIN qr,aa,rd 150 0.000093044s [INFO] 10.42.46.33:41691 - 699 "AAAA IN api.mch.weixin.qq.com.svc.cluster.local. udp 57 false 512" NXDOMAIN qr,aa,rd 57 0.000090373s [INFO] 10.42.46.33:58255 - 30725 "A IN api.mch.weixin.qq.com.cluster.local. udp 53 false 512" NXDOMAIN qr,aa,rd 146 0.000050077s [INFO] 10.42.46.33:58255 - 41997 "AAAA IN api.mch.weixin.qq.com.cluster.local. udp 53 false 512" NXDOMAIN qr,aa,rd 53 0.000106777s [INFO] 10.42.46.33:47452 - 34532 "AAAA IN api.mch.weixin.qq.com. udp 39 false 512" NXDOMAIN qr,aa,rd 39 0.000119399s [INFO] 10.42.46.33:47452 - 26334 "A IN api.mch.weixin.qq.com. udp 39 false 512" NOERROR qr,aa,rd,ra 234 0.000161447s
|
解决方法
可以通过添加子域名的方式,跳过对其他搜索域的查询以提高解析速度。
在 system 项目下修改 coredns 的配置映射文件,参考以下配置,添加了一组 weixin.qq.com:53
,这个是固定格式,根据需要修改搜索域即可。保存后默认一分钟配置会自动同步到 coredns pod,然后 coredns 会自动加载配置。
.:53 { log errors health { lameduck 5s } ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa } template ANY AAAA . { rcode NXDOMAIN } prometheus :9153 forward . "/etc/resolv.conf" bufsize 4096 cache 30 loop reload loadbalance } weixin.qq.com:53 { log errors ready reload cache 300 bufsize 4096 forward . 114.114.114.114 loadbalance } wx.gtimg.com:53 { log errors ready reload cache 300 bufsize 4096 forward . 114.114.114.114 loadbalance }
|
其他问题
以上通过配置 coredns 搜索域的方法虽然可以提高部分域名解析速度,但是目前存在一个已知的 dns 解析问题,因为内核 conntrack 模块的 bug 导致。具体原因请参考: https://tencentcloudcontainerteam.github.io/2018/10/26/DNS-5-seconds-delay/
问题的根本解决
经过测试,在工作负载的 YAML 文件中添加以下配置,可以加快 DNS 解析速度。
dnsConfig: options: - name: single-request-reopen - name: ndots value: "1" dnsPolicy: ClusterFirst imagePullSecrets:
|