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

GKE集群Ingress路径转发及React应用路由问题求助

解决方案

一、后端API路径转发问题(GCE Ingress)

当前GCE Ingress配置的/api/bpcalc/*路径无法转发到后端Go服务,可从以下两个方向解决:

方案1:调整GCE Ingress配置(不切换控制器)

GCE Ingress默认会保留完整请求路径转发给后端。先排查基础配置:

  • 确认后端Service的selector与Pod标签repo: bpcalc完全匹配;
  • 确认Service的targetPort与Go服务监听的端口一致;
  • 如果Go服务实际监听的是根路径/(而非/api/bpcalc/),需要通过FrontendConfig实现路径重写:
    1. 创建FrontendConfig资源:
      apiVersion: networking.gke.io/v1beta1
      kind: FrontendConfig
      metadata:
        name: bpcalc-frontend-config
      spec:
        urlRewrite:
          pathPrefixRewrite: "/" # 将/api/bpcalc/*前缀替换为/
      
    2. 在Ingress的注解中关联该配置:
      metadata:
        annotations:
          networking.gke.io/v1beta1.FrontendConfig: "bpcalc-frontend-config"
          # 保留原有GCE相关注解
      

方案2:切换到Nginx Ingress Controller(更灵活)

Nginx Ingress的路径重写更直观,适合复杂路由场景:

  1. 安装Nginx Ingress Controller到GKE集群;
  2. 修改Ingress配置:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: {{ .Values.ingress.name }}
      annotations:
        kubernetes.io/ingress.class: "nginx"
        nginx.ingress.kubernetes.io/rewrite-target: /$1 # 重写路径
    spec:
      rules:
      - http:
          paths:
          - path: /(.*)
            pathType: Prefix
            backend:
              service:
                name: {{ .Values.frontend.name }}
                port:
                  number: {{ .Values.frontend.port }}
          - path: /api/bpcalc/(.*)
            pathType: Prefix
            backend:
              service:
                name: {{ .Values.backend.name }}
                port:
                  number: {{ .Values.backend.port }}
    
    • 若Go服务本身监听/api/bpcalc/,则移除rewrite-target注解即可。

二、React应用仅返回index.html问题

当使用pathType: Exact和path: '/'时,Ingress仅匹配根路径请求,React应用的静态资源(如/static/js/main.js)会因匹配不到规则返回404,导致仅显示空的index.html结构。

解决方式:

  • 将前端路径规则改为pathType: Prefix,匹配根路径下所有请求:
    - path: /
      pathType: Prefix
      backend:
        service:
          name: {{ .Values.frontend.name }}
          port:
            number: {{ .Values.frontend.port }}
    
  • 保留前端Nginx配置中的try_files $uri $uri/ /index.html;,确保React路由(如/dashboard)能正确回退到index.html,实现单页应用路由。

额外检查点

  • 确认前端Service的targetPort为8080(与Nginx监听端口一致);
  • 先通过curl <后端Service ClusterIP>/api/bpcalc/验证服务本身是否正常,再排查Ingress问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:45:46