kubernetes 基于Header的NGINX Ingress路由

oknrviil  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(143)

我有一个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?

tag5nh1u

tag5nh1u1#

实现此行为的一种方法是滥用金丝雀特性。
对于您的backend-service,创建一个普通的Ingress,e. g的。

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,启用canary,并设置头名称和值e。g的。

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。任何其他值,e。例如Example-header: some-value,将路由到auth-service,而是转到您的backend-service

相关问题