我有一个nginx-ingress在向后端服务发送请求之前调用自定义auth-service
,使用这个简单的ConfigMap和Ingress:
apiVersion: v1
kind: ConfigMap
metadata:
...
data:
global-auth-url: auth-service-url:8080/authenticate
global-auth-method: GET
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: "nginx"
...
spec:
rules:
- host: host1
http:
paths:
- backend:
serviceName: backend-service
servicePort: 8080
字符串
现在我需要一些不同的东西。
我如何通过不同的流发送具有相同“Host”头的请求,一个使用auth-service并连接到backend-service1
,另一个没有任何身份验证并连接到backend-service2
?
为了清楚起见,并使用自定义头“Example-header:测试”
1.如果“Example-header”是“test”,请在发送到backend-service
之前通过我的auth-service
进行身份验证,就像现在一样。
1.如果没有定义“Example-header”,我希望将请求发送到不同的后端服务,并且在此过程中不使用auth-service
。
我尝试了几件事,即有两个入口,一个是global-auth-url
,另一个是nginx.ingress.kubernetes.io/enable-global-auth: "false"
,但auth-service总是被调用。
我可以用NGINX来做这个吗?或者我必须使用Istio或Ambassador?
1条答案
按热度按时间tag5nh1u1#
实现此行为的一种方法是滥用金丝雀特性。
对于您的
backend-service
,创建一个普通的Ingress,e. g的。字符串
为您创建第二个Ingress
auth-service
,启用canary,并设置头名称和值e。g的。型
现在,每个包含
Example-header: test
的请求都会路由到auth-service
。任何其他值,e。例如Example-header: some-value
,将不路由到auth-service
,而是转到您的backend-service
。