Kubelet未显式指定--node-ip时会自动选择最小字典序非回环IPv4地址,导致绑定错误网卡IP;应编辑10-kubeadm.conf添加Environment="KUBELET_EXTRA_ARGS=--node-ip=实际业务IP"并重启kubelet,再同步校验CNI配置、路由、DNS及跨节点连通性。

这个问题核心在于 Kubelet 启动时自动选择的 --node-ip 不是你期望用于集群内部通信的那个私网 IP,尤其在多网卡(比如同时有管理网卡、业务网卡、存储网卡)的节点上极易发生。Kubelet 一旦绑定错误 IP,会导致 Pod 网络路由异常、Service 流量转发失败、节点间通信中断,甚至整个节点“失联”。
确认 Kubelet 实际绑定的 IP 是什么
直接查 Kubelet 启动参数最可靠:
- 运行 ps aux | grep kubelet,重点找 --node-ip= 参数值;没显式指定时,Kubelet 会按规则自动选一个(通常是最小字典序的非回环 IPv4 地址),这往往不是你要的业务网卡 IP
- 也可查 Node 对象: kubectl get node
-o wide ,看 INTERNAL-IP 列是否与你规划的业务私网段一致
强制指定正确的业务私网 IP
必须显式配置,不能依赖自动发现:
- 编辑 Kubelet 的 systemd service 文件,常见路径是 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
- 在 [Service] 段内添加或修改:Environment="KUBELET_EXTRA_ARGS=--node-ip=192.168.10.50"(把 192.168.10.50 替换为你真实的业务网卡 IP)
- 保存后执行:systemctl daemon-reload && systemctl restart kubelet
- 重启后再次用 kubectl get node -o wide 验证 INTERNAL-IP 是否已更新
同步检查 CNI 插件和网络策略是否适配
仅改 Kubelet 不够,下游组件也要对齐:
- 确认 CNI 配置文件(如 /etc/cni/net.d/10-calico.conflist)中 ipam 部分的 subnet 和你业务网段无冲突,且 nat 或 masquerade 规则指向正确出口网卡
- 如果用了 NetworkPolicy,检查其 podSelector 和 ingress/from 规则是否仍能匹配新 IP 下的流量路径
- 某些 CNI(如 Terway eni 模式)依赖节点真实 IP 注册到 ENI,此时 --node-ip 必须与实际绑定的弹性网卡 IP 完全一致,否则会触发守护进程反复重建
验证路由和连通性是否真正恢复
改完别急着上线,做几项关键验证:
- 在该节点上运行 ip route show,确认默认路由出口是业务网卡,且没有指向管理网卡的异常直连路由
- 从其他节点 ping 和 curl 该节点上任一 Pod 的 IP,确保三层可达
- 部署一个临时 busybox Pod,执行 nslookup kubernetes.default.svc.cluster.local,确认 DNS 解析走的是集群内 CoreDNS,而非被错误路由到外部 DNS











