Как я могу гарантировать, что модули контроллера входа запущены на каждом из узлов, содержащих модули для его внутренних служб?

#kubernetes #kubernetes-ingress #nginx-ingress

Вопрос:

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

Поскольку мы работаем в кластере k8s Digital Ocean, мы работаем с externalTrafficPolicy: Local тем, чтобы позволить cert-manager получать доступ к другим блокам внутри, а также чтобы у нас было меньше сетевых переходов для запросов.

Для обеспечения устойчивости мы настроили наши серверные службы для работы по крайней мере на 2 узлах, поэтому имеет смысл, чтобы на каждом из узлов были контроллеры входа, на которых работает серверный модуль, чтобы избежать ненужного межузлового трафика.

Как бы мы настроили настройку контроллера входа, чтобы убедиться, что у нас есть модуль контроллера на каждом из узлов, на которых работают серверные модули?

Ответ №1:

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

Набор Деймона : https://github.com/nginxinc/kubernetes-ingress/blob/master/deployments/helm-chart/templates/controller-daemonset.yaml

теперь, если вы хотите убедиться, что модуль контроллера входа Nginx работает только на узлах, на которых работает ваша серверная служба, вы можете использовать сходство и анти-сходство.

Пример близости :

 affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
            - key: role
              operator: In
              values:
              - app-1
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchExpressions:
              - key: component
                operator: In
                values:
                - nginx-ms
          topologyKey: "kubernetes.io/1-hostname"
 

Вы можете прочитать больше и найти пример по адресу : https://github.com/infracloudio/kubernetes-scheduling-examples/blob/master/podAffinity/README.md

Комментарии:

1. Спасибо за ответ и ссылку на ссылку. Это имеет некоторый смысл, но мне неясно, следует ли мне использовать набор демонов, если я не обязательно хочу, чтобы они были на всех узлах. Если мне нужно «по крайней мере 2» пары модулей nginx/php в кластере из 3 узлов, это все еще набор демонов с правилами сходства?

2. Нет, в этом случае я бы предложил использовать развертывание с привязкой, и это сработает.