Ingress 返回 404 怎么查
Ingress 访问返回 404 多数不是后端问题:先确认请求进了哪个控制器、主机与路径规则是否匹配、入口类是否被控制器认领,最后才查后端服务。按这个顺序排查,能避免在后端绕圈。
基本信息
| 第一步 | 查看 Ingress 是否分配了访问地址 |
|---|---|
| 第二步 | 描述 Ingress,核对规则与请求的主机与路径 |
| 第三步 | 对照入口类资源与 Ingress 上声明的类名 |
| 第四步 | 绕开 DNS 直连控制器验证,指定解析目标与主机头 |
| 第五步 | 看控制器日志,确认请求是否匹配到该 Ingress |
| 最后 | 以上都正常再查 Service 与 Pod |
404 的两种来源
| 来源 | 表现 | 处置 |
|---|---|---|
| 控制器未匹配 | 日志里没有对应路由记录 | 核对类名、主机与路径 |
| 路径类型不匹配 | 前缀与精确匹配行为不同 | 调整路径类型或请求路径 |
| 后端返回 404 | 控制器有匹配记录但上游报错 | 查 Service 与 Pod |
| DNS 未切到新入口 | 请求打到旧地址 | 用指定解析验证 |
| 默认后端兜底 | 未匹配规则时返回默认页 | 确认是否缺少规则 |
排查命令
排查命令
kubectl get ingress -A # 看地址是否分配
kubectl describe ingress web # 核对规则
kubectl get ingressclass # 对照类名
curl -sv --resolve www.example.com:80:10.0.0.10 http://www.example.com/ # 绕开 DNS
kubectl logs -n ingress-nginx deploy/ingress-nginx-controller --tail=80典型使用场景
- 域名已接入但访问 404,需要区分是控制器未匹配还是后端返回
- 灰度切换时旧入口仍在返回,怀疑 DNS 未生效
- 路径规则调整后部分接口 404,属于匹配类型差异
- 多控制器共用集群,Ingress 创建成功但无人认领
控制器未匹配与后端返回是两种不同的 404:控制器日志能看到匹配过程,先看日志再定位后端,顺序反了容易白查。
域名解析还没切到新入口时,同样表现为旧源站返回的 404;用指定解析直连控制器能快速排除这类干扰。
入口类名没写或写错时 Ingress 创建成功却无人认领,这类问题在控制台看不出异常,必须用命令行核对。