Kubernetes集群control-plane-2/3节点CoreDNS DNS查询超时问题排查求助
Kubernetes集群control-plane-2/3节点CoreDNS DNS查询超时问题排查求助
您好,针对您遇到的这个DNS查询异常问题,我整理了一套逐步排查的方案,您可以按顺序逐一验证,定位根因:
一、先确认节点到CoreDNS ClusterIP的基础连通性
- 在control-plane-2和control-plane-3节点上,先测试与CoreDNS ClusterIP
10.96.0.10的连通性:
如果ping不通,说明节点到CoreDNS服务的网络路径存在阻塞,接下来需要:ping 10.96.0.10 -c 5- 检查节点的防火墙/iptables规则,确认是否放行53端口的UDP和TCP流量(DNS同时依赖这两种协议):
iptables -L INPUT -n | grep 53 iptables -L FORWARD -n | grep 53 - 检查节点的路由表,确认集群Pod网段的路由是否正确配置:
ip route
- 检查节点的防火墙/iptables规则,确认是否放行53端口的UDP和TCP流量(DNS同时依赖这两种协议):
二、检查CoreDNS组件的运行状态
- 在能正常操作集群的节点(比如control-plane-1)上,查看CoreDNS Pod的状态和分布:
重点确认:kubectl get pods -n kube-system -l k8s-app=kube-dns- 所有CoreDNS Pod是否处于
Running状态,没有CrashLoopBackOff或Pending的情况 - Pod是否调度到了所有control-plane节点(如果您的集群配置允许)
- 所有CoreDNS Pod是否处于
- 如果发现Pod状态异常,查看Pod日志获取报错信息:
常见的报错包括配置文件语法错误、权限不足、上游DNS不可达等。kubectl logs -n kube-system <coredns-pod-name>
三、验证kube-proxy的转发功能
CoreDNS的ClusterIP依赖kube-proxy生成的转发规则,所以需要检查control-plane-2/3节点上的kube-proxy状态:
- 查看kube-proxy服务是否正常运行:
如果服务未运行,先启动它:systemctl status kube-proxysystemctl start kube-proxy;如果运行异常,查看日志排查:journalctl -u kube-proxy -f - 检查节点上是否存在针对CoreDNS ClusterIP的iptables转发规则:
如果没有相关规则,说明kube-proxy未正确生成转发规则,可以尝试重启kube-proxy服务:iptables-save | grep 10.96.0.10systemctl restart kube-proxy
四、检查节点的网络插件状态
如果您的集群使用了第三方网络插件(如Calico、Flannel、Weave),节点间的Pod网络连通性依赖这些插件:
- 查看网络插件Pod的运行状态:
# 以Calico为例,其他插件替换对应的label kubectl get pods -n kube-system -l k8s-app=calico-node - 如果插件Pod异常,查看日志定位问题,比如节点网络配置冲突、CNI配置错误等:
kubectl logs -n kube-system <calico-node-pod-name>
五、直接测试CoreDNS Pod的IP连通性
绕过ClusterIP,直接用CoreDNS Pod的实际IP进行查询,验证Pod本身是否可访问:
- 获取CoreDNS Pod的IP地址:
kubectl get pods -n kube-system -l k8s-app=kube-dns -o wide - 在control-plane-2/3节点上用Pod IP执行nslookup:
nslookup google.com <coredns-pod-ip>- 如果能正常返回结果:说明问题出在ClusterIP的转发环节,回到第三步排查kube-proxy
- 如果仍然超时:说明节点到CoreDNS Pod的网络路径不通,回到第四步排查网络插件或节点间网络
六、检查节点的DNS基础配置
- 查看节点的
resolv.conf文件,确认是否存在异常配置:cat /etc/resolv.conf - 检查kubelet的DNS相关配置,确认
--cluster-dns参数是否正确设置为10.96.0.10:
或者查看kubelet的配置文件(通常是ps aux | grep kubelet | grep cluster-dns/var/lib/kubelet/config.yaml)中的clusterDNS字段。
备注:内容来源于stack exchange,提问作者Raphael10
相关产品推荐
相关产品推荐

