kubectl连接K8s服务器i/o超时、Pod无法运行问题咨询
报错信息
Unable to connect to the server: dial tcp 192.168.49.2:8443: i/o timeout
问题表现
执行以下kubectl操作均无正常返回、操作失败:
- 创建Nginx工作负载:
kubectl run my-nginx --image nginx - 查询集群Pod列表:
kubectl get pods
根因说明
该报错代表本地kubectl客户端无法与Kubernetes API Server(默认监听8443端口)建立TCP连接。所有kubectl的资源创建、查询操作都需要先和API Server完成通信,当前状态下创建Pod的请求根本没有发送到集群侧,和Pod运行逻辑无关,先解决API Server连通性问题才能执行后续集群操作。
注:192.168.49.2是minikube本地集群默认的节点IP,90%以上同IP段的同类报错都是minikube集群状态异常导致。
排查解决步骤(按故障概率从高到低排序)
- 校验集群运行状态
minikube用户直接执行minikube status查看集群状态,若状态不为Running,执行minikube start重启集群,等待启动完成后重试kubectl命令即可。
其他K8s发行版/自建集群用户,先登录192.168.49.2对应的控制平面节点,执行systemctl is-active kubelet确认kubelet服务处于active状态,再执行ss -lntp | grep 8443确认API Server进程正常监听8443端口。如果端口未监听,执行crictl logs $(crictl ps | grep kube-apiserver | awk '{print $1}')查看API Server日志,排查进程启动失败原因。 - 排查网络连通性与防火墙规则
在执行kubectl的本地机器上执行ping 192.168.49.2,确认基础网络可达。如果ping不通,检查本地路由、虚拟网卡状态,确认和集群节点网络无路由隔离。
基础网络通的情况下执行nc -zv 192.168.49.2 8443测试端口连通性,如果端口不通,检查控制节点上的iptables/firewalld/云安全组规则,放通本地IP到8443端口的入方向访问权限。 - 校验本地kubeconfig配置
执行kubectl config view查看当前加载的集群配置,确认集群server地址配置为https://192.168.49.2:8443,无IP、端口填写错误;如果集群证书过期,重新生成管理员证书并替换本地config中的证书、密钥字段即可。 - 排查代理/VPN干扰
如果本地开启了系统代理、VPN工具,先临时关闭后重试kubectl命令。多数代理默认不会转发局域网网段请求,会导致内网IP连接超时;如果需要保留代理,将192.168.49.2加入NO_PROXY环境变量的免代理地址列表即可。
内容的提问来源于stack exchange,提问作者Barbie Doll
相关产品推荐
相关产品推荐

