如何使用Ingress Nginx通过url查询字符串路由请求?



我们希望使用注释将请求重定向到基于url args (query)的不同后端服务

的例子:

https://example.com/foo?differentQueryString=0→服务:

https://example.com/foo/bar?queryString=0 - service-b

  • 注意:路径不重要,可以是/foo/bar或/foo或/bar/foo

我们跟进了这个

Kubernetes NGINX入口控制器-如果查询字符串存在则不同路由

带url参数的Kubernetes入口路由

但是我们不想为这个设置ConfigMap我们也不想重复请求到入口而是重写

这是我们尝试过的

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($args ~ queryString=0){
backend.service.name = service-b
}
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-a
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: service-b
port:
number: 80

我们期望得到响应,但是我们从Ingress Nginx得到502

我们设法找到一个很好的解决方案而不重写和ConfigMap

工作得很好,还包括Nginx入口指标,所以我们可以相应地做HPA

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($args ~ queryString=0){
set $proxy_upstream_name "default-service-b-80";
set $proxy_host $proxy_upstream_name;
set $service_name "service-b"; 
}
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-a
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: service-b
port:
number: 80

$proxy_upsteam_name约定为namspace - service_name - port

最新更新