• Русский
  • Настройка маршрута GatewayAPI

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

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

    Настройка через веб-консоль

    1. Перейдите в Alauda Container Platform -> Networking -> Routes
    2. Нажмите кнопку Create Route

    Создание HTTPRoute

    ПолеОписаниеПуть в YAML
    Publish to Listenerпубликация на слушатель.spec.parentRefs
    Hostnamesимена хостов.spec.hostnames
    Matchesсовпадения.spec.rules[].matches
    Filtersфильтры.spec.rules[].filters
    Backend Instanceбэкенд.spec.rules[].backendRefs
    Session Affinityсессионная аффинность.spec.rules[].sessionPersistence

    Создание TCP/UDP маршрута

    ПолеОписаниеПуть в YAML
    Publish to Listenerпубликация на слушатель.spec.parentRefs
    Backend Instanceбэкенд.spec.rules[].backendRefs

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

    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: demo-443
      namespace: demo
    spec:
      hostnames:
        - example.com
      parentRefs:
        - group: gateway.networking.k8s.io
          kind: Gateway
          name: demo
          sectionName: https
      rules:
        - backendRefs:
            - group: ''
              kind: Service
              name: echo-resty
              namespace: demo-space
              port: 80
              weight: 100
          filters: [] 
          matches:
            - path:
                type: Exact
                value: /a
          sessionPersistence:
            type: Cookie
            sessionName: a
    ---
    apiVersion: gateway.networking.k8s.io/v1alpha2
    kind: TCPRoute
    metadata:
      name: tcp
      namespace: demo-space
    spec:
      parentRefs:
        - group: gateway.networking.k8s.io
          kind: Gateway
          name: demo
          sectionName: tcp
      rules:
        - backendRefs:
            - group: ''
              kind: Service
              name: echo-resty
              port: 80
              weight: 100
    ---
    apiVersion: gateway.networking.k8s.io/v1alpha2
    kind: UDPRoute
    metadata:
      name: udp
      namespace: demo
    spec:
      parentRefs:
        - group: gateway.networking.k8s.io
          kind: Gateway
          name: demo
          namespace: demo
          sectionName: udp
      rules:
        - backendRefs:
            - group: ''
              kind: Service
              name: echo-resty
              namespace: demo
              port: 53
              weight: 100

    Введение

    Каждый маршрут — это CR, определённый спецификацией GatewayAPI. Для подробной информации о полях и параметрах настройки каждого типа маршрута, пожалуйста, обратитесь к официальной документации: - HTTPRoute specification - TCPRoute specification - UDPRoute specification - GRPCRoute specification - TLSRoute specification

    Hostnames

    Поле hostnames в маршруте представляет собой массив строк.
    Оно следует правилам пересечения имён хостов.

    Publish to Listener

    Rules

    Каждый маршрут может содержать несколько правил. Каждое правило состоит из следующих компонентов:

    Matches

    Определяет условия, которые должны быть выполнены, чтобы запрос был маршрутизирован этим правилом.

    Правило может содержать несколько совпадений:

    • Каждое совпадение состоит из нескольких условий (например, путь, заголовки, параметры запроса, метод)
    • Условия внутри одного совпадения используют логику AND (все должны быть выполнены)
    • Совпадения между собой используют логику OR (достаточно выполнить любое совпадение)

    Пример: Если Match-1 требует path=/api И header=v1, а Match-2 требует query=test, то запрос будет маршрутизирован, если он соответствует либо (path=/api И header=v1), либо (query=test).

    Типы условий совпадения
    ОбъектМетодТипы значенийОписаниеТребования к значению
    Path
    Exactпуть (строка)Совпадение с точным URL-путём с учётом регистра. Это означает, что точное совпадение пути /abc сработает только для запросов к /abc, НЕ для /abc/, /Abc или /abcd.Должен начинаться с /, без последовательных //.
    PathPrefixпуть (строка)Совпадение по префиксу URL-пути, разделённому по /. Совпадение чувствительно к регистру и происходит поэлементно. Например, пути /abc, /abc/ и /abc/def совпадут с префиксом /abc, а путь /abcd — нет.Должен начинаться с /, без последовательных //.
    RegularExpressionпуть (строка)Регулярное выражение: движок RE2.например, /api/v1/.*.
    Header
    Exactимя (ключ заголовка) + значениеТочное совпадение значения заголовка.
    RegularExpressionимя (ключ заголовка) + значениеРегулярное выражение: движок RE2.
    QueryParam
    Exactимя (ключ параметра) + значениеТочное совпадение значения параметра запроса.Значение параметра: 1-1024 символа
    RegularExpressionимя (ключ параметра) + значениеРегулярное выражение: движок RE2.
    Method-имя методаСовпадение HTTP-метода.GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH
    Ссылки на условия совпадения
    Тип условияОфициальная документация
    PathHTTPPathMatch
    HeadersHTTPHeaderMatch
    QueryParamsHTTPQueryParamMatch
    MethodHTTPMethod

    Filters

    Определяет преобразования или модификации, применяемые к запросам/ответам.

    Типы фильтров
    ТипМетодТипы значенийОписаниеТребования к значению
    RequestHeaderModifierSetимя (строка) + значение (строка)Перезаписывает заголовок запроса с указанным именем и значениемМаксимум 16 элементов, значение: 1-4096 символов
    Addимя (строка) + значение (строка)Добавляет заголовок к запросу, дописывая к существующим значениямМаксимум 16 элементов, значение: 1-4096 символов
    Remove[]stringУдаляет указанные заголовки из запроса (без учёта регистра)Максимум 16 элементов
    ResponseHeaderModifierSetимя (строка) + значение (строка)Перезаписывает заголовок ответа с указанным именем и значениемМаксимум 16 элементов, значение: 1-4096 символов
    Addимя (строка) + значение (строка)Добавляет заголовок к ответу, дописывая к существующим значениямМаксимум 16 элементов, значение: 1-4096 символов
    Remove[]stringУдаляет указанные заголовки из ответа (без учёта регистра)Максимум 16 элементов
    RequestRedirectSchemeстрокаСхема для заголовка Location (http/https)Необязательно, enum: http|https
    HostnamePreciseHostnameИмя хоста для заголовка LocationНеобязательно
    ReplaceFullPathстрокаЗамена всего пути запросаНеобязательно, максимум 1024 символа
    ReplacePrefixMatchстрокаЗамена совпадающего префикса путиНеобязательно, максимум 1024 символа, только с PathPrefix
    PortPortNumberПорт для заголовка LocationНеобязательно, диапазон: 1-65535
    StatusCodeintHTTP статус перенаправленияНеобязательно, по умолчанию: 302, enum: 301|302
    URLRewriteHostnamePreciseHostnameИмя хоста для переписывания в запросеНеобязательно
    ReplaceFullPathстрокаЗамена всего пути запросаНеобязательно, максимум 1024 символа
    ReplacePrefixMatchстрокаЗамена совпадающего префикса путиНеобязательно, максимум 1024 символа, только с PathPrefix
    CORSAllowOrigins[]stringСписок разрешённых источников для CORS-запросовНеобязательно
    AllowMethods[]HTTPMethodСписок разрешённых HTTP-методовНеобязательно, например, GET, POST, PUT
    AllowHeaders[]stringСписок разрешённых заголовков в CORS-запросахНеобязательно
    ExposeHeaders[]stringСписок заголовков, доступных клиенту в ответеНеобязательно
    MaxAgeDurationВремя кэширования для предварительного CORS-ответаНеобязательно
    AllowCredentialsboolРазрешены ли учётные данные в CORS-запросахНеобязательно

    Примечания:

    • RequestRedirect и URLRewrite не могут использоваться одновременно в одном правиле
    • ReplacePrefixMatch совместим только с PathPrefix в HTTPRouteMatch
    • Имена заголовков нечувствительны к регистру согласно RFC 7230
    • Несколько значений одного заголовка должны использовать формат с разделением запятыми согласно RFC 7230
    Ссылки на фильтры
    Тип фильтраОфициальная документация
    RequestHeaderModifierHTTPHeaderFilter
    ResponseHeaderModifierHTTPHeaderFilter
    RequestRedirectHTTPRequestRedirectFilter
    URLRewriteHTTPURLRewriteFilter
    CORSHTTPCORSFilter
    RequestMirrorHTTPRequestMirrorFilter
    HTTPExternalAuthFilterHTTPExternalAuthFilter

    Backend

    Определяет целевой сервис(ы), на которые должны перенаправляться подходящие запросы.

    Каждый сервис может иметь поле weight для указания доли трафика, направляемой на этот сервис.

    Расширенные настройки правил HTTPRoute

    Правила HTTPRoute поддерживают дополнительные параметры конфигурации, такие как политики повторных попыток, таймауты и другие параметры управления трафиком.

    Таймауты
    ПолеСпецификация
    .spec.rules[].timeoutsHTTPRouteTimeouts
    Повторные попытки
    ПолеСпецификация
    .spec.rules[].retryHTTPRouteRetry
    Сессионная аффинность

    Настраивает параметры сессионной аффинности, чтобы обеспечить маршрутизацию запросов от одного клиента к одному и тому же бэкенду.

    ПолеСпецификация
    .spec.rules[].sessionPersistenceSessionPersistence

    Следующий шаг

    Задачи для Envoy Gateway

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