K8s Ingress路径规则配置求助:路径分流至不同Service异常
Kubernetes Ingress路径规则配置修正方案
你当前的配置试图用复杂正则匹配路径,但Kubernetes原生Ingress的Prefix匹配不支持这类正则语法,不同Ingress控制器的正则支持逻辑也不一样,导致规则无法正常生效。下面提供两种可行的修正方案:
方案一:精确匹配+前缀匹配(简洁可靠)
利用Ingress路径从上到下的匹配优先级,先配置更具体的路径规则,再覆盖通用前缀:
spec: rules: - http: paths: # 优先匹配/rest-api/topology精确路径 - backend: service: name: writer-svc port: number: 8443 path: /rest-api/topology pathType: Exact # 匹配/rest-api/topology/下的所有子路径 - backend: service: name: writer-svc port: number: 8443 path: /rest-api/topology/ pathType: Prefix # 匹配所有/rest-api前缀的其他请求 - backend: service: name: normal-svc port: number: 8443 path: /rest-api/ pathType: Prefix
方案二:NGINX Ingress正则匹配(需开启注解)
如果你的集群使用NGINX Ingress Controller,可以通过注解开启正则支持,用正则规则精准划分路径:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: your-ingress-name annotations: # 开启正则匹配支持 nginx.ingress.kubernetes.io/use-regex: "true" # 可选:转发时保留原路径结构,不需要可删除 nginx.ingress.kubernetes.io/rewrite-target: /$0 spec: rules: - http: paths: # 匹配/rest-api/topology及所有子路径 - backend: service: name: writer-svc port: number: 8443 path: /rest-api/topology(/.*)? pathType: ImplementationSpecific # 匹配/rest-api开头但不属于topology分支的路径 - backend: service: name: normal-svc port: number: 8443 path: /rest-api(?!/topology)(/.*)? pathType: ImplementationSpecific
注:ImplementationSpecific表示将路径匹配逻辑交给Ingress控制器处理,这里就是NGINX来解析正则规则。
内容的提问来源于stack exchange,提问作者Alin-Bogdan Zirbo
相关产品推荐
相关产品推荐

