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

GKE Gateway API路由正常但访问报‘no healthy upstream’问题求助

排查GKE Gateway API路由"no healthy upstream"问题

结合你的配置和问题现象,从以下几个方向逐一排查:

  • 跨命名空间后端引用权限缺失
    Gateway API v1beta1默认限制跨命名空间的服务引用,你的HTTPRoute引用了monitoring命名空间的服务,但如果该命名空间未配置ReferenceGrant允许HTTPRoute所在命名空间访问其服务,会导致路由无法正确关联后端,最终触发"no healthy upstream"。
    解决:在monitoring命名空间创建ReferenceGrant资源(替换<HTTPRoute所在命名空间>为实际值):

    apiVersion: gateway.networking.k8s.io/v1beta1
    kind: ReferenceGrant
    metadata:
      name: allow-monitoring-services
      namespace: monitoring
    spec:
      from:
      - group: gateway.networking.k8s.io
        kind: HTTPRoute
        namespace: <HTTPRoute所在命名空间>
      to:
      - group: ""
        kind: Service
        name: internal-grafana
      - group: ""
        kind: Service
        name: chronograf
      - group: ""
        kind: Service
        name: jaeger-query
    
  • 后端服务健康检查配置不匹配
    GKE L7 ILB会自动为后端服务创建健康检查,默认检查路径为/。如果你的后端服务(如Jaeger)的健康检查路径不是/,默认检查会返回非200状态码,导致LB标记上游为不健康。
    排查步骤:

    1. 查看自动生成的健康检查详情:gcloud compute health-checks describe <健康检查名称>
    2. 验证Pod的健康路径响应:进入Pod执行curl localhost:3000(Grafana)或curl localhost:80/healthz(Jaeger)
    3. 若需修改健康检查路径,给后端服务添加注解并创建BackendConfig:
      # 后端服务注解
      annotations:
        cloud.google.com/backend-config: '{"default": "monitoring-backend-config"}'
      
      # BackendConfig资源
      apiVersion: cloud.google.com/v1
      kind: BackendConfig
      metadata:
        name: monitoring-backend-config
      spec:
        healthCheck:
          checkIntervalSec: 5
          port: 3000 # 对应服务端口
          requestPath: /healthz # 替换为后端实际健康检查路径
          timeoutSec: 5
      
  • 后端服务路径前缀与路由不兼容
    路由配置PathPrefix: /grafana后,请求会转发到后端的/grafana路径,但如果Grafana等应用未配置baseURL,会返回404错误。若应用因路径错误无法响应健康检查,也会触发上游不健康标记。
    解决:修改应用配置设置baseURL:

    • Grafana:添加环境变量GF_SERVER_ROOT_URL=http://abc.com/grafana
    • Chronograf:配置BASE_PATH=/chronograf
    • Jaeger Query:启动参数添加--query.base-path=/jaeger
  • 后端服务端口映射错误
    确认后端服务的targetPort是否与Pod监听端口一致:

    1. 查看服务配置:kubectl get svc internal-grafana -n monitoring -o yaml
    2. 确保spec.ports[].targetPort匹配Pod实际端口(Grafana默认3000,Chronograf默认80,Jaeger Query默认80)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:20:58