Kubernetes Ingress路径映射配置求助:前后端路由分流异常
解决方案
核心问题是Ingress规则的匹配顺序和单页应用(SPA)的路由处理逻辑没配合好。下面是适配你需求的Ingress配置,同时解决前端路由404和后端接口被前端接管的问题:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress annotations: nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /$1 # 处理SPA路由刷新404的核心配置 nginx.ingress.kubernetes.io/configuration-snippet: | try_files $uri $uri/ /index.html; spec: ingressClassName: nginx # 确保你的集群中存在名为nginx的IngressClass rules: - host: test.example.com http: paths: # 优先匹配/api开头的所有请求,转发至后端服务 - path: /api/(.*) pathType: ImplementationSpecific backend: service: name: backend-service # 替换为你的后端Service名称 port: number: 80 # 替换为后端Service暴露的端口 # 匹配所有非/api路径,转发至前端服务 - path: /(.*) pathType: ImplementationSpecific backend: service: name: frontend-service # 替换为你的前端Service名称 port: number: 80 # 替换为前端Service暴露的端口
关键配置说明:
- 规则顺序:Ingress按从上到下的顺序匹配路径,把
/api/(.*)放在最前面,确保所有/api开头的请求优先转发到后端,不会被后续的前端规则覆盖。 - 路径重写:
rewrite-target: /$1会将/api/getData重写为/getData,匹配你的后端基础路径配置(后端实际处理的是去掉/api前缀后的接口路径)。 - SPA路由兼容:
configuration-snippet中的try_files指令,让Nginx在找不到对应静态文件时自动转发到index.html,解决前端路由(如/feature、/abc/xxx)刷新后404的问题。 - 正则匹配:开启
use-regex: "true"后,路径中的(.*)才能作为通配符生效,实现对多级路径的匹配。
验证步骤:
- 确认后端Service的名称、端口正确,且后端应用确实处理去掉/api前缀后的接口路径。
- 前端应用需设置为
history路由模式(而非hash模式),否则SPA路由逻辑会失效。 - 执行
kubectl apply -f ingress.yaml更新配置,再用kubectl describe ingress app-ingress检查规则是否正常生效。
内容的提问来源于stack exchange,提问作者Archana Acharya T
相关产品推荐
相关产品推荐

