Joã*_*ira 4 nginx kubernetes nginx-ingress
auth-service我有一个 nginx-ingress在向后端服务发送请求之前调用自定义,使用这个简单的 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
Run Code Online (Sandbox Code Playgroud)
现在我需要一些不同的东西。
如何通过不同的流发送所有具有相同“主机”标头的请求,一个具有 auth-service 并连接到,backend-service1另一个没有任何身份验证并连接到backend-service2?
明确地说,并使用自定义标头“Example-header:test”
auth-service在发送到 之前通过 my 进行身份验证backend-service,就像现在所做的那样。auth-service该过程中使用。我尝试了几件事,即有 2 个 Ingress,一个 ,global-auth-url另一个 ,nginx.ingress.kubernetes.io/enable-global-auth: "false"但始终会调用 auth-service 。
我可以使用 NGINX 来完成此操作,还是必须使用 Istio 或大使?
小智 7
实现此行为的一种方法是滥用金丝雀功能。
为您的backend-service,创建一个正常的 Ingress,例如
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-backend
spec:
ingressClassName: nginx
rules:
- host: localhost
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: backend-service
port:
number: 80
Run Code Online (Sandbox Code Playgroud)
使用启用的金丝雀为您创建第二个 Ingressauth-service并设置标头名称和值,例如
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-auth
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: Example-header
nginx.ingress.kubernetes.io/canary-by-header-value: test
spec:
ingressClassName: nginx
rules:
- host: localhost
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: auth-service
port:
number: 80
Run Code Online (Sandbox Code Playgroud)
现在,每个请求都Example-header: test路由到auth-service. 任何其他值,例如Example-header: some-value,都不会路由到auth-service而是转到您的backend-service.
| 归档时间: |
|
| 查看次数: |
6956 次 |
| 最近记录: |