• Русский
  • Envoy Gateway Operator

    Overview

    В этом документе представлен обзор работы envoy-gateway-operator в ACP. Объясняются взаимосвязи между основными кастомными ресурсами и экземплярами времени выполнения, участвующими в Envoy Gateway, включая EnvoyGatewayCtl, GatewayClass, Gateway, EnvoyProxy, экземпляр envoy-gateway и экземпляр envoy-proxy.

    envoy-gateway-operator упаковывает исходную Helm chart envoy-gateway как Operator, что позволяет развертывать и управлять экземпляром envoy-gateway декларативно через кастомный ресурс EnvoyGatewayCtl, вместо прямого управления chart или сгенерированными ресурсами.

    В ACP 4.3 envoy-gateway-operator использует Helm chart envoy-gateway версии 1.7.0.

    Поскольку Operator поддерживается платформой, он также автоматически обновляется вместе с платформой, что снижает операционные затраты на ручное сопровождение установки Envoy Gateway.

    В этом документе также описывается, как создать EnvoyGatewayCtl — точку входа для развертывания и управления Envoy Gateway через платформу.

    После ознакомления с базовыми концепциями и создания EnvoyGatewayCtl продолжайте настройку Gateway, Route и Policy в указанном порядке, следуя документам из раздела Next Step.

    Architecture

    Следующий рабочий процесс демонстрирует, как envoy-gateway-operator, EnvoyGatewayCtl, GatewayClass, Gateway и EnvoyProxy взаимодействуют для развертывания и управления Envoy Gateway и его плоскостью данных.

    1. После установки envoy-gateway-operator и создания EnvoyGatewayCtl оператор развертывает экземпляр envoy-gateway и создает соответствующий GatewayClass. Имя GatewayClass формируется по шаблону <namespace>-<name>. В этом документе используется рекомендуемый пример по умолчанию: cpaas-default в пространстве имён envoy-gateway-operator, которое также предзаполнено в настройках страницы создания EnvoyGatewayCtl. В данном случае сгенерированный GatewayClass будет называться envoy-gateway-operator-cpaas-default.

      Каждый EnvoyGatewayCtl должен иметь уникальное сочетание namespace и имени, поэтому соответствующие имена GatewayClass также уникальны. При создании Gateway вы выбираете подходящий GatewayClass, чтобы определить, какой экземпляр envoy-gateway будет его обслуживать.

    2. При создании Gateway, ссылающегося на этот GatewayClass, экземпляр envoy-gateway берет на себя управление этим Gateway. Если Gateway ссылается на EnvoyProxy через .spec.infrastructure.parametersRef, этот EnvoyProxy используется для управления развертыванием соответствующего экземпляра envoy-proxy.

    3. Затем экземпляр envoy-gateway создает и управляет соответствующим экземпляром envoy-proxy, который служит плоскостью данных и обрабатывает входящий трафик для данного Gateway.

    4. Вы можете создавать ресурсы HTTPRoute, TCPRoute, UDPRoute, GRPCRoute или TLSRoute и прикреплять их к Gateway для определения правил сопоставления трафика и его маршрутизации к backend-сервисам. Также можно применять политики трафика, такие как ClientTrafficPolicy или BackendTrafficPolicy для более сложного поведения.

    Ниже перечислены кастомные ресурсы, участвующие в развертывании Envoy Gateway и настройке поведения трафика.

    Custom resourcesОписание
    EnvoyGatewayCtlУправляет развертыванием конкретного экземпляра envoy-gateway.

    Рекомендуется для типовых сценариев развертывать один экземпляр envoy-gateway через EnvoyGatewayCtl на кластер.

    Для продвинутых сценариев EnvoyGatewayCtl позволяет развернуть несколько экземпляров envoy-gateway в одном кластере для более строгого контроля и изоляции, например, с разными deployment mode.

    Эти ресурсы описывают семантику маршрутизации шлюза, включая то, как трафик поступает в шлюз, как запросы сопоставляются и направляются на backend, и какие политики применяются при обработке трафика.

    Custom resourcesОписание
    GatewayClassУказывает экземпляру envoy-gateway, какие ресурсы Gateway он должен обслуживать.
    GatewayОпределяет три основных компонента:
    1. Ссылка на GatewayClass — указывает GatewayClass, управляющий этим Gateway, через .spec.gatewayClassName
    2. Конфигурация слушателей (Listeners) — задает порты, имена хостов и TLS-сертификаты для обработки трафика через .spec.listeners
    3. Параметры инфраструктуры — настраивает детали развертывания, такие как количество реплик, ресурсы, ссылаясь на EnvoyProxy через .spec.infrastructure.parametersRef
    Route resourcesВключает HTTPRoute, TCPRoute, UDPRoute, GRPCRoute и TLSRoute. Эти ресурсы определяют четыре основных компонента:
    1. Наборы правил сопоставления — различные условия для сопоставления входящего трафика
    2. Назначения backend — целевые сервисы для каждого набора правил
    3. Политики трафика — настройки для каждого правила, включая повторные попытки, таймауты, редиректы и т.д.
    4. Привязка к слушателям Gateway — определяется через .spec.parentRefs для подключения маршрутов к конкретным слушателям Gateway
    PoliciesРесурсы политик расширяют возможности Gateway и Route. В Envoy Gateway доступны SecurityPolicy, BackendTLSPolicy, ClientTrafficPolicy и BackendTrafficPolicy.

    Для более подробной информации об этих стандартных ресурсах Gateway API смотрите разделы Gateway API Concepts и Configure GatewayAPI Policy.

    Эти ресурсы используются для управления развертыванием Envoy Gateway и его плоскости данных. В этом разделе описан кастомный ресурс, связанный с развертыванием, используемый в данном документе.

    Custom resourcesОписание
    EnvoyProxyОпределяет конфигурацию экземпляров envoy-proxy, включая количество реплик, ресурсы и ограничения по планированию

    В рекомендуемом шаблоне развертывания каждый Gateway ссылается на свой собственный выделенный EnvoyProxy через .spec.infrastructure.parametersRef. При создании Gateway через Web Console с использованием GatewayClass, созданного EnvoyGatewayCtl, консоль автоматически создает сопутствующий ресурс EnvoyProxy с тем же именем и namespace. Такая однозначная связь позволяет управлять конфигурацией развертывания Gateway, например количеством реплик, ресурсами и планированием, обновляя соответствующий ресурс EnvoyProxy.

    Install Envoy Gateway via Envoy Gateway Operator

    Prerequisites

    Пожалуйста, убедитесь, что вы ознакомились с разделами Overview и Architecture перед продолжением.

    Installation

    Step 1: Install Envoy Gateway Operator

    1. Перейдите в Administrator -> Marketplace -> OperatorHub
    2. Найдите Alauda build of Envoy Gateway в категории Networking и нажмите Install

    Следующие значения по умолчанию соответствуют рекомендуемому примеру, используемому в этом документе.

    1. Перейдите в Administrator -> Marketplace -> OperatorHub

    2. Найдите Alauda build of Envoy Gateway в категории Networking, затем откройте страницу с деталями.

    3. Перейдите на вкладку All Instances

    4. Нажмите Create, в появившемся диалоговом окне найдите раздел Instance Type для EnvoyGatewayCtl и нажмите Create

    5. На странице Create EnvoyGatewayCtl отображаются следующие параметры конфигурации:

      ПолеЗначение по умолчаниюОписаниеПуть в YAML
      Namecpaas-defaultИмя экземпляра Envoy Gateway.metadata.name
      Namespaceenvoy-gateway-operatorПространство имён экземпляра Envoy Gateway. В каждом namespace может быть только один EnvoyGatewayCtl..metadata.namespace
      Replica1Количество реплик развертывания Envoy Gateway.spec.deployment.replicas
      Deploy Ns ModeControllerNamespaceОпределяет, устанавливается ли развертывание шлюза в namespace шлюза или в namespace контроллера. Подробнее см. deployment mode.spec.config.envoyGateway.provider.kubernetes.deploy.type
      Resources1C1GЗапросы и лимиты ресурсов для развертывания Envoy Gateway.spec.deployment.resources

      Рекомендация: Используйте значения по умолчанию для типовых развертываний. Нажмите Create для продолжения.

    Configuration Via YAML

    В качестве альтернативы Web Console вы можете создать EnvoyGatewayCtl, применив YAML.

    Конфигурация по умолчанию:

    apiVersion: envoy-gateway.alauda.io/v1
    kind: EnvoyGatewayCtl
    metadata:
      name: cpaas-default
      namespace: envoy-gateway-operator
    spec:
      config:
        envoyGateway:
          provider:
            kubernetes:
              deploy:
                type: ControllerNamespace
            type: Kubernetes
      deployment:
        replicas: 1
        resources:
          limits:
            cpu: '1'
            memory: 1024Mi
          requests:
            cpu: 100m
            memory: 256Mi

    Advanced Config Via EnvoyGatewayCtl

    EnvoyGatewayCtl — это кастомный ресурс, используемый для настройки экземпляра envoy-gateway. Его spec напрямую соответствует значениям Helm chart envoy-gateway. При необходимости изменить EnvoyGatewayCtl обращайтесь к документации по значениям upstream chart для доступных опций конфигурации.

    Для подробной информации о доступных параметрах конфигурации смотрите envoy-gateway-chart-values.

    DANGER

    Настраивайте экземпляр envoy-gateway только через ресурс EnvoyGatewayCtl. Не изменяйте напрямую сгенерированные ресурсы, такие как ConfigMaps, Deployments, так как эти изменения могут быть потеряны при обновлениях или реконсилиации.

    Example: Enable Backend Routing

    Пример ниже показывает, как включить маршрутизацию на backend в спецификации EnvoyGatewayCtl:

    apiVersion: envoy-gateway.alauda.io/v1
    kind: EnvoyGatewayCtl
    metadata:
      name: cpaas-default
      namespace: envoy-gateway-operator
    spec:
      config:
        envoyGateway:
          extensionApis:
            enableBackend: true # Включить маршрутизацию на backend в EnvoyGatewayCtl, а не в configmap envoygateway
          provider:
            kubernetes:
              deploy:
                type: ControllerNamespace
            type: Kubernetes
      deployment:
        replicas: 1
        resources:
          limits:
            cpu: '1'
            memory: 1024Mi
          requests:
            cpu: 100m
            memory: 256Mi

    Next Step

    После того как оператор Envoy Gateway и EnvoyGatewayCtl готовы, продолжайте выполнение следующих задач в указанном порядке: