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

Kubernetes集群跨Pod访问服务返回504网关超时问题求助

问题描述
  • Azure Kubernetes集群中部署了accounts(用户服务)、wallet(钱包服务)两个服务
  • 从accounts服务内部发起对wallet服务的调用时,请求返回504网关超时错误
  • 所有不涉及该跨服务调用的接口均可正常响应
  • 复现测试命令:curl http://EXTERNAL_IP/api/v1/user/health/wallet,请求触发时accounts服务端会打印实际调用的目标URL
现有配置

Ingress配置(dev命名空间)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dev-ingress
  namespace: dev
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    # nginx.ingress.kubernetes.io/use-regex: "true"
    # nginx.ingress.kubernetes.io/rewrite-target: /api/v1$uri
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /api/v1/wallet
        pathType: Prefix
        backend:
          service:
            name: wallet-service
            port:
              number: 80
      - path: /api/v1/user
        pathType: Prefix
        backend:
          service:
            name: accounts-service
            port:
              number: 80

跨服务调用配置

accounts服务中配置的wallet服务访问地址环境变量值为:http://wallet-service:3007

排查步骤

按优先级从高到低排查:

  • 优先核对端口配置一致性
    现有配置存在明显的端口不匹配风险:Ingress规则中配置的wallet-service对外端口为80,但accounts服务配置的调用端口为3007。
    1. 执行kubectl get svc wallet-service -n dev -o yaml查看wallet-service的Service配置,核对spec.ports字段下暴露的端口号、以及targetPort映射的Pod实际端口
    2. 如果Service仅暴露80端口映射到工作负载,3007端口没有对应的监听规则,跨服务调用会直接超时,将accounts服务中环境变量的端口改为Service实际暴露的端口即可;如果业务确实需要用3007端口访问,调整Service配置新增3007端口的映射规则即可
  • 校验集群内DNS解析与网络连通性
    1. 进入accounts服务的Pod执行连通性测试:kubectl exec -it <accounts服务实际Pod名称> -n dev -- curl -v http://wallet-service:<正确端口>/<测试接口路径>,根据返回结果定位问题
    2. 如果提示域名解析失败,检查两个服务是否在同一命名空间:若wallet服务不在dev命名空间,短域名wallet-service无法正常解析,需要改为全域名格式wallet-service.<wallet所在命名空间>.svc.cluster.local
    3. 如果解析正常但连接超时,检查集群网络策略:确认是否存在NetworkPolicy规则拦截了accounts Pod到wallet Pod对应端口的访问;如果是AKS集群,同时检查节点绑定的网络安全组(NSG)是否放通了集群内部对应端口的流量
  • 校验wallet服务本身的监听状态
    1. 查看wallet服务的Pod日志,确认accounts发起的请求是否实际到达:如果日志中无对应请求记录,说明流量被拦截在网络层;如果有请求记录但无正常返回,检查服务接口是否存在慢查询、死锁、逻辑阻塞问题
    2. 确认wallet服务的监听地址:如果服务仅绑定127.0.0.1回环地址,集群内其他Pod无法访问,需要修改服务配置监听0.0.0.0地址
  • 校验链路超时配置
    1. 检查accounts服务中HTTP客户端的超时配置,如果超时时间设置过短,会在wallet服务返回结果前主动断开连接触发504
    2. 检查Nginx Ingress的代理超时配置,如果跨服务调用耗时超过Ingress默认的60s代理超时阈值,会被Ingress截断返回504,可通过添加注解nginx.ingress.kubernetes.io/proxy-read-timeout、nginx.ingress.kubernetes.io/proxy-send-timeout调整超时阈值适配业务场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:09:28