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

    Понимание Envoy Gateway

    Терминология

    • Envoy Gateway — это проект с открытым исходным кодом для управления Envoy Proxy в качестве автономного или Kubernetes-базированного шлюза приложений.
    • Gateway API — это официальная коллекция кастомных ресурсов Kubernetes для объявления правил маршрутизации и политик управления трафиком. Envoy Gateway является одной из реализаций спецификации Gateway API.
    • Gateway или gatewayapi/gateway — это CR, определённый спецификацией Gateway API.
    • envoy-gateway instance — это экземпляр Envoy Gateway и все связанные с ним ресурсы, работающие в кластере Kubernetes.
    • envoy-gateway-operator — это helm-operator оболочка вокруг Envoy Gateway, использующая EnvoyGatewayCtl для упрощения развертывания и управления envoy-gateway instance.
    • EnvoyProxy — это CR, определённый спецификацией Envoy Gateway, используемый envoy-gateway instance для управления envoy-proxy instance.
    • envoy-proxy instance — это запущенный деплоймент, который обрабатывает входящий трафик.

    Архитектура

    1. После установки envoy-gateway-operator он отслеживает EnvoyGatewayCtl и разворачивает envoy-gateway instance вместе с дефолтным GatewayClass.

    2. Когда вы создаёте Gateway, который ссылается на этот GatewayClass и указывает конфигурацию EnvoyProxy, envoy-gateway instance разворачивает envoy-proxy instance для обработки входящего трафика.

    3. Затем можно создавать ресурсы HTTP, TCP или UDP Route и прикреплять их к этому Gateway для определения политик маршрутизации трафика.

    4. Для более детальной настройки можно создавать ресурсы ClientTrafficPolicy или BackendTrafficPolicy и прикреплять их к маршрутам для реализации расширенных функций управления трафиком.

    Связанные кастомные ресурсы

    Envoy Gateway и envoy-gateway-operator вводят дополнительные кастомные ресурсы, которые в сочетании с кастомными ресурсами Gateway API обеспечивают комплексное управление всеми аспектами развертывания шлюза и конфигурациями политик маршрутизации.

    Кастомные ресурсы, связанные с Gateway API

    Кастомные ресурсыОписание
    GatewayClassenvoy-gateway instance знает, какие GatewayClass он управляет, и, следовательно, какие Gateways он должен контролировать.
    GatewayОпределяет три основных компонента:
    1. Ссылка на GatewayClass — ссылается на GatewayClass, который контролирует этот Gateway через .spec.gatewayClassName
    2. Конфигурация слушателей (Listeners) — указывает, какие порты, имена хостов и TLS-сертификаты использовать для обработки трафика через .spec.listeners
    3. Параметры инфраструктуры — настраивает детали развертывания, такие как количество реплик, ресурсы, ссылаясь на EnvoyProxy через .spec.infrastructure.parametersRef
    HTTP/TCP/UDP RouteОпределяет четыре основных компонента:
    1. Несколько наборов правил сопоставления — различные условия для сопоставления входящего трафика
    2. Назначения бэкендов — целевые сервисы для каждого набора правил
    3. Политики трафика — конфигурации для каждого правила, включая повторные попытки, таймауты, перенаправления и т.д.
    4. Привязка к слушателям Gateway — определяется через .spec.parentRefs для подключения маршрутов к конкретным слушателям Gateway

    Для получения дополнительной информации об этих ресурсах, пожалуйста, обратитесь к разделу Gateway API Concepts.

    Кастомные ресурсы, связанные с Envoy Gateway

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

    В рекомендуемой схеме развертывания каждый Gateway использует .spec.infrastructure.parametersRef для ссылки на свой собственный выделенный ресурс EnvoyProxy.

    Это отображение один к одному позволяет пользователям управлять конфигурацией развертывания Gateway (реплики, ресурсы, планирование и т.д.) путём изменения соответствующего ресурса EnvoyProxy.

    Кастомные ресурсы, связанные с оператором

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

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

    Однако ресурс EnvoyGatewayCtl позволяет развернуть несколько envoy-gateway instance в одном кластере, обеспечивая более гибкое управление и изоляцию для продвинутых сценариев, таких как различные режимы развертывания.

    Установка Envoy Gateway через Envoy Gateway Operator

    Предварительные требования

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

    Обзор

    envoy-gateway-operator предоставляется для облегчения продвинутого управления развертываниями envoy-gateway instance.

    Операционная архитектура функционирует следующим образом:

    envoy-gateway-operator непрерывно отслеживает EnvoyGatewayCtl и автоматически создаёт соответствующие развертывания envoy-gateway instance, сервисы и прочее.

    Установка

    Шаг 1: Установка Envoy Gateway Operator

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

    Шаг 2: Создание дефолтного EnvoyGatewayCtl

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

    2. Найдите Alauda build of Envoy Gateway в категории Networking, откройте его.

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

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

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

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

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

    Конфигурация через YAML

    Вы также можете применить 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:
        resources:
          limits:
            cpu: '1'
            memory: 1024Mi
          requests:
            cpu: 100m
            memory: 256Mi

    Каждый EnvoyGatewayCtl создаст GatewayClass с именем в формате $NS-$NAME, например envoy-gateway-operator-cpaas-default.

    Расширенная конфигурация через EnvoyGatewayCtl

    EnvoyGatewayCtl по сути является Helm-чартом envoy-gateway, обёрнутым с помощью helm-operator. Его spec соответствует значениям чарта envoy-gateway, что позволяет настраивать различные глобальные функции Envoy Gateway из одного источника.

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

    DANGER

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

    Маршрутизация бэкенда

    Например, вы можете настроить маршрутизацию бэкенда в spec EnvoyGatewayCtl:

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