Как внести в белый список только один путь в kubernetes nginx ingress controller - PullRequest
0 голосов
/ 04 июня 2019

Используя Nginx Ingress Controller, мы хотели бы раскрыть различные пути службы Kubernetes с различными требованиями безопасности.

  1. / открыто для публики

  2. /white-list разрешает подключения только с определенного IP-адреса

  3. /need-key требуется ключ API

Я бегу в AWS EKS.Версия Kubernetes выглядит следующим образом: v1.12.6-eks-d69f1b.

Если мы используем аннотации, они применяются ко всему сервису.В идеале я хотел бы применить аннотацию только к пути.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-myServiceA
  annotations:
    # use the shared ingress-nginx
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: myServiceA.foo.org
    http:
      paths:
      - path: /
        backend:
          serviceName: myServiceA
          servicePort: 80
      - path: /white-list
        backend:
          serviceName: myServiceA
          servicePort: 80
          **NEED SOMETHING HERE TO WHITELIST**
      - path: /need-key
        backend:
          serviceName: myServiceA
          servicePort: 80
          **NEED SOMETHING HERE TO USE API-KEY**

Результаты, которые я получаю, в итоге применяются ко всем путям.Я могу жить без API-ключа, так как могу кодировать это, но в идеале я бы предпочел, чтобы он управлялся вне контейнера.

Кто-нибудь достиг этого с контроллером NGINX Ingress?

1 Ответ

1 голос
/ 05 июня 2019

Чтобы применить аннотацию для каждого пути, вы можете написать одно ingress правило для каждого пути, который вы хотите применить.Nginx Ingress Controller сам соберет эти ingress правила и будет применять их соответствующим образом.

Например:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-myServiceA-root
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: myServiceA.foo.org
    http:
      paths:
      - path: /
        backend:
          serviceName: myServiceA
          servicePort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-myServiceA-white-list
  annotations:
    kubernetes.io/ingress.class: "nginx"
    ingress.kubernetes.io/whitelist-source-range: X.X.X.X/32
spec:
  rules:
  - host: myServiceA.foo.org
    http:
      paths:
      - path: /white-list
        backend:
          serviceName: myServiceA
          servicePort: 80
...
...