如何重新生成Kubernetes集群kubeconfig及排查连接拒绝故障
问题排查与解决:Kubectl连接API Server失败(Connection Refused)
一、区分API Server故障与kubeconfig问题
1. 检查API Server运行状态(控制节点操作)
- 查看kube-apiserver容器/服务状态:
若状态非# 用容器 runtime 检查 sudo crictl ps | grep kube-apiserver # 用systemd检查(kubeadm部署场景) sudo systemctl status kube-apiserverrunning,查看日志定位崩溃原因:sudo journalctl -u kube-apiserver -f - 验证6443端口监听情况:
无输出则说明API Server未启动或端口未开放。sudo ss -tulpn | grep :6443 - 本地测试API Server连通性:
返回JSON格式API信息则本地服务正常,问题出在网络或kubeconfig;仍返回connection refused则确定为API Server故障。curl -k https://localhost:6443/api
2. 检查kubeconfig有效性(任意节点操作)
- 查看当前kubeconfig配置:
重点核对kubectl config viewclusters中的服务器地址是否正确,users中的证书/令牌是否有效。 - 检查客户端证书有效期:
# 从kubeconfig提取证书到临时文件 grep client-certificate-data ~/.kube/config | awk '{print $2}' | base64 -d > client.crt # 查看证书有效期 openssl x509 -in client.crt -text -noout | grep -A2 Validity - 验证令牌有效性(控制节点操作):
返回API信息则令牌有效,问题大概率在网络或kubeconfig地址配置。# 列出所有secret kubectl get secrets # 查看目标令牌内容 kubectl describe secret default-token-xxxx | grep token: # 用令牌测试连接 curl -k https://foo.bar.com:6443/api --header "Authorization: Bearer 替换为你的令牌内容"
二、重新生成kubeconfig(控制节点操作)
1. kubeadm部署场景快速生成
# 重新生成admin.conf sudo kubeadm init phase kubeconfig admin --kubeconfig-dir /etc/kubernetes # 复制到用户目录并设置权限 mkdir -p ~/.kube sudo cp -i /etc/kubernetes/admin.conf ~/.kube/config sudo chown $(id -u):$(id -g) ~/.kube/config
2. 手动生成自定义kubeconfig
- 配置集群信息:
kubectl config set-cluster kubernetes \ --server=https://foo.bar.com:6443 \ --certificate-authority=/etc/kubernetes/pki/ca.crt \ --embed-certs=true - 配置用户认证(证书方式):
kubectl config set-credentials admin \ --client-certificate=/etc/kubernetes/pki/admin.crt \ --client-key=/etc/kubernetes/pki/admin.key \ --embed-certs=true - 配置上下文并切换:
kubectl config set-context kubernetes \ --cluster=kubernetes \ --user=admin kubectl config use-context kubernetes
三、额外排查点
- 网络连通性:用
telnet foo.bar.com 6443或nc -zv foo.bar.com 6443测试客户端到控制节点6443端口的连通性。 - 防火墙/安全组:确认控制节点防火墙允许6443端口入站流量,客户端防火墙允许出站流量。
内容的提问来源于stack exchange,提问作者Ufder
相关产品推荐
相关产品推荐

