Какой вход Kubernetes «выигрывает» (tls и несколько входов для одного хоста)? - PullRequest
0 голосов
/ 25 марта 2020

Предположим, у меня есть два входа ingress-a и ingress-b для одного хоста, но с разными путями:

ingress-a :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: app-a
  namespace: namespace-a
spec:
  rules:
  - host: myhost.com
    http:
      paths:
      - backend:
          serviceName: app-a
          servicePort: 8080
        path: /path-a
  tls:
  - hosts:
    - myhost.com
    secretName: tls-a

ingress-b :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: app-b
  namespace: namespace-b
spec:
  rules:
  - host: myhost.com
    http:
      paths:
      - backend:
          serviceName: app-b
          servicePort: 8080
        path: /path-b
  tls:
  - hosts:
    - myhost.com
    secretName: tls-b

Теперь мне нужно обновить сертификат. Предположим, я создаю новый секрет в tls-new , но только обновляю ingress-a , чтобы указать на это. Какой из двух входов выиграет ?

Думаю, мне следует просто перезаписать существующий секрет, но я пытаюсь понять, как правила входа будут работать в приведенном выше сценарии, где два разных tls ссылки на секреты для того же хоста.

1 Ответ

0 голосов
/ 25 марта 2020

NGINX и NGINX Plus Контроллер входа для Kubernetes поддерживает объединяемые типы входа.

Мастер объявляется с использованием nginx.org/mergeable-ingress-type: master. Мастер обработает все конфигурации на уровне хоста, включая конфигурацию TLS, и любые аннотации, которые будут применены ко всему хосту. На уникальном хосте может быть только один входной ресурс, содержащий главное значение. Пути не могут быть частью входящего ресурса.

Миньон объявлен с использованием nginx.org/mergeable-ingress-type: minion. Миньон будет использоваться для добавления различных локаций к входному ресурсу со значением Master. Конфигурации TLS не допускаются. Несколько миньонов могут быть применены к мастеру, если они не имеют конфликтующих путей. Если существует конфликтующий путь, то будет использоваться путь, определенный для самого старого миньона.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: cafe-ingress-master
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.org/mergeable-ingress-type: "master"
spec:
  tls:
  - hosts:
    - cafe.example.com
    secretName: cafe-secret
  rules:
  - host: cafe.example.com

---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: cafe-ingress-coffee-minion
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.org/mergeable-ingress-type: "minion"
spec:
  rules:
  - host: cafe.example.com
    http:
      paths:
      - path: /coffee
        backend:
          serviceName: coffee-svc
          servicePort: 80

Миньон не может иметь TLS, только мастер может иметь TLS, и вы изменяете TLS в мастере.

...