首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Ingress 404 与 503 分别意味着什么:3 层转发里的失败点
📅 2026/10/25 1:52:23
✍️ 爱科研究院
👁 阅读 3,247
我不会起名字322· 后端 / 算法 / 数据库 技术栈 力扣 Hot100 Go 项目 Redis MySQL文章目录Ingress 404 与 503 分别意味着什么3 层转发里的失败点一、先把转发链路画出来二、404规则没匹配上原因 1host 不匹配原因 2path 匹配规则和你想的不一样原因 3IngressClass 不匹配原因 4多个 Ingress 冲突 / 规则没被加载三、503没有可用的后端第一步永远是看 Endpoint原因 1selector 和 Pod 标签对不上原因 2Pod 没有 Ready原因 3端口对不上原因 4全部后端被摘除滚动发布期间四、502连上了但连接失败五、一个完整的排查流程六、带走物Ingress 404 与 503 分别意味着什么3 层转发里的失败点一、先把转发链路画出来Ingress 不是一个组件它至少跨三层外部流量 ↓ ① Ingress ControllerNginx / Traefik / ALB ↓ 按 host path 匹配 Ingress 规则 ② ServiceClusterIP ↓ 按 selector 找 Endpoint ③ Pod404 和 503 分别对应这条链路上不同的失败位置这是排查的第一分水岭。状态码失败位置含义404① Ingress 层规则根本没匹配上流量没离开 Controller503② Service 层规则匹配上了但后端没有可用 Endpoint502③ Pod 层连上了 Pod 但连接失败/被提前关闭记住这个映射排查时能省一半时间。二、404规则没匹配上404 说明 Ingress Controller收到了请求但找不到要转发给谁。它压根没往后走。原因 1host 不匹配spec:rules:-host:api.example.com# 只认这个 hosthttp:paths:-path:/pathType:Prefixbackend:service:name:api-svcport:{number:8080}如果你用curl http://IP/直接打 IP不带 Host 头host 是空的不匹配任何规则 →404。验证# 不带 Host → 404curl-ihttp://ingress-ip/# 带 Host → 正常curl-i-HHost: api.example.comhttp://ingress-ip/原因 2path 匹配规则和你想的不一样pathType有三个取值行为差别很大pathType行为Exact完全相等才匹配Prefix按路径前缀匹配逐段不是字符串前缀ImplementationSpecific取决于 Controller 实现Nginx 下是正则Prefix是按/分段匹配的不是字符串前缀path: /api Prefix ✅ /api 匹配 ✅ /api/v1 匹配 ❌ /apiary 不匹配不是完整的一段这一点经常导致路径看着像前缀但就是 404。原因 3IngressClass 不匹配集群里有多个 Ingress Controller 时必须指定 classmetadata:annotations:kubernetes.io/ingress.class:nginx# 旧写法spec:ingressClassName:nginx# 新写法推荐没写或者写错了这个 Ingress 会被 Controller 忽略表现就是 404。kubectl get ingressclass kubectl get ingressname-oyaml|grep-iclass原因 4多个 Ingress 冲突 / 规则没被加载# 看 Ingress 有没有被 Controller 认领看 ADDRESS 字段有没有值kubectl get ingress-A# 看 Controller 日志里的 reloadkubectl logs-ningress-nginx deploy/ingress-nginx-controller|grep-ireload\|error三、503没有可用的后端503 说明规则匹配上了但Controller 找不到可用的 Pod 来转发。第一步永远是看 Endpointkubectl get endpointsservice-name-nns# 或者kubectl get endpointslices-nnsNAME ENDPOINTS api-svc none ← 空的就是问题所在ENDPOINTS为空 Service 没有选中任何健康 Pod 503。原因 1selector 和 Pod 标签对不上# Service 选什么kubectl get svc api-svc-ojsonpath{.spec.selector}# Pod 实际有什么标签kubectl get pod-lappapi --show-labels最常见的就是app: api和app: api-server这种一字之差。原因 2Pod 没有 ReadyEndpoint 只收Ready的 Pod。Pod Running 但 NotReady 不会被加入。kubectl get pod-lappapi# NAME READY STATUS RESTARTS# api-0 0/1 Running 0 ← Running 但 0/1NotReady原因通常是readinessProbe 失败kubectl describe pod api-0|grep-A5Readiness# Readiness probe failed: HTTP probe failed with statuscode: 500注意readiness 失败不会重启 Pod只会把它从 Service 摘掉。所以现象是Pod 看着在跑但访问 503。原因 3端口对不上# Servicespec:ports:-port:80targetPort:8080# 要和应用实际监听的端口一致targetPort写错时Endpoint 会有 IP 但端口不通。这种情况通常表现为 502 或连接超时但部分 Controller 也会报 503。# 确认 Pod 实际监听的端口kubectlexecpod-- ss-lntp原因 4全部后端被摘除滚动发布期间滚动更新时旧 Pod 被终止、新 Pod 还没 Ready会出现短暂的 503。解法是配置优雅停机 preStop让旧 Pod 在退出前先等一会儿等 endpoint 同步完成lifecycle:preStop:exec:command:[sh,-c,sleep 10]# 给 endpoint 摘除留出时间terminationGracePeriodSeconds:40关于这个时间差的完整机制在滚动更新那篇里详细讲过。四、502连上了但连接失败502 说明 Controller 找到了 Pod 并尝试连接但连接层面失败Pod 内的进程没监听那个端口应用启动时就把连接关了keepalive 连接被复用但已被关闭。排查重点是从 Controller 到 Pod 这一段# 直接打 Pod IP绕过 Service确认应用本身是否正常kubectl get pod-owide# 拿到 Pod IPkubectl run-it--rmcurl--imagecurlimages/curl--restartNever --\curl-ihttp://pod-ip:8080/healthzPod IP 直接访问正常 → 问题在 Service/Endpoint 层Pod IP 也不通 → 问题在应用本身端口、启动、崩溃。五、一个完整的排查流程# 1. 看状态码判断失败位置# 404 → Controller 层503 → Service/Endpoint 层502 → Pod 连接层# 2. 404查规则kubectl get ingressname-oyaml# host / path / pathType / ingressClassNamecurl-i-HHost: hosthttp://ip/# 带 Host 再试一次kubectl logs-ningress-nginx deploy/ingress-nginx-controller--tail50# 3. 503查 Endpointkubectl get endpointssvckubectl get svcsvc-ojsonpath{.spec.selector}kubectl get pod-lselector--show-labels kubectl describe podpod|grep-A5Readiness# 4. 502绕过 Service 直连 Podcurlhttp://pod-ip:port/healthz kubectlexecpod-- ss-lntp六、带走物状态码一句话定位第一个要看的命令404Ingress 规则没匹配上host / path / classkubectl get ingress -o yaml503规则匹配了但 Service 没有可用 Endpointkubectl get endpoints502找到 Pod 但连接失败直连 Pod IP 验证504Pod 连上了但响应超时查应用耗时一句话结论404 是不知道往哪转503 是知道往哪转但没人接502 是有人但连不上——状态码已经告诉你失败在第几层了顺着那一层查就行。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/25 1:52:23
同一套进销存为什么要拆成三个行业版本:数据模型层面的三处分叉
2026/10/25 1:52:23
LangChain 自定义工具全解析:从 @tool 到 bind_tools 的完整调用链路
2026/10/25 1:52:23
读数据安全架构设计与实践13设备和主机层(下)
2026/10/25 2:57:28
技能管理实战:从技能囤积到结构化资产
2026/10/25 2:57:28
技能盘点实战:从模糊自我评价到可交付能力系统
2026/10/25 2:57:28
技能管理实战:从盘点、评估到审计,构建核心竞争力
2026/10/25 2:57:28
Linux系统入门与实战:从基础命令到运维管理
2026/10/25 2:57:28
AI芯片软硬件协同设计:从架构到落地的全链路实践
2026/10/25 2:52:28
动态规划与Manacher算法解决回文串问题
2026/10/25 0:02:11
全国计算机二级C语言真题PDF高效刷题指南
2026/10/25 0:02:11
requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南
2026/10/25 0:02:11
递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现
2026/10/25 0:02:11
全国计算机二级C语言真题PDF高效刷题指南
2026/10/25 0:02:11
requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南
2026/10/25 0:02:11
递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现
2026/10/24 19:17:18
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/23 10:58:39
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/23 10:58:39
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)