Kubernetes集群外无法通过Nginx Ingress访问服务求助
Kubernetes集群Ingress外部访问故障排查步骤
1. 验证MetalLB配置与运行状态
- 检查MetalLB IP池无地址冲突:在集群节点执行
arping 192.168.50.115,或在Windows机器上执行arp -a,确认该IP对应的MAC地址属于集群节点而非其他设备 - 确认MetalLB工作模式与组件状态:若为Layer2模式,执行
kubectl get pods -n metallb-system查看speaker pod是否正常运行,查看节点日志kubectl logs -n metallb-system <speaker-pod-name>排查ARP通告相关报错 - 验证Ingress-Nginx LoadBalancer服务状态:执行
kubectl get svc -n ingress-nginx,确认EXTERNAL-IP为192.168.50.115,且PORT(S)列显示80:xxxx/TCP的NodePort映射正常
2. 检查集群节点防火墙规则
- 临时关闭节点防火墙测试:执行
systemctl stop firewalld(针对firewalld环境),若Windows机器可恢复访问,需添加规则放行Ingress-Nginx的NodePort端口及MetalLB相关流量 - 检查iptables规则:执行
iptables -L -n | grep <ingress-nodeport>,确认存在允许外部访问该端口的规则;同时排查是否有规则拦截ICMP(ping)流量
3. 排查Calico网络策略
- 检查Ingress-Nginx命名空间网络策略:执行
kubectl get networkpolicy -n ingress-nginx,确认未存在阻止192.168.50.0/25子网访问Ingress控制器Pod的策略 - 确认Calico全局默认策略:检查Calico配置,确保全局规则允许子网内流量进入集群
4. 验证Windows机器本地设置
- 临时关闭Windows防火墙测试:打开「Windows Defender防火墙」→「启用或关闭Windows Defender防火墙」,关闭后尝试访问
- 检查Windows路由表:执行
route print,确认192.168.50.0/25的路由指向正确网关,无异常路由条目 - 测试底层连通性:ping任意集群节点IP,若无法连通则排查节点与Windows机器的物理/虚拟网络链路问题
5. 检查Ingress资源与后端配置
- 确认Ingress域名配置:执行
kubectl get ingress <ingress-name> -o yaml,查看spec.rules[0].host是否为http24-kube.docker-containers.local - 验证后端服务关联:执行
kubectl get svc <httpd24-service-name>,确认服务已正确关联httpd24 Pod,且端口映射匹配Ingress配置
内容的提问来源于stack exchange,提问作者johnny bravo
相关产品推荐
相关产品推荐

