Маршруты Gateway API

Маршрутизация трафика через HTTPRoute и GRPCRoute.

Маршруты Gateway API описывают логику маршрутизации: привязку к Gateway, правила совпадения запросов и backend-сервисы. Управление доступно в неймспейсе кластера.

Поддерживаемые типы маршрутов:

Тип API Назначение
HTTPRoute gateway.networking.k8s.io/v1 HTTP/HTTPS-маршрутизация
GRPCRoute gateway.networking.k8s.io/v1 gRPC-маршрутизация

Где настраивать:

  • неймспейс - раздел СетиМаршруты.
  • Через кастомные ресурсы: неймспейс → раздел АдминистрированиеКастомные ресурсы → API-группа gateway.networking.k8s.ioHTTPRoute или GRPCRoute.

Общий обзор Gateway API см. Gateway API. Для классической публикации через Ingress см. Как опубликовать приложение.

На странице Маршруты отображается список созданных маршрутов (HTTPRoute, GRPCRoute) в неймспейсе.

Скриншот: список маршрутов

Список маршрутов Gateway API


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

На странице Маршруты нажмите + Добавить Маршрут и выберите тип маршрута: HTTP, GRPC. На открывшейся странице заполните:

  • Имя — обязательное, уникальное в пределах неймспейса; при редактировании не изменяется.
  • Лейблы и Аннотации — необязательно.
Скриншот: выбор типа маршрута

Выбор типа маршрута

Спецификация объекта

Маршрут должен быть привязан минимум к одному Gateway. Нажмите +, чтобы выбрать Gateway из списка доступных. При необходимости выберите имя обработчика.

  1. Список доступных Gateways зависит от неймспейса маршрута и настроек Разрешенные маршруты из неймспейсов в обработчиках Gateway:
  • Неймспейс маршрута и Gateway совпадает — выберите имя Gateway и имя обработчика;
Скриншот: добавление Gateway из того же неймспейса

Добавление Gateway из того же неймспейса

  • Gateway из другого неймспейса — список доступных Gateway для выбора определяется, если обработчик Gateway разрешает привязку маршрутов из всех неймспейсов (ALL) и/или лейблы неймспейса маршрута соответствуют селектору (Selector) неймспейсов в обработчике.
Скриншот: добавление Gateway из другого неймспейса

Добавление Gateway из другого неймспейса

  1. Hosts (необязательно) - имена хостов (hostnames), которые должны совпадать с заголовком запроса для выбора этого маршрута. Если hostname указан и в обработчике, и в маршруте, должно быть как минимум одно пересекающееся имя для прикрепления к обработчику.
Пример соответствия hostnames
hostname в Listener host в маршруте Прикрепление
test.example.com (не указан) да
test.example.com test.example.com да
test.example.com foo.example.com нет
*.example.com (не указан) да
*.example.com *.example.com да
*.example.com foo.test.example.com да
*.example.com example.com нет

Rules

В блоке Rules могут быть заданы правила маршрута: сопоставления запросов на основе совпадений (Matches) и их переадресация на Backend Services. Можно задать несколько правил (rules). Нажмите +, чтобы сконфигурировать правило. В открывшемся окне настройте:

  1. Имя rule (необязательно) — имя правила маршрута, должно быть уникальным в маршруте. Когда добавлено, отображается в списке правил блока Rules.
  2. Matches — при необходимости настройки условия сопоставления с входящим запросом.
Принцип Matches Описание
Логика “И” внутри одного правила Указано несколько условий (matches) в одном rule, запрос должен соответствовать всем этим условиям одновременно
Логика “ИЛИ” между разными правилами Если запрос соответствует условиям (matches) хотя бы одного из rule, он будет направлен на указанные в этом правиле бэкенды

Нажмите + в разделе Matches, чтобы добавить условие сопоставления. В боковом окне доступны настройки:

Поле Описание
Path Путь HTTP-запроса для сопоставления
Path type Определяет, как интерпретировать значение пути запроса, заданное в поле Path. Поддерживаются три типа:
  • Exact — требует точного совпадения с путем в запросе .
  • PathPrefix — требует совпадения префикса пути (например, /login совпадет с /login, /login/oauth и т.д.) .
  • RegularExpression — требует совпадения с регулярным выражением. Поддержка этого типа зависит от конкретной реализации.
Метод HTTP-метод, которому должен соответствовать запрос. Возможные значения: GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH
Заголовки HTTP запроса Условия для сопоставления с HTTP-заголовками запроса. В одном Match можно указать несколько условий для заголовков HTTP запроса и все они должны быть выполнены. Каждый заголовок определяется тремя параметрами:
  • Имя — имя заголовка.
  • Тип — тип сопоставления (Exact или RegularExpression).
  • Значение — значение заголовка.
Параметры HTTP запроса Условия для сопоставления с query-параметрами запроса. В одном Match можно указать несколько условий для параметров и все они должны быть выполнены. Для параметра доступно:
  • Имя — имя параметра.
  • Тип — тип сопоставления (Exact или RegularExpression).
  • Значение — значение параметра.
Поле Описание
Метод GRPC Имя gRPC-метода, которому должен соответствовать запрос. Если указано имя метода, то поле Сервис также должно быть заполнено. Если оба поля (Сервис и Метод) не указаны, правило будет совпадать с любыми gRPC-запросами.
Сервис Имя gRPC-сервиса, которому должен соответствовать запрос.
Тип Определяет, как интерпретировать значения полей Сервис и Метод GRPC. Поддерживаются два типа:
  • Exact — требует точного совпадения имени сервиса и/или метода.
  • RegularExpression — требует совпадения с регулярным выражением. Важно: поддержка этого типа зависит от конкретной реализации.
`
Заголовки GRPC Условия для сопоставления с заголовками gRPC-запроса. Каждый заголовок определяется тремя параметрами:
  • Имя — имя заголовка.
  • Тип — тип сопоставления (Exact или RegularExpression).
  • Значение — значение заголовка (обязательное поле).
Добавленное совпадение отображается в списке блока **Matches**. Нажатие на строку открывает окно просмотра с возможностью удаления. 3. **Backend Services** — список целевых бэкендов (Kubernetes Service) для направления трафика, соответствующего правилу маршрута. Можно указать несколько сервисов для распределения трафика. Нажмите **+** в блоке **Backend Services**, чтобы добавить Service: | Поле | Обязательность | Описание | |------|----------------|----------| | **Имя Service** | Да | Service в том же неймспейсе, где будет добавлен маршрут. Укажите сервис, если уже создан в неймспейсе. При отсутствии Service — ручной ввод | | **Порт Service** | Да | Сетевой порт, на котором целевой Service принимает трафик | | **Вес** | Нет | Пропорциональное значение для распределения трафика между бэкендами. Вес (не является процентом) определяет долю относительно суммы весов всех бэкендов в правиле. По умолчанию, если не указан вес, будет проставлено — 1. Вес = 0 — трафик на этот бэкенд направляться не будет. При указании одного бэкенда он получает 100% трафика независимо от указанного значения веса. |
Скриншот: создание HTTPRoute ![Создание HTTPRoute](/route-create-filled.png)
Скриншот: настройка Rules и Backend Services ![Настройка Rules и Backend Services](/route-rules.png)
Нажмите **Сохранить**, чтобы создать маршрут. ### Примеры манифестов маршрутов
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: my-app-route
  namespace: my-namespace
spec:
  parentRefs:
    - name: example-gateway
      namespace: infra
      sectionName: http
  hostnames:
    - app.example.com
  rules:
    - name: default
      matches:
        - path:
            type: PathPrefix
            value: /
      backendRefs:
        - name: my-service
          port: 80
apiVersion: gateway.networking.k8s.io/v1
kind: GRPCRoute
metadata:
  name: grpc-app
  namespace: my-namespace
spec:
  parentRefs:
  - name: my-gateway
  hostnames:
  - "example.com"
  rules:
  - matches:
    - method:
        service: com.example.user
        method: Login
    backendRefs:
    - name: my-service
      port: 50051
--- ## Просмотр и редактирование Нажмите на строку маршрута в списке, чтобы открыть страницу просмотра. На вкладке **HTTP маршрут** или **GRPC маршрут** отображаются привязанные Gateways, hosts и правила маршрутизации. При необходимости можно изменить hosts, правила, matches и backend-сервисы.
Скриншот: просмотр HTTPRoute ![Просмотр HTTPRoute](/route-view.png)
Скриншот: просмотр GRPCRoute ![Просмотр GRPCRoute](/grpc-view.png)
--- ## Связанные разделы - [Gateways](/ru2/cluster-admin/networking/gateways/) — точки входа, к которым привязываются маршруты; - [Gateway Classes](/ru2/cluster-admin/networking/gateway-classes/) — выбор GatewayClass при создании Gateway; - [Gateway API](/ru2/cluster-admin/networking/gateway-api/) — обзор и типичный сценарий настройки; - [CRD модуля Gateway API](/ru2/cluster-admin/services/platform-services/load-balancer/shturval-gateway-api-crds/) — установка CRD Gateway API в кластер; - [Контроллер Gateway API в Cilium](/ru2/cluster-admin/services/platform-services/critical-services/shturval-networking/#cilium-gateway-api) — включение контроллера в shturval-networking.