AWS K8s集群中Nginx Ingress访问后端服务返回404故障求助
排查步骤
- 校验Ingress资源配置
执行kubectl get ingress -A检查是否存在host为cafe.example.com的Ingress规则,确认规则匹配的路径包含/coffee,后端关联的Service名称、端口与咖啡应用的Service配置完全一致,同时确认ingressClassName字段与你部署的Nginx Ingress Controller的类名匹配(类名不匹配的话Controller不会加载该规则)。 - 检查Ingress Controller加载状态
执行kubectl logs -n nginx-ingress <你的Nginx Ingress Controller Pod名称>查看Controller日志,排查是否有找不到后端Service、端口无效等报错。也可以进入Controller Pod内部查看生成的/etc/nginx/nginx.conf文件,确认是否存在cafe.example.com对应的server块,以及/coffee路径的转发规则是否符合预期。 - 排查路径重写配置冲突
如果你的Ingress资源添加了nginx.ingress.kubernetes.io/rewrite-target注解,检查注解规则是否正确,错误的重写规则会导致/coffee路径被改写为后端不存在的路径,进而返回404。官方演示案例不需要配置重写注解,自行添加的可以先删除后重试。 - 确认代理协议配置匹配
你当前的Ingress Service开启了AWS负载均衡的代理协议支持,需要同步在Nginx Ingress Controller的启动参数中添加enable-proxy-protocol: "true"配置。如果Controller未开启代理协议,会无法正确解析请求头,匹配不到对应的Host路由规则,直接返回默认404页面。 - 验证咖啡应用Service可用性
执行kubectl port-forward svc/<咖啡应用Service名称> 8080:8080,本地执行curl http://localhost:8080/coffee确认可以正常返回200响应,排除Service本身无法转发请求的问题。
补充说明:你返回的404页面的Nginx版本为1.21.0,和咖啡Pod内的Nginx 1.21.3版本不一致,说明请求已经正常到达Nginx Ingress Controller,但未匹配到对应的路由规则,问题大概率出在Ingress规则配置或Controller配置层面。
内容的提问来源于stack exchange,提问作者zilcuanu
相关产品推荐
相关产品推荐

