K8s 部署后 Node 节点无法访问,多数情况是网络配置、核心组件状态或安全策略拦截导致的问题,需要按照从底层网络到上层服务的顺序逐一排查。
先说结论:Node 节点无法访问通常源于网络不通、kubelet 服务异常或防火墙拦截,建议优先检查节点状态和组件日志。
- 先确认:检查 kubectl get nodes 状态及网络连通性
- 先处理:重启 kubelet 服务并修正防火墙规则
- 再验证:通过 telnet 或 curl 测试端口及服务访问
命令速用版
# 查看节点状态
kubectl get nodes# 检查 kubelet 服务状态
systemctl status kubelet# 查看 kubelet 日志
journalctl -u kubelet -f# 检查防火墙规则
iptables-save | grep NodePort为什么会这样
Kubernetes 集群中,Node 节点需要与 Master 节点保持通信以汇报状态和接收任务。如果底层网络不通,或者节点上的 kubelet 代理服务未运行,Master 就无法感知节点存活。此外,网络插件(如 Calico、Flannel)负责分配 Pod IP,若配置缺失会导致网络不可达。云环境的安全组或本地防火墙也可能直接丢弃进入节点的流量,导致端口无法访问。
分步处理
1. 检查节点状态
在 Master 节点执行 kubectl get nodes。如果状态为 NotReady,说明节点未正常汇报心跳。若节点列表中完全没有该 Node,可能未成功加入集群,需使用 kubeadm join 重新加入。
2. 检查核心组件服务
登录故障 Node 节点,检查 kubelet 和 kube-proxy 服务。使用 systemctl status kubelet 查看状态。如果服务未运行,尝试重启。查看日志 journalctl -u kubelet,关注是否有证书过期、配置错误或 CNI 配置缺失的报错。
3. 检查网络连通性
在 Node 节点上 ping Master 节点 IP,确保物理网络通畅。检查 Master 节点的 etcd 和 kube-apiserver 服务是否正常运行,这两个组件异常会导致所有节点失联。
4. 检查防火墙与安全组
如果是云服务器,检查控制台安全组是否放行了节点端口(如 NodePort 范围 30000-32767)。本地防火墙可使用 iptables -L 查看,必要时临时关闭测试。对于 NodePort 无法访问,需确认 iptables 中是否有 KUBE-NODEPORTS 规则。
5. 检查网络插件配置
查看 /etc/cni/net.d 目录下是否有网络配置文件。如果日志提示"Unable to update cni config: No networks found",说明网络插件未正确安装或配置丢失,需重新部署网络组件。
怎么验证是否生效
修复后,再次执行 kubectl get nodes 确认状态变为 Ready。在集群外部使用 telnet <节点 IP> <NodePort> 测试端口连通性。尝试在集群内创建测试 Pod,确认能否正常调度到该节点并拉取镜像。
常见坑
- Master 节点默认有污点,普通 Pod 无法调度,不要误认为是节点故障。
- 云厂商安全组规则未更新,导致外部流量被拦截。
- kube-proxy 模式切换可能导致部分节点 NodePort 不通,需检查日志。
- DNS 配置错误会导致服务域名无法解析,影响内部访问。
参考来源
- K8s 部署后 Node 节点不能访问问题的科普性解析
- K8s 1.22.17 中 NodePort 端口不通?可能是 kube-proxy 模式惹的祸 (附详细排查步骤)
- k8s 部署 node 节点网络不通
- k8s 无法连接 node 节点
- K8s 中 NodePort 无法访问的终极排查指南:从网络策略到生产环境优化 - Leo_Yide - 博客园
- kubernetes(K8S) 容器部署,重新启动后,node 节点提示 notready 无法正常工作。
- K8S 线上集群排查,实测排查 Node 节点 NotReady 异常状态
- k8s service nodePort 无法访问的问题解决
- K8s NodePort 访问故障排查
- K8s 集群看不到 node
原文链接:https://www.zjcp.cc/ask/10459.html
