[英]NGINX Ingress Routing based on Header
在向后端服務發送請求之前,我有一個 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
現在我需要一些不同的東西。
如何通過不同的流發送所有具有相同“主機”標頭的請求,一個帶有 auth-service 並連接到backend-service1
,另一個沒有任何身份驗證並連接到backend-service2
?
要清楚,並使用自定義標題“示例標題:測試”
backend-service
之前通過我的auth-service
進行身份驗證,就像現在一樣。auth-service
。 我嘗試了幾件事,即有 2 個 Ingress,一個帶有global-auth-url
,另一個帶有nginx.ingress.kubernetes.io/enable-global-auth: "false"
但始終調用 auth-service。
我可以用 NGINX 做到這一點,還是必須使用 Istio 或 Ambassador?
實現此行為的一種方法是濫用canary 功能。
對於您的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
使用啟用的金絲雀為您創建第二個 Ingress auth-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
現在,每個請求都帶有Example-header: test
路由到auth-service
。 任何其他值,例如Example-header: some-value
,都不會路由到auth-service
而是轉到您的backend-service
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.