簡體   English   中英

基於Header的NGINX入口路由

[英]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

要清楚,並使用自定義標題“示例標題:測試”

  1. 如果“Example-header”是“test”,則在發送到backend-service之前通過我的auth-service進行身份驗證,就像現在一樣。
  2. 如果未定義“Example-header”,我想將請求發送到不同的后端服務,並且在此過程中不使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM