在 CentOS 上部署的 Kubernetes(k8s)出现通信异常,通常不是单一原因,而是网络模型中的某一层出了问题。下面按常见原因 → 排查思路 → 解决建议给你一个系统性的说明。
CentOS 默认启用:
firewalldiptables常见问题:
排查:
systemctl status firewalld
getenforce
iptables -L -n | head
建议:
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
# 修改 /etc/selinux/config 为 disabled
常见 CNI:
异常表现:
coredns 一直 CrashLoopBackOff排查:
kubectl get pods -n kube-system
kubectl logs -n kube-system <cni-pod>
ip route
ip a
注意:
vxlan / host-gwBGP典型错误:
检查:
sysctl net.bridge.bridge-nf-call-iptables
sysctl net.ipv4.ip_forward
修复:
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
表现:
检查:
kubectl get pods -n kube-system | grep kube-proxy
kubectl logs -n kube-system kube-proxy-xxx
模式问题:
iptables 模式(默认)ipvs 模式(需加载内核模块)lsmod | grep ip_vs
表现:
timedatectl
chronyc sources
docker info | grep cgroup
kubelet --version
推荐:
kubectl get nodes
kubectl get pods -A
kubectl exec -it pod -- ping <其他PodIP>
kubectl get svc
curl ClusterIP:port
| 现象 | 可能原因 |
|---|---|
| 跨节点 Pod 不通 | CNI / 防火墙 |
| Service 不通 | kube-proxy / iptables |
| DNS 解析失败 | coredns / 网络插件 |
| 节点 NotReady | kubelet / 时间 / 资源 |
| 偶发超时 | MTU / 内核参数 |
你可以补充以下信息之一:
我可以直接帮你判断是哪一层网络问题,并给出对应修复命令。