最近公司在腾讯云 Devtron 上部署了一套 admin 后台,配置好 nginx 后通过内网路由器 WiFi 网关做生产环境内测。结果电脑连上 WiFi 访问页面,浏览器直接甩了一个 502 Gateway,ALB 反馈的。下面记录一下我排查这个问题的完整过程。
一、现象
页面访问路径是:电脑 → 内网 WiFi → 路由器网关 → 腾讯云 ALB → K8s Service → Pod(nginx 静态文件服务)。浏览器显示 502,并且明确标注是 ALB 返回的。
二、第一反应:看 nginx 配置
先检查了 Pod 里的 nginx.conf,配置如下:
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
location = /healthz {
default_type text/plain;
return 200 "ok
";
}
location /front/DAdmin {
index index.html;
try_files $uri /index.html;
}
location ^~/front/static/ {
rewrite ^/front(/static/.*)$ $1 last;
}
location ~*.(gif|jpg|jpeg|png|css|js|ico|svg)$ {
root /usr/share/nginx/html/;
}
}
仔细一看,这个 nginx 只是个纯静态文件服务器,没有配置任何 proxy_pass 反向代理。也就是说它自己不产生 502——它只负责返回静态文件或者 404,不会返回 502。
三、502 从哪里来?
既然 nginx 本身不会产生 502,那 502 一定是更上游的组件返回的。结合架构梳理了一下可能的原因:
- ALB 健康检查失败:腾讯云 ALB 对后端 Pod 做健康检查,如果连续失败就把节点标记为不健康,所有请求直接返回 502。
- Pod 未就绪:Pod 可能 CrashLoopBackOff、ImagePullBackOff,或者就绪探针没通过。
- Service 与 Pod 失联:Service 的 selector 没匹配到任何 Pod,Endpoint 为空。
- 内网路由问题:WiFi 网关的 DNS 解析可能没有正确指向集群内部,或者网络策略阻挡了流量。
四、想看日志却看不到
我以为 kubectl logs 能看到 nginx 日志,结果打开 Pod 日志一片空白。回头看配置才反应过来:
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
nginx 的日志写到了容器内的文件(/var/log/nginx/access.log 和 error.log),而不是标准输出。kubectl logs 只能看 stdout/stderr,当然什么都看不见。
查日志有三条路:
- 进 Pod 直接看:
kubectl exec -it <pod-name> -- cat /var/log/nginx/access.log,最快最直接。 - 改配置输出到 stdout:把 access_log 改成
/dev/stdout,error_log 改成/dev/stderr,之后 kubectl logs 就能直接看到了——这是长期方案。 - 腾讯云 CLS 日志服务:如果 Devtron 集成了日志采集,可以在腾讯云控制台 → 日志服务 → 检索分析中查询。
五、最终定位与解决
按照优先级一步步排查下来:
kubectl get pods -n <namespace>→ 确认 Pod 状态是 Running 且 Ready 1/1。kubectl get svc,ep -n <namespace>→ 确认 Service 的 Endpoint 中有 Pod IP。- 在集群内任意 Pod 里
curl http://<service-name>/healthz→ 能通,返回 200。 - 进 nginx Pod
kubectl exec查看 access.log → 发现根本没有来自 ALB 健康检查的请求记录。
走到这一步,问题范围缩小到了ALB 到 Pod 之间的网络链路。最终发现是 ALB 的安全组规则没有放行内网 WiFi 网关的 IP 段,导致健康检查流量被拦截,ALB 认为后端全部不健康,对所有请求直接返回 502。
六、总结
- 看到 502 不要只盯着 nginx,得看整条链路上哪个环节可能拦截了流量。
- nginx 日志写文件而非 stdout 是一个常见的坑,第一时间改成
/dev/stdout能省很多事。 - 腾讯云 ALB 的安全组规则容易被忽略——加了新来源 IP 或网段后记得同步更新安全组。
- 排查顺序:Pod 状态 → Service/Endpoint → 集群内连通性 → ALB 健康检查 → 安全组/网络策略。
整个过程下来最大的感受是:502 这个报错非常”概括”,链路长的时候不能靠直觉猜,只能一层层排除,找到真正断掉的那个环节。



发表回复