• Русский
  • 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
    NamespaceNamespace экземпляра 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 каких namespace обрабатываются.spec.controller.scope.namespaceSelector, см. ingress-sharding

    Configuration Via YAML

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

    Ingress Sharding

    По умолчанию Ingress Nginx обрабатывает ресурсы Ingress во всех namespace для ingress, которые либо явно указывают имя своего IngressClass, либо не указывают IngressClass вовсе. Вы можете использовать .controller.scope.namespaceSelector, чтобы ограничить экземпляр определёнными namespace. Например, следующий ресурс IngressNginx demo-scope обрабатывает ingress только в namespace с меткой 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 требуют интеграции с внешним балансировщиком нагрузки (облачный LB или 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.controller.ingressClassResource.name и .spec.controller.ingressClassResource.controllerValue.
    2. По умолчанию .spec.controller.service.type установлен в ClusterIP.
    3. По умолчанию .spec.controller.watchIngressWithoutClass установлен в true, что означает, что контроллер будет обрабатывать ресурсы Ingress, не указывающие IngressClass.