You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

kubectl get命令执行失败,连接服务器被拒绝问题求助

解决kubectl连接kube-apiserver失败的问题

我来帮你一步步排查这个kubectl连接失败的问题,核心是kubectl没法和你的kube-apiserver(也就是10.23.23.19:6443)建立有效连接,咱们从几个关键方向入手:

1. 先确认kube-apiserver服务是否正常运行

如果apiserver本身没启动,再怎么指定地址也没用。你可以用下面的命令检查:

  • 如果你用systemd管理服务:systemctl status kube-apiserver
  • 如果是容器化部署的(比如kubeadm安装的):crictl ps | grep kube-apiserver(或者用docker ps | grep kube-apiserver,取决于你的容器 runtime)

如果服务没运行,先尝试启动它:systemctl start kube-apiserver,要是启动失败,查看日志找原因:journalctl -u kube-apiserver -f

2. 测试网络连通性:IP和端口是否能访问

先确认你的机器能ping通目标IP:ping 10.23.23.19,如果ping不通,可能是网卡配置或者路由的问题。

然后测试6443端口是否开放,用nc或者telnet:

  • nc -zv 10.23.23.19 6443
  • 或者telnet 10.23.23.19 6443

如果端口不通,大概率是防火墙/iptables规则挡住了:

  • 临时关闭防火墙测试:systemctl stop firewalld(CentOS/RHEL)或者ufw disable(Ubuntu),之后再重试kubectl命令
  • 如果关闭后能通,记得开放6443端口:firewall-cmd --add-port=6443/tcp --permanent && firewall-cmd --reload(CentOS/RHEL)或者ufw allow 6443/tcp(Ubuntu)

3. 让kubectl正确加载admin.conf的认证信息

你之前指定--server的时候,只告诉了kubectl地址,但没带上admin.conf里的证书、密钥这些认证数据,所以连接会失败。kubectl默认读取~/.kube/config文件,正确的做法是:

临时生效(当前会话)

执行这条命令让kubectl加载admin.conf:

export KUBECONFIG=/etc/kubernetes/admin.conf

然后再执行kubectl get pods试试。

永久生效(所有会话)

把admin.conf复制到用户的kube目录,修改权限:

cp /etc/kubernetes/admin.conf ~/.kube/config
chown $(id -u):$(id -g) ~/.kube/config

或者把export KUBECONFIG=/etc/kubernetes/admin.conf添加到你的~/.bashrc或者~/.profile文件里,然后执行source ~/.bashrc让配置生效。

4. 验证admin.conf的配置是否正确

有时候admin.conf里的证书数据可能损坏或者不匹配,你可以用curl直接测试apiserver的认证:

curl --cacert <(echo $(grep certificate-authority-data /etc/kubernetes/admin.conf | awk '{print $2}') | base64 -d) \
     --cert <(echo $(grep client-certificate-data /etc/kubernetes/admin.conf | awk '{print $2}') | base64 -d) \
     --key <(echo $(grep client-key-data /etc/kubernetes/admin.conf | awk '{print $2}') | base64 -d) \
     https://10.23.23.19:6443/api/v1/pods

如果这个curl命令能返回pod的JSON数据,说明admin.conf是好的,问题出在kubectl的配置加载上;如果返回错误,那可能是证书不匹配,或者apiserver的证书配置有问题。

5. 检查kube-apiserver的监听地址

确认apiserver是否在监听10.23.23.19或者所有地址(0.0.0.0),如果它只监听localhost,那用IP访问就会失败。你可以:

  • 查看apiserver的静态Pod配置文件(kubeadm安装的话在/etc/kubernetes/manifests/kube-apiserver.yaml),检查command里是否有--bind-address=10.23.23.19或者--bind-address=0.0.0.0
  • 或者用ps aux | grep kube-apiserver查看启动参数,确认bind-address的配置

如果bind-address是localhost,修改成0.0.0.0或者你的机器IP,保存后kubelet会自动重启apiserver,之后再重试连接。

内容的提问来源于stack exchange,提问作者curiousengineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:05:56