在 CentOS 上部署 Kubernetes(k8s)后“无法通信” 是一个比较常见但原因很多的问题。下面我按 常见场景 + 排查思路 给你系统梳理一下,你可以对照看是哪一类。
CentOS 默认有 firewalld
systemctl status firewalld
✅ 解决:
systemctl stop firewalld
systemctl disable firewalld
⚠️ k8s 需要大量端口(6443、10250、30000–32767、pod cidr 等)
getenforce
✅ 解决:
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
常见插件:Calico / Flannel / Cilium
检查:
kubectl get pods -n kube-system
kubectl get nodes
如果节点是 NotReady:
kubectl describe node <node>
常见原因:
原因:
kubeadm init 未指定 --pod-network-cidr✅ 正确示例(Flannel):
kubeadm init --pod-network-cidr=10.244.0.0/16
CentOS 默认用 iptables,但有些环境被改成 nftables
update-alternatives --set iptables /usr/sbin/iptables-legacy
或 kube-proxy 使用 ipvs 但未加载模块。
Master/Worker 节点:
iptables -t nat -L POSTROUTING
CentOS 可能需要:
sysctl -w net.ipv4.ip_forward=1
kubectl get pods -n kube-system | grep dns
测试:
kubectl run test --image=busybox -it --rm -- sh
nslookup kubernetes.default
常见问题:
kubectl get pods -n kube-system | grep kube-proxy
# 1. 防火墙
systemctl stop firewalld
# 2. SELinux
setenforce 0
# 3. 转发
sysctl net.ipv4.ip_forward=1
# 4. 节点状态
kubectl get nodes
# 5. 网络插件
kubectl get pods -n kube-system
# 6. Pod 通信
kubectl exec -it <pod> -- ping <另一pod IP>
你可以补充:
我可以直接给你 对应修复命令。