Kubectl get nodes间歇性失效,6443端口连接被拒求助
环境信息
- 集群架构:1台control-plane(IP:192.169.0.10)+2台worker节点
- 已完成操作:
kubeadm init初始化控制平面、kubeadm join添加节点、kubeconfig配置(执行以下命令)mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config - 故障现象:
- 初期
kubectl get nodes正常,后续间歇性提示192.169.0.10:6443连接被拒 - kube-proxy处于CrashLoopBackOff状态
- Calico网络插件存在x509证书验证错误
- 初期
- 已排除项:swap已关闭、所有机器及路由器防火墙已禁用
一、排查Calico x509证书验证错误
对比Calico Pod与集群CA证书一致性:
执行命令查看Calico Pod内挂载的CA证书,再与control-plane节点的集群CA对比:# 查看Calico Pod内的CA证书 kubectl exec -n kube-system <calico-pod-name> -- cat /var/run/secrets/kubernetes.io/serviceaccount/ca.crt | openssl x509 -text -noout # 查看control-plane节点的集群CA证书 cat /etc/kubernetes/pki/ca.crt | openssl x509 -text -noout若不一致,删除Calico Pod触发重新挂载,或检查serviceaccount挂载机制是否异常。
检查Calico配置的kubeconfig正确性:
查看Calico的ConfigMap配置,确认kubeconfig中的server地址和CA证书内容:kubectl get configmap calico-config -n kube-system -o yaml确保
kubeconfig字段内的server为https://192.169.0.10:6443,且CA证书内容与/etc/kubernetes/pki/ca.crt完全匹配。验证Calico ServiceAccount权限:
确认calico-nodeServiceAccount已绑定正确的ClusterRole:kubectl get clusterrolebinding calico-node -o yaml若权限缺失,重新创建ClusterRoleBinding:
kubectl create clusterrolebinding calico-node --clusterrole=calico-node --serviceaccount=kube-system:calico-node
二、排查kube-proxy CrashLoopBackOff问题
获取kube-proxy崩溃日志:
查看崩溃前的日志定位具体原因:kubectl logs -n kube-system <kube-proxy-pod-name> --previous检查kube-proxy配置文件:
验证ConfigMap中的集群CIDR、API Server地址等参数是否正确:kubectl get configmap kube-proxy -n kube-system -o yaml确保
clusterCIDR与kubeadm init时指定的网段一致,server指向https://192.169.0.10:6443。清理异常iptables规则:
若kube-proxy生成的iptables规则冲突,删除Pod让其重新生成:kubectl delete pod -n kube-system -l k8s-app=kube-proxy同时检查节点内核参数是否满足要求:
sysctl net.ipv4.ip_forward net.bridge.bridge-nf-call-iptables若参数值为0,临时开启并写入
/etc/sysctl.conf永久生效:sysctl -w net.ipv4.ip_forward=1 sysctl -w net.bridge.bridge-nf-call-iptables=1 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
三、排查6443端口间歇性连接拒绝问题
监控kube-apiserver状态:
查看kube-apiserver日志是否存在重启或异常报错:kubectl logs -n kube-system <kube-apiserver-pod-name>同时检查6443端口是否持续监听:
ss -tulpn | grep 6443若apiserver频繁重启,检查其配置文件(
/etc/kubernetes/manifests/kube-apiserver.yaml)中的参数是否正确,尤其是证书挂载路径。验证集群DNS解析:
在worker节点测试集群服务域名解析:nslookup kubernetes.default.svc.cluster.local若解析失败,检查CoreDNS Pod状态,修复DNS服务故障。
测试节点间网络稳定性:
在worker节点持续测试6443端口连通性,定位是否存在网络波动:while true; do nc -zv 192.169.0.10 6443; sleep 5; done若出现间歇性不通,排查节点网卡、交换机硬件状态,或检查是否存在网络拥塞。
检查kube-apiserver证书有效性:
验证apiserver证书的有效期和SAN字段:# 查看证书有效期 openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep Not # 查看证书SAN字段 openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep -E "DNS|IP Address"确保证书未过期,且SAN字段包含control-plane的IP(192.169.0.10)、主机名等必要信息。
内容的提问来源于stack exchange,提问作者Lamini-Eng

