Rancher Metadata / Confd Эквивалент в Кубернетес - PullRequest
0 голосов
/ 13 октября 2018

На нашем текущем Rancher environment мы динамически конфигурируем конфигурацию Nginx на основе вызовов метаданных Rancher, используя метки на контейнерах, чтобы определить, включен ли этот контейнер в Nginx маршрутизацию.
Мы используемconfd с бэкэндом Rancher для выполнения этой проверки метаданных и динамического изменения / перезагрузки новой конфигурации Nginx.

Мы начали работу по переходу на Kubernetes (AWS EKS).Есть ли эквивалент этого confd/Rancher, доступный для Kubernetes?

По некоторым техническим причинам и причинам определения времени мы не можем заменить этот nginx на ingress эквивалент в настоящее время,поэтому мы стараемся использовать аннотации или метки на сервисах / модулях для обеспечения возможности динамической конфигурации.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Чтобы немного подробнее узнать о том, что мы в итоге нашли благодаря ответу Скотта Андерсона.

Используя метод пользовательских шаблонов nginx, мы смогли динамически конфигурировать конфигурацию nginx с помощью аннотаций в ресурсах Ingress иссылаясь на них в пользовательском шаблоне nginx.

С метаданными ресурса Ingress, определенными как:

metadata:
  name: foo
  annotations:
    kubernetes.io/ingress.class: "nginx-legacy"
    mycompany/bar: "path_to_service"

В пользовательском шаблоне Nginx (блоке местоположения), чтобы увидеть, присутствует ли аннотация:

{{if index $ing.Annotations "mycompany/bar"}}

Чтобы получить значение из аннотации:

{{$bar:= index $ing.Annotations "mycompany/bar"}}
0 голосов
/ 14 октября 2018

Хостинг-провайдеры Kubernetes обычно не предоставляют вам прямой доступ к поддержке etcd, поэтому вам лучше всего выбрать API Kubernetes для ресурсов, которые вас интересуют, и сгенерировать вашу конфигурацию.

Именно это и делает входной контроллер - отслеживает изменения в ресурсах Kubernetes и генерирует конфигурацию для балансировщика нагрузки, такого как nginx.

Один из контроллеров nginx позволяет вам полностью заменить используемый шаблон на свой собственный.

Шаблон NGINX находится в файле /etc / nginx / template / nginx.tmpl.

Используя том, можно использовать пользовательский шаблон.Это включает в себя использование Configmap в качестве источника шаблона

        volumeMounts:
      - mountPath: /etc/nginx/template
        name: nginx-template-volume
        readOnly: true
  volumes:
    - name: nginx-template-volume
      configMap:
        name: nginx-template
        items:
        - key: nginx.tmpl
          path: nginx.tmpl

Вы можете развернуть версию входного контроллера nginx в пользовательском классе , например nginx-legacy, так что это не так.не пытайтесь выставлять сервисы, ожидающие нормального входа nginx.

Для этого параметр --ingress-class должен быть изменен на уникальное для кластера значение в определении контроллера репликации.

spec:
  template:
     spec:
       containers:
         - name: nginx-ingress-legacy-controller
           args:
             - /nginx-ingress-controller
             - '--election-id=ingress-controller-leader-internal'
             - '--ingress-class=nginx-legacy'
             - '--configmap=ingress/nginx-ingress-internal-controller'

А затем аннотируйте устаревшие сервисы для назначения ресурсов этому входу, используя:

metadata:
  name: foo
  annotations:
    kubernetes.io/ingress.class: "nginx-legacy"
...