K8s经Ingress访问Node服务返回502 端口疑似未开放怎么排查
502 Bad Gateway 排查修复指南
基于已知排查条件(Pod内部localhost:8080访问正常),按优先级核对以下配置:
- 核心高发问题:检查Node服务的网络监听绑定地址
近80%的同类故障来源于服务仅绑定回环地址127.0.0.1而非全网卡地址0.0.0.0。
在Pod内部执行netstat -tulpn | grep 8080核对监听状态:- 若输出为
127.0.0.1:8080:意味着只有Pod内部的回环链路能访问服务,所有来自Pod外部(Service转发、Ingress转发、节点直连)的请求都会被直接拒绝,触发502错误,完全匹配你当前“Pod内curl localhost通、外部访问失败、节点视角看不到容器开放端口”的现象。 - 修复方式:修改服务启动逻辑中的监听配置,将绑定地址改为
0.0.0.0,例如:// 错误配置 app.listen(8080, '127.0.0.1', () => {}) // 正确配置 app.listen(8080, '0.0.0.0', () => {})
- 若输出为
- 标签匹配校验:确认Service能正确关联后端Pod
当前Service配置的后端选择器为app: test-deployment,如果Deployment的Pod模板未配置完全一致的标签,会导致Service无法获取到后端Pod的IP列表,因无可用后端触发502。
执行kubectl get endpoints test-service验证关联状态:
若返回的ENDPOINTS列无对应Pod IP,说明标签匹配失效,需要调整Deployment的spec.template.metadata.labels配置,保证和Service选择器完全匹配。 - 逐层链路验证:定位具体故障节点
按网络转发路径逐段测试,缩小故障范围:- 在Pod内部执行
curl <Pod自身IP>:8080:若不通,回到第一步检查监听绑定地址 - 在集群任意工作节点执行
curl <Pod自身IP>:8080:若不通,同样指向监听地址配置错误 - 在集群任意工作节点执行
curl <Service ClusterIP>:80:若不通,核对Service的targetPort配置,确认与服务实际监听端口一致 - 检查Ingress配置兼容性:若集群使用
networking.k8s.io/v1版本的Ingress资源,必须为路径增加pathType: Prefix配置,缺少该字段会导致Ingress Controller无法正确匹配路由规则,引发后端转发失败。
- 在Pod内部执行
- 配置说明:Dockerfile中的
EXPOSE 8080仅为镜像信息声明,不会实际绑定或开放端口,无需为该配置做额外调整。
内容的提问来源于stack exchange,提问作者NealR
相关产品推荐
相关产品推荐

