You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s集群Nginx Ingress访问NestJS服务遇504网关超时求助

排查方向
  • 验证Service与Pod的匹配性

    • 执行kubectl describe service <你的服务名>,检查Selector字段是否和Pod的labels完全匹配;同时确认TargetPort是否为Pod暴露的3000端口,Port是否和Ingress配置的后端端口一致。
    • 执行kubectl get pods --show-labels,对比Pod的labels和Service的selector,确保没有拼写错误。
  • 测试集群内Service到Pod的连通性

    • 部署临时测试Pod:kubectl run -it --rm busybox --image=busybox:1.28 -- /bin/sh
    • 在测试Pod内执行ping 10.244.0.228确认网络可达,再执行curl 10.244.0.228:3000/api/health看是否能正常响应。如果这一步失败,说明Pod自身网络或服务监听存在问题。
  • 检查NestJS服务的监听地址

    • 进入Pod执行kubectl exec <你的Pod名> -- netstat -tulpn,确认服务监听的是0.0.0.0:3000而非127.0.0.1:3000。如果只监听本地回环,集群内其他组件无法访问服务,但端口转发能正常工作。
  • 验证Ingress控制器到Pod的连通性

    • 找到Ingress控制器的Pod:kubectl get pods -n <ingress控制器所在命名空间,通常为kube-system>
    • 进入控制器Pod执行curl 10.244.0.228:3000/api/health,如果超时,说明集群网络插件(如Flannel/Calico)存在通信问题,或Node层面有防火墙限制。
  • 检查Ingress规则配置

    • 执行kubectl describe ingress <你的Ingress名>,确认Backend指向的Service和端口正确;检查Path规则是否匹配/api/health,PathType是否合理(比如用Prefix而非Exact,避免路径匹配失败)。
  • 查看DigitalOcean负载均衡状态

    • 登录DO控制台,检查负载均衡的后端节点健康状态,确认Ingress控制器所在Node的健康检查通过。如果健康检查失败,负载均衡会停止转发流量到对应节点,导致504。
  • 排查NetworkPolicy限制

    • 执行kubectl get networkpolicies,查看是否存在限制Ingress控制器或Service访问Pod的网络策略。如果有,确认策略规则是否允许Ingress控制器的IP段或命名空间访问Pod。

内容的提问来源于stack exchange,提问作者Goowik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:15