在解决K8s网络问题前,需确保CentOS节点的基础环境符合K8s网络要求,避免因环境配置不当引发问题:
firewalld)和SELinux可能阻断流量。执行以下命令关闭:systemctl stop firewalld && systemctl disable firewalld # 关闭防火墙
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 关闭SELinux
swap),否则可能导致Pod网络异常。执行:swapoff -a && sed -i '/swap/s/#//' /etc/fstab # 临时关闭并注释fstab中的swap行
/etc/hosts文件配置集群节点主机名映射(如192.168.1.100 k8s-master),避免DNS解析延迟。现象:同一节点或跨节点的Pod无法通过IP直接通信(如ping失败)。
排查与解决:
kubectl get pods -n kube-system | grep -E 'flannel|calico'
若插件Pod未处于Running状态,需查看其日志定位问题(如镜像拉取失败):kubectl logs <cni-pod-name> -n kube-system
host-gw模式或Calico的BGP,需检查节点路由表是否包含跨节点Pod网段的路由:ip route # 查看是否有类似“10.244.1.0/24 via <node2-ip> dev eth0”的路由条目
UDP 8472、Calico的BGP端口TCP 179):iptables -L -n -v | grep DROP # 查看是否有阻断流量的规则
firewall-cmd --add-port=8472/udp --permanent && firewall-cmd --reload # 放行Flannel VXLAN端口
busybox)测试Pod间连通性:kubectl run -i --tty --rm debug --image=busybox -- sh
# 在临时Pod内执行:ping <目标Pod-IP> 或 nc -zv <目标Pod-IP> <端口>
现象:Pod无法通过Service的ClusterIP访问其他服务(如nc -zv <cluster-ip> <port>失败)。
排查与解决:
selector与后端Pod的labels匹配,且ports配置正确:kubectl describe svc <service-name> -n <namespace> # 查看Selector和Endpoints
kubectl get endpoints <service-name> -n <namespace> # 确认Endpoints列表不为空
kube-proxy负责将Service的ClusterIP转换为Pod IP,需确保其在所有节点运行正常:kubectl get pods -n kube-system | grep kube-proxy
kubectl logs <kube-proxy-pod-name> -n kube-system # 查看是否有错误日志
kube-proxy异常,可在所有节点重启该服务:systemctl restart kube-proxy
现象:Pod无法访问集群外部服务(如ping 8.8.8.8或curl example.com失败)。
排查与解决:
NetworkPolicy,需确保没有策略阻止Pod出站流量(egress):kubectl get networkpolicy -n <namespace> # 查看是否有拒绝egress的策略
kubectl exec -it <pod-name> -n <namespace> -- bash
nc -zv 8.8.8.8 53 # 测试DNS端口
kubectl get pods -n kube-system | grep coredns
kubectl logs <coredns-pod-name> -n kube-system # 查看是否有解析错误
现象:集群网络完全不可用(如Pod无法启动、Service无法创建)。
排查与解决:
kubectl logs <cni-plugin-pod-name> -n kube-system
kubectl delete -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl top nodes、kubectl top pods监控节点和Pod的资源使用情况,及时扩容避免网络瓶颈。/etc/cni/net.d/目录下的CNI配置文件(如10-calico.conflist),避免配置丢失。通过以上步骤,可系统化排查和解决CentOS环境下K8s集群的网络问题。需根据具体现象逐步定位,优先检查基础环境与插件状态,再深入分析路由、防火墙等配置。