如何排查ACK机器DNS解析异常和常见问题

您所在的位置:网站首页 无法解析响应 如何排查ACK机器DNS解析异常和常见问题

如何排查ACK机器DNS解析异常和常见问题

2023-09-25 01:47| 来源: 网络整理| 查看: 265

索引

类别

内容

诊断流程

基本概念

异常诊断流程

常见客户端报错

排查思路

排查思路

常见排查方法

检查业务Pod的DNS配置

检查CoreDNS Pod运行状态

检查CoreDNS运行日志

检查CoreDNS DNS查询请求日志

检查CoreDNS Pod的网络连通性

检查业务Pod到CoreDNS的网络连通性

抓包

常见问题及解决方案

集群外部域名解析异常

新增Headless类型域名无法解析

StatefulSets Pod域名无法解析

安全组、交换机ACL配置错误

容器网络连通性异常

CoreDNS Pod负载高

CoreDNS Pod负载不均

CoreDNS Pod运行状态异常

客户端负载原因导致解析失败

Conntrack表满

AutoPath插件异常

A记录和AAAA记录并发解析异常

IPVS缺陷导致解析异常

NodeLocal DNSCache未生效

PrivateZone域名解析异常

诊断流程基本概念

集群内部域名:CoreDNS会将集群中的服务暴露为集群内部域名,默认以.cluster.local结尾,这类域名的解析通过CoreDNS内部缓存完成,不会从上游DNS服务器查询。

集群外部域名:在第三方DNS服务商、阿里云DNS云解析、PrivateZone等产品注册的权威解析,这类域名由CoreDNS的上游DNS服务器负责解析,CoreDNS仅做解析请求转发。

业务Pod:您部署在Kubernetes集群中的容器Pod,不包含Kubernetes自身系统组件的容器。

接入CoreDNS的业务Pod:容器内DNS服务器指向了CoreDNS的业务Pod。

接入NodeLocal DNSCache的业务Pod:集群中安装了NodeLocal DNSCache插件后,通过自动或手动方式注入DNSConfig的业务Pod。这类Pod在解析域名时,会优先访问本地缓存组件。如果访问本地缓存组件不通时,会访问CoreDNS提供的kube-dns服务。

异常诊断流程故障手册流程.png

判断当前的异常原因。具体信息,请参见常见客户端报错。

如果异常原因是域名不存在,请参见排查思路的《按解析异常的域名类型》

如果异常原因是无法连接至域名服务器,请参见排查思路的《按解析异常出现频次》

如果以上排查无果,请按以下步骤排查。

检查业务Pod的DNS配置,是否已经接入CoreDNS。具体操作,请参见检查业务Pod的DNS配置。

如果没有接入CoreDNS,则考虑是客户端负载原因或Conntrack表满导致解析失败。具体操作,请参见客户端负载原因导致解析失败和Conntrack表满。

如果接入了CoreDNS,则按以下步骤排查。

通过检查CoreDNS Pod运行状态进行诊断。具体操作,请参见检查CoreDNS Pod运行状态和CoreDNS Pod运行状态异常。

通过检查CoreDNS运行日志进行诊断。具体操作,请参见检查CoreDNS运行日志和集群外部域名解析异常。

确认异常是否能够稳定复现。

如果异常稳定复现,请参见检查CoreDNS DNS查询请求日志和检查业务Pod到CoreDNS的网络连通性。

如果异常不能稳定复现,请参见抓包。

如果使用了NodeLocal DNSCache,请参见NodeLocal DNSCache未生效和PrivateZone域名解析异常。

如果以上排查无果,请提交工单排查。

常见客户端报错

客户端

报错日志

可能异常

ping

ping: xxx.yyy.zzz: Name or service not known

域名不存在或无法连接域名服务器。如果解析延迟大于5秒,一般是无法连接域名服务器。

curl

curl: (6) Could not resolve host: xxx.yyy.zzz

PHP HTTP客户端

php_network_getaddresses: getaddrinfo failed: Name or service not known in xxx.php on line yyy

Golang HTTP客户端

dial tcp: lookup xxx.yyy.zzz on 100.100.2.136:53: no such host

域名不存在。

dig

;; ->>HEADER100.100.2.136:53: i/o timeout

日志出现时间段内,CoreDNS无法连接到上游DNS服务器。

客户端负载原因导致解析失败问题现象

业务高峰期间或突然偶发的解析失败,ECS监控显示机器网卡重传率、CPU负载有异常。

问题原因

接入CoreDNS的业务Pod所在ECS负载达到100%等情况导致UDP报文丢失。

解决方案

建议提交工单排查原因。

考虑采用NodeLocal DNSCache缓存方案,提升DNS解析性能,降低CoreDNS负载。具体操作,请参见使用NodeLocal DNSCache。

Conntrack表满问题现象

部分节点或全部节点上接入CoreDNS的业务,Pod解析域名在业务高峰时间段内出现大批量域名解析失败,高峰结束后失败消失。

运行dmesg -H,滚动到问题对应时段的日志,发现出现conntrack full字样的报错信息。

问题原因

Linux内Conntrack表条目有限,无法进行新的UDP或TCP请求。

解决方案

增加Conntrack表限制。具体操作,请参见如何提升Linux连接跟踪Conntrack数量限制?。

AutoPath插件异常问题现象

解析集群外部域名时,概率性解析失败或解析到错误的IP地址,解析集群内部域名无异常。

高频创建容器时,集群内部服务域名解析到错误的IP地址。

问题原因

CoreDNS处理缺陷导致AutoPath无法正常工作。

解决方案

按照以下步骤,关闭AutoPath插件。

执行kubectl -n kube-system edit configmap coredns命令,打开CoreDNS配置文件。

删除autopath @kubernetes一行后保存退出。

检查CoreDNS Pod运行状态和运行日志,运行日志中出现reload字样后说明修改成功。

A记录和AAAA记录并发解析异常问题现象

接入CoreDNS的业务Pod解析域名概率性失败。

从抓包或检查CoreDNS DNS查询请求日志可以发现,A和AAAA通常在同一时间的出现,并且请求的源端口一致。

问题原因

并发A和AAAA的DNS请求触发Linux内核Conntrack模块缺陷,导致UDP报文丢失。

解决方案

考虑采用NodeLocal DNSCache缓存方案,提升DNS解析性能,降低CoreDNS负载。具体操作,请参见使用NodeLocal DNSCache。

CentOS、Ubuntu等基础镜像,可以通过options timeout:2 attempts:3 rotate single-request-reopen等参数优化。

如果容器镜像是以Alpine制作的,建议更换基础镜像。更多信息,请参见Alpine。

PHP类应用短连接解析问题较多,如果使用的是PHP Curl的调用,可以使用CURL_IPRESOLVE_V4参数仅发送IPv4解析。更多信息,请参见函数说明。

IPVS缺陷导致解析异常问题现象

当集群节点扩缩容、节点关机、CoreDNS缩容时,出现概率性解析失败,通常时长在五分钟左右。

问题原因

若您集群的kube-proxy负载均衡模式为IPVS,在CentOS、Alibaba Cloud Linux 2内核版本小于4.19.91-25.1.al7.x86_64的节点上,摘除IPVS UDP类型后端后,一段时间内若新发起的UDP报文源端口冲突,该报文会被丢弃。

解决方案

考虑采用NodeLocal DNSCache缓存方案,可以容忍IPVS丢包。具体操作,请参见使用NodeLocal DNSCache。

优化IPVS UDP超时时间。具体操作,请参见配置IPVS类型集群的UDP超时时间。

NodeLocal DNSCache未生效问题现象

NodeLocal DNSCache没有流量进入,所有请求仍在CoreDNS上。

问题原因

未配置DNSConfig注入,业务Pod实际仍配置了CoreDNS kube-dns服务IP作为DNS服务器地址。

业务Pod采用Alpine作为基础镜像,Alpine基础镜像会并发请求所有nameserver,包括本地缓存和CoreDNS。

解决方案

配置DNSConfig自动注入。具体操作,请参见使用NodeLocal DNSCache。

如果容器镜像是以Alpine制作的,建议更换基础镜像。更多信息,请参见Alpine。

PrivateZone域名解析异常问题现象

对于接入NodeLocal DNSCache的业务,Pod无法解析PrivateZone上注册的域名,或无法解析包含vpc-proxy字样的阿里云云产品API域名,或解析结果不正确。

问题原因

PrivateZone不支持TCP协议,需要使用UDP协议访问。

解决方案

在CoreDNS中配置prefer_udp。具体操作,请参见CoreDNS配置说明。

相关文档

DNS原理和配置说明

分析和监控CoreDNS日志

CoreDNS自动升级

使用DNSTAP Analyser诊断异常

使用NodeLocal DNSCache



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3