• Русский
  • Настройка политики GatewayAPI

    Обзор

    В этом документе объясняется, как настроить ресурсы политики после того, как ресурсы Gateway и Route готовы. Политики используют паттерн прикрепления политики через .spec.targetRefs для добавления дополнительного поведения трафика, безопасности и бэкенда к поддерживаемым ресурсам.

    В рекомендуемом рабочем процессе этот документ следует после Настройка маршрута GatewayAPI.

    Envoy Gateway в настоящее время предоставляет четыре типа политик: SecurityPolicy, BackendTLSPolicy, ClientTrafficPolicy и BackendTrafficPolicy.

    Требования

    Пожалуйста, убедитесь, что вы выполнили следующие шаги перед продолжением:

    1. Ознакомились с Настройкой GatewayAPI Gateway и Настройкой маршрута GatewayAPI
    2. Создали целевой ресурс, к которому будет прикреплена политика, например Gateway, Route или Service

    Основы прикрепления политики

    Политики прикрепляются к другим ресурсам через .spec.targetRefs.

    По умолчанию политика может быть прикреплена только к ресурсам в том же namespace.

    Для целей Gateway можно использовать sectionName для указания конкретного слушателя, если тип политики это поддерживает. Для целей Service sectionName относится к имени порта Service.

    Сводка прикрепления политики

    Тип политикиНазначениеПоддержка в Web ConsoleGatewayHTTPRouteGRPCRouteTCPRouteUDPRouteTLSRouteService
    SecurityPolicyАутентификация, авторизация, CORS и другие функции безопасностиAPI Key Auth, CORS✅ (имя слушателя / ALL)
    BackendTLSPolicyНастройка TLS между Envoy и бэкенд-сервисамиПоддерживается✅ (имя порта / ALL)
    ClientTrafficPolicyТаймауты и поведение соединений на стороне клиентаНастройки таймаутов✅ (имя слушателя / ALL)
    BackendTrafficPolicyТаймауты и поведение соединений на стороне бэкендаНастройки таймаутов✅ (имя слушателя / ALL)

    sectionName используется для указания конкретного слушателя на Gateway или конкретного порта на Service. Если опущено или установлено в ALL, политика применяется ко всем слушателям или портам.

    Создание политик в Web Console

    Все типы политик создаются из одного пункта:

    1. Перейдите в Alauda Container Platform -> Networking -> Gateway -> Policies
    2. Выберите нужное значение в выпадающем списке Policy Type
    3. Нажмите кнопку Create Policy

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

    SecurityPolicy

    Настройка через Web Console

    Общие поля (общие для всех политик):

    ПолеОписаниеПуть в YAML
    Policy TypeТип создаваемой политики.kind
    Attach ToРесурсы Gateway API, к которым применяется эта политика. Поддерживаются Gateway, HTTPRoute и GRPCRoute. При прикреплении к Gateway можно указать имя слушателя или выбрать ALL слушателей..spec.targetRefs

    Специфичные поля SecurityPolicy:

    ПолеОписаниеПуть в YAML
    Authorization TypeМетод аутентификации/авторизации. Поддерживает множественный выбор: API Key Authentication, CORS Configuration.spec.apiKeyAuth, .spec.cors

    Аутентификация по API Key

    ПолеОписаниеПуть в YAML
    SecretsKubernetes-секреты, содержащие API ключи для аутентификации.spec.apiKeyAuth.credentialRefs
    Extract FromУказывает, откуда извлекать API ключ (HTTP заголовки или параметры запроса).spec.apiKeyAuth.extractFrom

    Конфигурация CORS

    ПолеОписаниеПуть в YAML
    Allow OriginsСписок разрешённых источников для CORS-запросов.spec.cors.allowOrigins
    Allow MethodsСписок разрешённых HTTP методов.spec.cors.allowMethods
    Allow HeadersСписок разрешённых заголовков в CORS-запросах.spec.cors.allowHeaders
    Expose HeadersСписок заголовков, доступных клиенту в ответе.spec.cors.exposeHeaders
    Max AgeВремя кэширования preflight-ответа CORS.spec.cors.maxAge
    Allow CredentialsРазрешены ли учётные данные в CORS-запросах.spec.cors.allowCredentials

    Настройка через YAML

    apiVersion: gateway.envoyproxy.io/v1alpha1
    kind: SecurityPolicy
    metadata:
      name: demo-security-policy
      namespace: demo
    spec:
      targetRefs:
        - group: gateway.networking.k8s.io
          kind: HTTPRoute
          name: demo
      apiKeyAuth:
        credentialRefs:
          - group: ""
            kind: Secret
            name: demo
            namespace: demo
        extractFrom:
          - headers:
              - authorization
      cors:
        allowOrigins:
          - "https://example.com"
        allowMethods:
          - GET
          - POST
        allowHeaders:
          - "Content-Type"
        exposeHeaders:
          - "X-Custom-Header"
        maxAge: "1h"
        allowCredentials: true

    Справка

    SecurityPolicy используется для настройки аутентификации, авторизации и других функций безопасности для вашего Gateway и маршрутов. Она предоставляет декларативный способ защиты сервисов путём проверки входящих запросов до того, как они достигнут ваших бэкенд-приложений.

                Gateway            Route
                   |                 |
                   +-- SecurityPolicy-+
    Client ---> Envoy Listener --------------------> Backend Service

    Возможности

    • Аутентификация: Проверка идентичности клиентов с помощью различных методов (API Key, JWT, OIDC, Basic Auth)
    • Авторизация: Контроль доступа к ресурсам на основе проверенных учётных данных
    • Конфигурация CORS: Управление политиками Cross-Origin Resource Sharing

    Как это работает

    1. Создайте SecurityPolicy с нужными правилами аутентификации/авторизации
    2. Прикрепите её к конкретному Gateway, HTTPRoute или GRPCRoute
    3. Envoy Gateway проверяет входящие запросы согласно политике
    4. Валидные запросы перенаправляются к бэкенд-сервисам; невалидные отклоняются с соответствующими HTTP статусами

    Примечания

    1. В веб-консоли в настоящее время поддерживается настройка API Key Authentication и CORS. Для других методов аутентификации и расширенных функций безопасности необходимо использовать YAML-конфигурацию.
    2. Каждый маршрут может быть связан только с одной SecurityPolicy.
    3. Если SecurityPolicy ссылается на секрет без значений, все запросы к прикреплённому маршруту будут отклонены с кодом 401 Unauthorized.
    4. В веб-консоли по умолчанию поле Extract From установлено в header, а поле Header Name — в authorization.
    5. Вы можете просмотреть, какие политики прикреплены к маршруту, перейдя на вкладку топологии маршрута в веб-консоли.

    Официальная документация

    BackendTLSPolicy

    Настройка через Web Console

    Общие поля:

    ПолеОписаниеПуть в YAML
    Policy TypeТип создаваемой политики.kind
    Attach ToService, к которому применяется эта политика. Необходимо указать имя Service и имя порта (sectionName)..spec.targetRefs

    Специфичные поля BackendTLSPolicy:

    ПолеОписаниеПуть в YAML
    HostnameОбязательно. SNI (Server Name Indication), используемый при подключении Envoy к бэкенд-сервису.spec.validation.hostname
    Subject Alternative NamesНеобязательно. Используется для валидации HTTPS-ответа бэкенда. Если не указано, по умолчанию используется значение hostname..spec.validation.subjectAltNames
    Validation TypeМетод валидации TLS-сертификатов бэкенда. Опции: CACertificateRefs (использовать пользовательские CA-сертификаты), WellKnownCACertificates (использовать системные CA).spec.validation

    Конфигурация CACertificateRefs:

    ПолеОписаниеПуть в YAML
    CA Certificate SecretKubernetes-секрет, содержащий CA-сертификат. Секрет должен содержать ключ ca.crt с PEM-кодированными TLS-сертификатами..spec.validation.cACertificateRefs
    NOTE

    При создании или выборе секрета с CA-сертификатом:

    • Тип секрета должен подходить для CA-сертификатов
    • Ключ должен быть ca.crt
    • Можно импортировать файл сертификата, который должен начинаться с -----BEGIN CERTIFICATE----- и заканчиваться -----END CERTIFICATE-----
    • При импорте некорректного формата сертификата будет показано сообщение об ошибке "must contain PEM-encoded TLS certificates"
    • При выборе существующего секрета без ключа ca.crt будет показано сообщение об ошибке "must have ca.crt key"

    Настройка через YAML

    apiVersion: gateway.networking.k8s.io/v1alpha2
    kind: BackendTLSPolicy
    metadata:
      name: demo-backend-tls-policy
      namespace: demo
    spec:
      targetRefs:
        - group: ""
          kind: Service
          name: demo-backend
          namespace: demo
          sectionName: https-port
      validation:
        hostname: backend.example.com
        subjectAltNames:
          - backend.example.com
        cACertificateRefs:
          - group: ""
            kind: Secret
            name: backend-ca
            namespace: demo

    Справка

    BackendTLSPolicy управляет настройками TLS между Envoy Gateway и бэкенд-сервисами. Она позволяет настроить:

                                    Service
                                      |
                                      +-- BackendTLSPolicy
    Client ---> Envoy Listener --------------------> Backend Service Port
                                      применяется здесь ^
    • SNI (Server Name Indication): имя хоста, используемое при установлении TLS-соединений с бэкендами
    • Валидация сертификатов: способ проверки сертификатов серверов бэкенда
    • CA-сертификаты: пользовательские CA-сертификаты для проверки сертификатов бэкенда

    Возможности

    • Настройка TLS для соединений с бэкенд-сервисами
    • Поддержка пользовательских CA-сертификатов или системных известных CA-сертификатов
    • Конфигурация SNI для корректного TLS-рукопожатия

    Примечания

    1. sectionName в targetRefs соответствует имени порта Service.
    2. При использовании WellKnownCACertificates для валидации используются системные CA-сертификаты по умолчанию.
    3. Поле hostname обязательно и используется как значение SNI при подключении Envoy к бэкенду.

    Официальная документация

    ClientTrafficPolicy

    Настройка через Web Console

    Общие поля:

    ПолеОписаниеПуть в YAML
    Policy TypeТип создаваемой политики.kind
    Attach ToGateway, к которому применяется эта политика. Можно указать имя слушателя или выбрать ALL слушателей..spec.targetRefs

    Настройка таймаутов (опции):

    ПолеОписаниеПуть в YAML
    TCP Idle TimeoutТаймаут простоя TCP-соединения. Время простоя определяется как период, в течение которого не передаются данные ни в одном из направлений (upstream или downstream). По умолчанию: 1 час..spec.settings.timeout.tcp.idleTimeout
    HTTP Request Received TimeoutВремя ожидания Envoy полного получения запроса. Таймер запускается при начале запроса и останавливается при отправке последнего байта запроса upstream или начале ответа. По умолчанию: 1 час..spec.settings.timeout.http.requestReceivedTimeout
    HTTP Idle TimeoutТаймаут простоя HTTP-соединения. Время простоя определяется как период, в течение которого в соединении нет активных запросов. По умолчанию: неограничено..spec.settings.timeout.http.idleTimeout
    HTTP Stream Idle TimeoutТаймаут простоя потока определяет время, в течение которого поток может существовать без активности upstream или downstream. По умолчанию: 5 минут..spec.settings.timeout.http.streamIdleTimeout

    Настройка через YAML

    apiVersion: gateway.envoyproxy.io/v1alpha1
    kind: ClientTrafficPolicy
    metadata:
      name: demo-client-traffic-policy
      namespace: demo
    spec:
      targetRefs:
        - group: gateway.networking.k8s.io
          kind: Gateway
          name: demo
          sectionName: https
      settings:
        timeout:
          tcp:
            idleTimeout: "30m"
          http:
            requestReceivedTimeout: "60s"
            idleTimeout: "5m"
            streamIdleTimeout: "30s"

    Справка

    ClientTrafficPolicy управляет поведением соединений от клиентов к Envoy Gateway. Она предоставляет тонкую настройку:

                Gateway
                   |
                   +-- ClientTrafficPolicy
    Client ---> Envoy Listener --------------------> Backend Service
              применяется на стороне клиента ^
    • Настройки TCP: таймауты и параметры keepalive на уровне соединения
    • Настройки HTTP: таймауты запросов/ответов и поведение HTTP-протокола

    Возможности

    • Настройка таймаутов простоя TCP-соединений
    • Контроль таймаутов получения HTTP-запросов
    • Установка таймаутов простоя HTTP-соединений
    • Настройка таймаутов простоя HTTP-потоков

    Примечания

    1. Значения таймаутов задаются в виде строк с длительностью (например, "30s", "5m", "1h").

    Официальная документация

    BackendTrafficPolicy

    Настройка через Web Console

    Общие поля:

    ПолеОписаниеПуть в YAML
    Policy TypeТип создаваемой политики.kind
    Attach ToРесурсы Gateway API, к которым применяется эта политика. Поддерживаются Gateway, HTTPRoute, GRPCRoute, TCPRoute, UDPRoute и TLSRoute. При прикреплении к Gateway можно указать имя слушателя или выбрать ALL слушателей. В YAML это настраивается через sectionName в .spec.targetRefs..spec.targetRefs

    Настройка таймаутов (опции):

    ПолеОписаниеПуть в YAML
    TCP Connection TimeoutТаймаут установления сетевого соединения, включая TCP и TLS рукопожатия. По умолчанию: 10 секунд..spec.settings.timeout.tcp.connectionTimeout
    HTTP Connection Idle TimeoutТаймаут простоя HTTP-соединения. Время простоя определяется как период, в течение которого в соединении нет активных запросов. По умолчанию: 1 час..spec.settings.timeout.http.connectionIdleTimeout
    HTTP Max Connection DurationМаксимальная длительность HTTP-соединения. По умолчанию: неограничено..spec.settings.timeout.http.maxConnectionDuration
    HTTP Request TimeoutВремя до получения полного ответа от upstream. По умолчанию: 15 секунд. Поддерживается установка в неограниченное значение..spec.settings.timeout.http.requestTimeout

    Настройка через YAML

    apiVersion: gateway.envoyproxy.io/v1alpha1
    kind: BackendTrafficPolicy
    metadata:
      name: demo-backend-traffic-policy
      namespace: demo
    spec:
      targetRefs:
        - group: gateway.networking.k8s.io
          kind: HTTPRoute
          name: demo
      settings:
        timeout:
          tcp:
            connectionTimeout: "5s"
          http:
            connectionIdleTimeout: "30m"
            maxConnectionDuration: "1h"
            requestTimeout: "30s"

    Справка

    BackendTrafficPolicy управляет поведением соединений от Envoy Gateway к бэкенд-сервисам. Она предоставляет тонкую настройку:

                Gateway / Route
                      |
                      +-- BackendTrafficPolicy
    Client ---> Envoy Listener --------------------> Backend Service
                                      применяется здесь ^
    • Настройки TCP: таймауты установления соединений
    • Настройки HTTP: длительности соединений, таймауты простоя и таймауты запросов

    Возможности

    • Настройка таймаутов установления TCP-соединений
    • Контроль таймаутов простоя HTTP-соединений
    • Установка максимальной длительности HTTP-соединений
    • Настройка таймаутов HTTP-запросов

    Примечания

    1. Значения таймаутов задаются в виде строк с длительностью (например, "30s", "5m", "1h").
    2. Поле requestTimeout поддерживает установку значения "unlimited" для отключения таймаута.

    Официальная документация

    Связанные задачи

    После прикрепления политик продолжайте с Задачами для Envoy Gateway для получения дополнительных примеров эксплуатации и задач по расширенной настройке.