Kubernetes Ingress无法路由流量至后端端口 求排查方案
AWS环境下Ingress流量路由超时排查思路
一、基础网络连通性排查
- 从Ingress控制器Pod所在节点,直接测试后端Service的连通性:
curl <Service-Cluster-IP>:<Port>,若不通,问题出在Service到Pod链路,与Ingress无关 - 测试Ingress控制器节点到负载均衡器IP的连通性:
curl 172.20.xxx.xx:443,排除节点到LB的网络阻断 - 核对VPC安全组规则:
- 负载均衡器安全组:允许外部443/80端口入站,同时允许Ingress控制器节点安全组访问LB的443/80端口
- Ingress控制器节点安全组:允许出站到后端Pod节点的服务端口
- 后端Pod节点安全组:允许Ingress控制器节点安全组入站访问服务端口
二、Ingress与Service配置校验
- 核对Ingress.yaml中
spec.rules[].http.paths[].backend.service.name和service.port.number,确保与service.yaml的配置完全一致,无拼写错误 - 检查Ingress注解:AWS环境下,若用ALB Ingress控制器,需确认注解为ALB专属(如
alb.ingress.kubernetes.io/scheme、alb.ingress.kubernetes.io/target-type);若用Nginx Ingress控制器,需使用Nginx注解,禁止混用 - 查看Ingress资源状态:
kubectl describe ingress <ingress-name>,检查Events字段是否有异常,Address是否正确关联LB IP - 校验Service配置:
- 确认
spec.type为ClusterIP(Ingress转发无需NodePort/LoadBalancer) - 核对
spec.selector与后端Deployment的metadata.labels完全匹配,确保Service能关联到Pod - 查看Service端点:
kubectl describe service <service-name>,确认Endpoints字段存在后端Pod的IP+端口,若为空则标签匹配失败
- 确认
三、Ingress控制器自身检查
- 查看控制器Pod的详细日志(以Nginx Ingress为例):
kubectl logs <ingress-controller-pod-name> -n <namespace> -c nginx,排查是否有后端连接超时记录(即使无报错日志,access.log也可能有请求记录) - 确认控制器Pod状态:
kubectl get pods -n <namespace>,检查是否为Running状态,无频繁重启,资源占用正常 - 校验RBAC权限:
kubectl describe clusterrole <ingress-controller-clusterrole>,确认控制器拥有Ingress、Service、Endpoint等资源的访问权限
四、AWS云资源专项检查
- 检查ALB目标组状态:登录AWS控制台,查看对应ALB的目标组,确认后端目标(节点或Pod,取决于target-type)状态为
healthy,不健康目标会被ALB排除 - 核对ALB监听规则:确认443端口的监听规则正确转发到对应目标组,无路径匹配错误
- 检查域名解析:确认
www.example.com的解析IP是否为ALB的正确公网IP(若为公网访问),当前curl的172.20.xxx.xx为内网IP,若为公网场景则解析存在问题 - 检查VPC网络ACL:确保LB所在子网的ACL允许443入站,Ingress控制器节点子网的ACL允许443出站到LB,同时允许到后端Pod子网的服务端口流量
五、后端服务验证
- 登录后端Pod,检查服务监听端口:
netstat -tulpn | grep <port>(或ss -tulpn),确认服务正常监听 - 在Pod内部测试服务可用性:
curl localhost:<port>,验证服务本身无故障 - 查看后端服务日志,确认是否收到请求,若未收到则流量未到达Pod
内容的提问来源于stack exchange,提问作者user630702
相关产品推荐
相关产品推荐

