• Русский
  • Настройка маршрута 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 - Спецификация TCPRoute - Спецификация UDPRoute - Спецификация GRPCRoute - Спецификация TLSRoute

    Имена хостов

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

    Публикация на слушатель

    Правила

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

    Совпадения

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

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

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

    Пример: Если Совпадение-1 требует path=/api И header=v1, а Совпадение-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

    Фильтры

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

    Типы фильтров
    ТипМетодТипы значенийОписаниеТребования к значению
    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

    Бэкенд

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

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

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

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

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

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

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

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

    Задачи для Envoy Gateway

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