Kubernetes中Pod时通时断不稳定、Ingress返回404问题排查求助
问题排查与修复指南
一、NodePort随机返回No route to host问题排查
排查步骤
- 先确认集群节点防火墙规则,k3s默认需要放行
6443、10250、30000-32767端口,以及flannel/vxlan所需的8472UDP端口,执行以下命令检查各节点防火墙状态:iptables -L -n | grep 30081ufw status(如果是ufw管理防火墙)firewall-cmd --list-all(如果是firewalld管理) - 检查各节点kube-proxy是否正常运行,执行
kubectl get pods -n kube-system | grep proxy,确认所有proxy pod状态为Running - 验证节点路由规则,执行
ip route show确认集群Pod网段、Service网段路由是否指向正确的flannel接口 - 检查是否存在ARP缓存异常,执行
arp -a查看集群节点MAC地址映射是否冲突
解决方案
- 放行所有节点对应端口,以firewalld为例:
firewall-cmd --add-port=8472/udp --permanentfirewall-cmd --add-port=30000-32767/tcp --permanentfirewall-cmd --reload - 若kube-proxy异常,重启对应pod:
kubectl delete pod -n kube-system <kube-proxy-pod-name> - 清理异常ARP缓存:
arp -d <冲突IP地址>
二、Ingress返回404问题排查
排查步骤
- 首先确认Nginx Ingress Controller是否正常运行,执行
kubectl get pods -n kube-system | grep ingress-nginx,所有pod状态需为Running - 检查Ingress规则配置是否正确,确认
serviceName、servicePort与目标Service完全匹配,host字段是否为apache.v-kube-cluster.local - 查看Ingress Controller日志确认请求路由情况:
kubectl logs -n kube-system <ingress-nginx-controller-pod-name> - 验证本地DNS解析是否正确,确认
apache.v-kube-cluster.local解析到的IP是Ingress Controller对外暴露的节点IP或负载均衡IP
解决方案
- 若Ingress规则配置错误,修正后重新apply配置
- 若DNS解析异常,可临时在本地hosts文件添加解析记录:
192.168.30.13 apache.v-kube-cluster.local - 若Ingress Controller异常,重启对应pod:
kubectl delete pod -n kube-system <ingress-nginx-controller-pod-name>
三、集群稳定性优化建议
- 定期检查集群节点磁盘、内存、CPU负载,避免资源耗尽导致组件异常
- 开启k3s自带的服务自愈功能,确认所有系统组件配置了restartPolicy: Always
- 禁用节点不必要的防火墙规则,避免与k8s iptables规则冲突
- 定期清理节点异常ARP缓存、iptables残留规则
内容的提问来源于stack exchange,提问作者Sebastian Sommerfeld
相关产品推荐
相关产品推荐

