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控制器处理匹配逻辑
后续检查步骤
- 应用Ingress配置:
kubectl apply -f your-ingress-file.yaml - 查看Ingress状态,获取分配的外部IP:
kubectl get ingress example-ingress - 把
www.example.com的DNS记录指向这个外部IP - 如果遇到问题,查看Ingress事件排查:
kubectl describe ingress example-ingress
内容的提问来源于stack exchange,提问作者Smajl
相关产品推荐
相关产品推荐

