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

GKE集群中基于Ingress的服务路由配置问题

我来帮你搞定GKE里的Ingress路由配置问题!你想要通过http://www.example.com/auth访问auth-service,http://www.example.com/user访问user-service,还得保留路径后缀(比如把/user/people转发到user-service/people)。下面根据你用的Ingress控制器,给你两种可行方案:

方案1:使用GKE默认的GCE Ingress控制器(服务需适配路径前缀)

GKE默认的GCE Ingress控制器不支持路径重写,所以如果你的服务能直接处理带前缀的路径(比如auth-service能响应/auth/login这样的请求),可以用这个配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    # 指定使用GCE Ingress控制器(GKE默认就是这个,可省略,但显式写更清晰)
    kubernetes.io/ingress.class: "gce"
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - path: "/auth"
        pathType: Prefix
        backend:
          service:
            name: auth-service
            port:
              number: 80 # 替换成你的auth-service暴露的端口
      - path: "/user"
        pathType: Prefix
        backend:
          service:
            name: user-service
            port:
              number: 80 # 替换成你的user-service暴露的端口

说明:

  • pathType: Prefix会匹配所有以/auth或/user开头的请求,比如/auth/login会完整转发到auth-service/auth/login
  • 确保你的auth-service和user-service是ClusterIP类型的服务,并且端口配置和YAML里的number一致

方案2:使用NGINX Ingress控制器(支持路径重写,服务无需改)

如果你的服务只处理不带前缀的路径(比如user-service只响应/people而不是/user/people),那推荐用NGINX Ingress控制器,它支持路径重写。

第一步:安装NGINX Ingress控制器

用Helm快速安装(如果没装Helm,先完成Helm安装):

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install nginx-ingress ingress-nginx/ingress-nginx

第二步:配置Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    # 开启正则匹配
    nginx.ingress.kubernetes.io/use-regex: "true"
    # 重写路径:把匹配到的第二个捕获组作为新路径转发给服务
    nginx.ingress.kubernetes.io/rewrite-target: "/$2"
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - path: "/auth(/|$)(.*)"
        pathType: ImplementationSpecific
        backend:
          service:
            name: auth-service
            port:
              number: 80
      - path: "/user(/|$)(.*)"
        pathType: ImplementationSpecific
        backend:
          service:
            name: user-service
            port:
              number: 80

说明:

  • 正则路径/auth(/|$)(.*)会匹配:
    • http://www.example.com/auth → 重写为/转发到auth-service根路径
    • http://www.example.com/auth/people → 重写为/people转发到auth-service/people
  • pathType: ImplementationSpecific是因为我们用了正则,交给NGINX控制器处理匹配逻辑

后续检查步骤

  1. 应用Ingress配置:kubectl apply -f your-ingress-file.yaml
  2. 查看Ingress状态,获取分配的外部IP:kubectl get ingress example-ingress
  3. 把www.example.com的DNS记录指向这个外部IP
  4. 如果遇到问题,查看Ingress事件排查:kubectl describe ingress example-ingress

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:15:01