如何配置K8s Ingress实现路径路由且不转发前缀至后端服务?
问题描述
我有两个LoadBalancer类型的K8s服务:
order LoadBalancer 10.43.246.181 172.20.0.2 50001:31493/TCP 11h payment LoadBalancer 10.43.150.222 172.20.0.2 50002:30885/TCP 11h
它们分别路由至无上下文路径、暴露8080端口的Pod(如a.b.c.d:8080、v.x.y.z:8080)。
我的Ingress配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-ing annotations: ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - http: paths: - path: /order pathType: Prefix backend: service: name: order port: number: 50001 - path: /payment pathType: Prefix backend: service: name: payment port: number: 50002
当我执行curl命令访问/order路径时:
curl --location 'http://localhost:8080/order/orders'
order Pod返回错误:
No mapping for POST /order/orders
若将Ingress路径改为根路径:
- path: / pathType: Prefix backend: service: name: order port: number: 50001
执行curl命令:
curl --location 'http://localhost:8080/orders'
则可正常访问。
我的问题:能否不将路径"/order"转发至Pod?如何配置Ingress实现像第一个清单那样的不同路径路由至对应服务?
解决方案
问题出在Ingress的重写规则配置上。当前的rewrite-target: /仅会把请求路径替换为根,但对于/order/orders这类带后续路径的请求,Nginx Ingress并未正确移除前缀/order。
针对Kubernetes v1版本的Ingress(networking.k8s.io/v1),需要使用正则捕获组来匹配并重写路径,具体配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-ing annotations: ingress.kubernetes.io/ssl-redirect: "false" nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: rules: - http: paths: - path: /order(/|$)(.*) pathType: ImplementationSpecific backend: service: name: order port: number: 50001 - path: /payment(/|$)(.*) pathType: ImplementationSpecific backend: service: name: payment port: number: 50002
配置说明:
path: /order(/|$)(.*):用正则表达式匹配路径,/order后的(/|$)匹配斜杠或路径结束符,(.*)捕获后续所有路径内容。rewrite-target: /$2:将请求重写为/$2,即只保留第二个捕获组的内容,完全剔除/order前缀。pathType: ImplementationSpecific:由于使用了正则路径,需指定该类型,让Nginx Ingress控制器处理路径匹配逻辑。
配置完成后,访问http://localhost:8080/order/orders时,Ingress会将请求转发至order服务的/orders路径,Pod可正常处理;同理/payment/xxx会转发至payment服务的/xxx路径。
若使用较新版本的Nginx Ingress控制器,也可添加nginx.ingress.kubernetes.io/use-regex: "true"注解配合正则路径,效果一致。
内容的提问来源于stack exchange,提问作者emeraldhieu
相关产品推荐
相关产品推荐

