Nginx Ingress根路径404问题:需将正则转换为RE2格式
Kubernetes Ingress正则适配RE2修复方案
问题根源
你的Ingress配置存在两个关键问题:
- 正则表达式写法不符合RE2语法(NGINX Ingress使用的正则引擎)
- 注释拼写错误:
nginx.ingress.kuberentes.io/use-regex里的kuberentes应为kubernetes,这会导致正则开关未正确启用
修正后的Ingress配置
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-srv annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/use-regex: 'true' # 修正拼写错误 spec: rules: - host: posts.com http: paths: - path: /posts/create pathType: Prefix backend: service: name: posts-clusterip-srv port: number: 4000 - path: /posts pathType: Prefix backend: service: name: query-srv port: number: 4002 - path: /posts/.*/comments # 适配RE2的写法,匹配/posts/xxx/comments格式 pathType: Prefix backend: service: name: comments-srv port: number: 4001 - path: /.* # 匹配根路径及所有未被上面规则覆盖的路径 pathType: Prefix backend: service: name: client-srv port: number: 3000
关键修改说明
根路径规则:把
/?(.*)改为/.*
RE2中,/.*可以直接匹配根路径(空路径)以及所有以/开头的子路径,完全覆盖你原本想要的匹配逻辑。comments路径规则:把
/posts/?(.*)/comments改为/posts/.*/comments
原写法里的/?(.*)不符合RE2语法,.*直接匹配任意长度的字符(包括空),足以覆盖posts/xxx/comments这类路径。如果需要匹配非空内容,可以改用/posts/(.+)/comments。修正注释拼写:把
kuberentes改为kubernetes,确保正则功能被正确启用,这是很多人容易忽略的细节。
内容的提问来源于stack exchange,提问作者thomas paulson
相关产品推荐
相关产品推荐

