系统学习 学习路径总入口:先选领域,再建立模型,最后用故障演练验证

502/504:先确认是谁返回的、上游是否存活,再查超时、连接池与证书

补充说明

502/504 是网关类错误,不是浏览器或应用直接返回。先确认返回者(云负载均衡、Ingress、Nginx、应用网关),再看上游是否监听、是否有健康端点、超时是否合理。502 更像“上游连接或响应坏了”,504 更像“上游太慢或网关等不及”。本页是分诊入口,单场景处置见 502-bad-gateway 和 504-gateway-timeout。

边界:不覆盖应用内部的性能分析;如果是 499、413、431 或 WebSocket 断开,先看 HTTP 状态码速查 和 Nginx 速查。

3 分钟定位

curl -sv -o /dev/null -w '%{http_code} %{time_total}\n' https://example.com/health
curl -sv http://<upstream>:<port>/health
ss -lntp | grep <port>
dig +short <service>.<namespace>.svc.cluster.local
nginx -T | grep -E 'proxy_(pass|connect_timeout|read_timeout|send_timeout)'

Kubernetes 里同时看路由、后端和事件:

kubectl get ingress,pods,svc,endpoints -n <namespace>
kubectl describe ingress <name> -n <namespace>
kubectl logs deploy/<app> -n <namespace> --tail=100
kubectl get events -n <namespace> --sort-by=.lastTimestamp | tail
现象 优先检查 入口
502 + connection refused 上游没监听、端口错、Pod 未就绪 connection-refused
502 + 连接被重置 应用崩溃、keepalive、TLS 握手 k8s-ingress-502
504 上游慢、超时太短、连接池满、DNS 慢 504-gateway-timeout
偶发 502 单个副本异常、滚动发布、节点问题 kubectl get pods -o wide、Service
云负载均衡 502 健康检查、后端 TLS、idle timeout cloud-lb-502
证书/握手错误 证书过期、证书链不全、SNI/mTLS TLS 速查
DNS 解析失败 CoreDNS、ndots、search 域 DNS 解析失败、ndots
413/431 请求体或请求头过大 Nginx 的 client_max_body_size
499 客户端主动断开,不是网关错误 Nginx access log、客户端超时

根因树

  1. 上游没起来:进程崩溃、端口没监听、启动失败、健康检查未通过。先 ss -lntp 和 curl 直连,不要只看网关日志。
  2. 上游起来了但不可达:Service selector 不匹配、Endpoints 为空、targetPort 写错、NetworkPolicy 拦截、DNS 解析失败。
  3. 上游可达但太慢:应用排队、数据库慢查询、连接池耗尽、GC 停顿、下游超时;504 常在这里出现。
  4. 网关配置问题:proxy_read_timeout 太短、proxy_buffer_size 不足、请求体限制、keepalive 与后端不匹配。
  5. TLS/证书:证书过期、证书链不完整、SNI 不匹配、mTLS 客户端证书缺失,常表现为 502 或握手失败。
  6. 发布与健康检查:滚动发布时 readiness 过早通过、preStop 太短、旧连接未排空,造成间歇性 502。
  7. 资源与限流:CPU 限流、内存不足、文件描述符耗尽、连接数打满,应用无法及时响应。

相关命令

相关教程

易错点与排错

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 502 和 504 的核心区别是什么?
  2. kubectl get endpoints 为空,常见原因有哪些?
  3. 504 除了“应用处理慢”,还可能是哪些环节的问题?
答案
  1. 502 是网关无法从上游拿到有效响应(连接被拒、连接重置、响应非法等);504 是网关等待上游响应超时。
  2. Service selector 不匹配、Pod readiness 未通过、targetPort 或端口名不匹配,以及 NetworkPolicy 等原因导致后端未注册。
  3. DNS 解析慢、连接池排队、Nginx/LB 超时设置过短、后端 keepalive 不匹配、重试风暴,以及下游依赖慢。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令