• Русский
  • Ingress Nginx Operator

    Overview

    Ingress Nginx Operator предоставлен для упрощения продвинутого управления развертываниями Ingress-Nginx.
    Этот Operator оптимизирует процессы развертывания, настройки и обслуживания экземпляров Ingress-Nginx. Операционная архитектура функционирует следующим образом: Ingress-Nginx Operator непрерывно отслеживает Custom Resource типа ingressnginxes.ingress-nginx.alauda.io (IngressNginx) и автоматически создает соответствующие экземпляры Ingress-Nginx для каждого определенного ресурса IngressNginx. Такая архитектура позволяет напрямую управлять пользовательскими ресурсами IngressNginx для контроля функциональности и поведения Ingress-Nginx.

    Installation

    1. Перейдите в Administrator -> Marketplace -> OperatorHub
    2. Найдите Alauda build of Ingress NGINX Controller и нажмите Install

    Configuration Via Web Console

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

    После завершения установки Ingress Nginx Operator:

    1. Перейдите на вкладку All Instances
    2. Нажмите Create, затем в появившемся диалоговом окне найдите раздел типа экземпляра IngressNginx и нажмите Create
    ПолеОписаниеПуть в YAML
    NameИмя экземпляра Ingress Nginx.metadata.name
    NamespaceПространство имен экземпляра Ingress Nginx.metadata.namespace
    ReplicaКоличество реплик развертывания Ingress Nginx.spec.controller.replicaCount
    ResourcesЗапросы и лимиты ресурсов для развертывания Ingress Nginx.spec.controller.resources
    Service TypeТип сервиса Ingress Nginx.spec.controller.service.type
    Ingress ScopeУправляет обработкой ресурсов Ingress в указанных пространствах имен.spec.controller.scope.namespaceSelector, см. ingress-sharding

    Configuration Via YAML

    По умолчанию Ingress Nginx Operator развертывает экземпляры Ingress Nginx в том же пространстве имен, что и соответствующий пользовательский ресурс IngressNginx.

    Ingress Sharding

    По умолчанию Ingress Nginx обрабатывает ресурсы Ingress во всех пространствах имен для ingress-ресурсов, которые либо явно указывают имя своего IngressClass, либо не указывают его вовсе. Вы можете использовать .controller.scope.namespaceSelector, чтобы ограничить экземпляр определёнными пространствами имен. Например, следующий ресурс IngressNginx demo-scope обрабатывает ingress-ресурсы только в пространствах имен с меткой cpaas.io/project=demo.

    Создание IngressNginx, который обрабатывает Ingress во всех NS

    apiVersion: ingress-nginx.alauda.io/v1
    kind: IngressNginx
    metadata:
      name: demo-all
    spec:
      controller:
        nodeSelector:
          kubernetes.io/os: linux
        replicaCount: 1

    Создание IngressNginx, который обрабатывает Ingress в конкретных NS

    apiVersion: ingress-nginx.alauda.io/v1
    kind: IngressNginx
    metadata:
      name: demo-scope
    spec:
      controller:
        scope:
          namespaceSelector: 'cpaas.io/project=demo'
        nodeSelector:
          kubernetes.io/os: linux
        replicaCount: 1
    1. формат: $LABLE_KEY=$LABLE_VALUE

    Открытие доступа через LoadBalancer

    По умолчанию Ingress Controller настроен с типом сервиса ClusterIP. Чтобы открыть Ingress Controller извне с помощью сервиса LoadBalancer, примените следующую конфигурацию:

    NOTE

    Сервисы LoadBalancer требуют интеграции с внешним балансировщиком нагрузки (балансировщик облачного провайдера или MetalLB) для выделения внешнего IP.

    apiVersion: ingress-nginx.alauda.io/v1
    kind: IngressNginx
    metadata:
      name: demo
    spec:
      controller:
        service:
          type: LoadBalancer

    Чтобы указать VIP LoadBalancer при использовании MetalLB:

    apiVersion: ingress-nginx.alauda.io/v1
    kind: IngressNginx
    metadata:
      name: demo
    spec:
      controller:
        service:
          type: LoadBalancer
          annotations:
            metallb.universe.tf/loadBalancerIPs: '192.168.2.2' # Желаемый VIP
            metallb.universe.tf/address-pool: 'pool-name' # Пул адресов MetalLB

    Расширенные настройки развертывания контроллера

    Настройка сетевого режима, количества реплик, лимитов ресурсов и выбора узлов:

    apiVersion: ingress-nginx.alauda.io/v1
    kind: IngressNginx
    metadata:
      name: demo
    spec:
      controller:
        hostNetwork: false
        replicaCount: 1
        nodeSelector:
          kubernetes.io/os: linux
        resources:
          limits:
            cpu: 200m
            memory: 256Mi
          requests:
            cpu: 200m
            memory: 256Mi

    SSL Passthrough

    Включение функциональности SSL passthrough:

    CAUTION

    При SSL passthrough TLS завершается на бэкенде, поэтому функции уровня L7 (например, манипуляции заголовками запросов/ответов, WAF, перенаправление HTTP на HTTPS, некоторые потоки аутентификации) не будут применяться к такому трафику на контроллере.

    apiVersion: ingress-nginx.alauda.io/v1
    kind: IngressNginx
    metadata:
      name: demo
    spec:
      controller:
        extraArgs:
          enable-ssl-passthrough: ''

    Поддержка Dual-Stack IPv4 и IPv6

    apiVersion: ingress-nginx.alauda.io/v1
    kind: IngressNginx
    metadata:
      name: demo
    spec:
      controller:
        service:
          ipFamilyPolicy: PreferDualStack

    Additional Resources

    Поле .spec ресурса IngressNginx напрямую соответствует значениям Helm chart для Ingress Nginx. Для дополнительных параметров конфигурации обратитесь к официальной документации Ingress NGINX.

    Отличия значений по умолчанию от официального чарта

    1. По умолчанию каждый экземпляр IngressNginx создает IngressClass с именем $ns-$name и controllerValue ingress-nginx.cpaas.io/$ns-$name. Эти значения можно настроить с помощью параметров .spec.ingressClassResource.name и .spec.ingressClassResource.controllerValue.
    2. По умолчанию .spec.controller.service.type установлен в ClusterIP.
    3. По умолчанию .spec.controller.watchIngressWithoutClass установлен в true, что означает, что контроллер будет обрабатывать ресурсы Ingress, не указывающие IngressClass.