K8s v1.22版本Ingress v1转换时通配符路径适配问题
Kubernetes 1.22 Ingress v1 中间通配符路径适配方案
在networking.k8s.io/v1版本的Ingress规则中,官方定义的PathType仅支持Exact(精确匹配)、Prefix(前缀匹配)和ImplementationSpecific(依赖控制器实现)三种类型,前两种不允许路径中间出现通配符。针对/orders/*/example这类中间带通配符的路径需求,需基于具体Ingress控制器的能力实现,以下是主流NGINX Ingress Controller的两种适配方案:
方案一:直接使用正则路径匹配
添加nginx.ingress.kubernetes.io/use-regex: "true"注解启用正则匹配,将路径替换为合法正则表达式,同时指定pathType: ImplementationSpecific:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: orders-ingress annotations: nginx.ingress.kubernetes.io/use-regex: "true" spec: rules: - host: your-domain.com http: paths: - path: /orders/.*/example pathType: ImplementationSpecific backend: service: name: orders-service port: number: 80
注:.*/会匹配任意字符序列(包括空字符),若需限制为非空路径段,可改用[^/]+/。
方案二:结合rewrite规则转发
如果后端服务期望接收固定路径(如/orders/example),可通过rewrite注解将带通配符的路径重写为后端需要的格式:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: orders-ingress annotations: nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /orders/example spec: rules: - host: your-domain.com http: paths: - path: /orders/([^/]+)/example pathType: ImplementationSpecific backend: service: name: orders-service port: number: 80
其他控制器适配提示
若使用Traefik等其他Ingress控制器,需参考对应控制器文档配置正则路径规则。例如Traefik可通过PathRegexp类型的路由规则实现类似需求。
注意事项
- 启用正则匹配后,Ingress中所有路径都会按正则规则解析,需确保其他路径配置符合正则语法;
- 测试时需覆盖多种路径场景(如
/orders/123/example、/orders/abc-def/example等),验证匹配是否符合预期。
内容的提问来源于stack exchange,提问作者Koon7022
相关产品推荐
相关产品推荐

