CoreDNS Pod无限等待Kubernetes API无法启动问题求助
嘿,我看到你在部署3节点Kubernetes集群(通过tigera-operator安装Calico)时遇到了CoreDNS Pod启动异常的问题——两个CoreDNS实例里有一个一直卡在等待Kubernetes API的状态,另一个却能正常运行。这种情况在Calico作为CNI插件的集群里挺常见的,我给你梳理几个实用的排查和解决方向:
确认Calico网络组件的运行状态
Calico是集群的网络基础,它的状态直接影响Pod与API Server的连通性。先检查相关命名空间下的Calico Pod是否正常:kubectl get pods -n tigera-operator kubectl get pods -n calico-system要确保所有Pod都处于
Running状态,没有重启、Pending或者CrashLoopBackOff的异常情况。如果有异常Pod,优先查看对应日志(比如calico-node的日志),排查是否存在网络配置错误。测试故障CoreDNS Pod的API连通性
卡住的CoreDNS Pod大概率是因为无法访问Kubernetes API Server。你可以直接在故障Pod内测试连通性:# 先获取API Server的ClusterIP kubectl get service kubernetes -n default # 替换<API_CLUSTER_IP>后执行 kubectl exec -it coredns-8445fcc4f-jknn4 -n kube-system -- curl -k https://<API_CLUSTER_IP>:6443如果测试失败,再去该Pod所在的节点上执行同样的curl命令,确认节点层面是否能访问API Server,排查节点防火墙、路由规则或者Calico网络策略是否阻断了流量。
验证CoreDNS的RBAC权限配置
CoreDNS需要足够的RBAC权限才能访问Kubernetes API,你可以检查对应的权限资源是否存在且配置正确:kubectl get clusterrole system:coredns kubectl get clusterrolebinding system:coredns如果发现权限缺失或配置错误,可以重新应用CoreDNS的RBAC配置(通常kubeadm部署会默认生成,但自定义部署场景可能会遗漏)。
检查API Server的端点状态
确认Kubernetes API Server的服务和端点是否正常注册:kubectl get service kubernetes -n default kubectl get endpoints kubernetes -n default要保证endpoints列表里包含所有API Server节点的IP和6443端口,如果有缺失,说明API Server存在注册问题,需要排查kube-apiserver的运行状态。
排查Calico网络策略的限制
有时候Calico的默认网络策略或自定义策略会阻断kube-system命名空间内的Pod流量。检查该命名空间下的网络策略:kubectl get networkpolicies -n kube-system如果存在限制CoreDNS访问API Server的策略,需要调整规则允许CoreDNS Pod访问6443端口的流量。
另外,你提供的故障CoreDNS日志也明确指向了API连通性问题:
[INFO] plugin/kubernetes: waiting for Kubernetes API before starting server
[INFO] plugin/kubernetes: waiting for Kubernetes API before starting server
[INFO] plugin/ready: Still waiting on: "kubernetes"
按照上面的步骤逐步排查,应该能快速定位并解决问题。
备注:内容来源于stack exchange,提问作者Patrick McKeever

