K8s集群CoreDNS处于Running状态但无法就绪问题求助
CoreDNS处于Running状态但无法就绪的问题排查
集群环境
- K8s集群:3个master节点、2个worker节点
- 依赖组件:外部HAProxy负载均衡器、Flannel作为CNI插件
问题现象
CoreDNS Pod状态显示为Running,但始终无法进入就绪状态,日志输出:
[INFO] plugin/ready: Still waiting on: "Kubernetes."
已执行的无效排查操作
- 关闭UFW防火墙
- 清空并检查IPtables规则
- 查看Kube-proxy日志
- 验证HAProxy集群内外访问均正常
- 检查节点网络连通性
- 重启所有服务器
- 已获取CoreDNS Pod的describe信息
进一步排查建议
1. 验证CoreDNS与K8s API Server的连通性
进入CoreDNS Pod内部,测试对Kubernetes API的访问:
kubectl exec -it <coredns-pod名称> -n kube-system -- curl -k https://kubernetes.default.svc.cluster.local:443/version
若访问失败,需排查:
kubernetes.default.svc.cluster.local是否能解析到API Server的ClusterIP- CoreDNS对应的Service Account是否绑定了
system:corednsClusterRole,确保有足够权限访问API
2. 检查Flannel网络状态
验证跨节点Pod的网络连通性:
# 在任意Pod内ping其他节点的Pod IP kubectl exec -it <测试用Pod名称> -- ping <目标Pod IP>
查看Flannel组件状态及日志:
kubectl get pods -n kube-system -l app=flannel kubectl logs <flannel-pod名称> -n kube-system
确认Flannel配置的Pod CIDR与集群初始化时的设定一致,且节点间VXLAN隧道正常建立。
3. 检查CoreDNS的Kubernetes插件配置
查看CoreDNS的ConfigMap:
kubectl edit configmap coredns -n kube-system
确认kubernetes插件段配置正确,例如集群域是否为默认的cluster.local,是否启用了必要的参数(如endpoint_pod_names)。
4. 验证API Server健康状态
通过HAProxy访问API Server,确认服务正常响应:
curl -k https://<HAProxy地址>:6443/version
同时检查master节点上kube-apiserver Pod的运行状态,确保所有API Server实例均正常启动。
5. 检查CoreDNS Pod内部的DNS解析能力
在CoreDNS Pod内测试基础域名解析:
kubectl exec -it <coredns-pod名称> -n kube-system -- nslookup kubernetes.default
若解析失败,查看Pod内/etc/resolv.conf配置,确认是否指向正确的DNS服务器。
内容的提问来源于stack exchange,提问作者mona moghadampanah
相关产品推荐
相关产品推荐

