我们希望使用注释将请求重定向到基于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