如何通过Ingress实现请求分流?test.abc.com路由配置异常排查
问题排查与解决:Ingress请求分流规则未生效
原因分析
- Nginx Ingress Controller的路径匹配遵循从上到下的顺序优先级,只要匹配到第一条规则就会终止后续匹配
- 你当前配置中,第一条路径
/*是正则匹配,会捕获所有以/开头的请求(包括根路径/和/main.js),导致所有请求都被路由到abc-demo-frontend,第二条规则完全没机会触发 - 虽然开启了正则匹配注解,但规则顺序错误直接导致预期的分流逻辑失效
修复方案
调整Ingress规则的顺序,把更具体的匹配规则放在最前面,通用兜底规则放在后面:
- 先配置针对
/main.js的精确匹配规则 - 再配置根路径
/的规则,处理所有未被前面规则覆盖的请求
修正后的Ingress配置
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-demo-frontend-ingress annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/ssl-redirect: 'false' nginx.ingress.kubernetes.io/use-regex: "true" spec: rules: - host: "test.abc.com" http: paths: # 优先匹配/main.js请求 - path: /main.js pathType: ImplementationSpecific backend: service: name: abc-demo-frontend port: number: 80 # 兜底匹配所有其他请求(包括根路径) - path: / pathType: ImplementationSpecific backend: service: name: abc-demo-frontend-external port: number: 80
验证方法
应用配置后,通过以下方式确认生效:
- 查看Ingress规则状态:
kubectl describe ingress test-demo-frontend-ingress - 实际请求测试:
# 根路径请求,应路由到abc-demo-frontend-external curl test.abc.com # /main.js请求,应路由到abc-demo-frontend curl test.abc.com/main.js
内容的提问来源于stack exchange,提问作者user19883277
相关产品推荐
相关产品推荐

