Поля ресурса HTTPRoute
В ресурсе HTTPRoute определяются правила маршрутизации трафика по бэкендам — сервисам Kubernetes (ресурсам Service) или перенаправления трафика. HTTPRoute получает входящий трафик от тех ресурсов Gateway, требованиям которых он соответствует.
HTTPRoute предназначен для разработчиков приложений. Оператор кластера должен использовать Gateway.
HTTPRoute — ресурс Kubernetes, определенный проектом Kubernetes Gateway API
HTTPRoute
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: <string>
namespace: <string>
annotations:
gateway.alb.yc.io/rules.backends.http.useHTTP2: <bool>
gateway.alb.yc.io/rules.backends.balancing.mode: <string>
gateway.alb.yc.io/rules.backends.balancing.localityAwareRouting: <string>
gateway.alb.yc.io/rules.backends.balancing.strictLocality: <bool>
gateway.alb.yc.io/rules.backends.balancing.panicThreshold: <string>
gateway.alb.yc.io/rule.<имя_правила>.backends.balancing.mode: <string>
gateway.alb.yc.io/rules.backends.hc.timeout: <string>
gateway.alb.yc.io/rules.backends.hc.interval: <string>
gateway.alb.yc.io/rules.backends.hc.healthyThreshold: <string>
gateway.alb.yc.io/rules.backends.hc.unhealthyThreshold: <string>
gateway.alb.yc.io/rules.backends.hc.port: <string>
gateway.alb.yc.io/rules.backends.hc.http.path: <string>
gateway.alb.yc.io/rules.backends.hc.http.useHTTP2: <bool>
gateway.alb.yc.io/rules.backends.hc.http.host: <string>
gateway.alb.yc.io/rules.backends.hc.grpc.serviceName: "Check"
gateway.alb.yc.io/rules.backends.hc.stream.send: <string>
gateway.alb.yc.io/rules.backends.hc.stream.receive: <string>
gateway.alb.yc.io/rules.sessionAffinity.header.name: <string>
gateway.alb.yc.io/rules.sessionAffinity.cookie.name: <string>
gateway.alb.yc.io/rules.sessionAffinity.cookie.ttl: <string>
gateway.alb.yc.io/rules.sessionAffinity.sourceIP: <bool>
gateway.alb.yc.io/rules.timeout: <string>
gateway.alb.yc.io/rules.idleTimeout: <string>
gateway.alb.yc.io/rule.<имя_правила>.timeout: <string>
gateway.alb.yc.io/rule.<имя_правила>.idleTimeout: <string>
gateway.alb.yc.io/rules.httpUpgradeTypes: <string>
gateway.alb.yc.io/rules.securityProfileId: <string>
gateway.alb.yc.io/rules.rbac.action: <string>
gateway.alb.yc.io/rules.rbac.principals.<имя_группы>.<имя_принципала>.header.name: <string>
gateway.alb.yc.io/rules.rbac.principals.<имя_группы>.<имя_принципала>.header.regex: <string>
gateway.alb.yc.io/rules.rbac.principals.<имя_группы>.<имя_принципала>.header.exact: <string>
gateway.alb.yc.io/rules.rbac.principals.<имя_группы>.<имя_принципала>.header.prefix: <string>
gateway.alb.yc.io/rules.rbac.principals.<имя_группы>.<имя_принципала>.ip.remoteIp: <string>
gateway.alb.yc.io/rules.rbac.principals.<имя_группы>.<имя_принципала>.any: <bool>
gateway.alb.yc.io/hosts.securityProfileId: <string>
gateway.alb.yc.io/hosts.rbac.action: <string>
spec: <HTTPRouteSpec>
Где:
-
apiVersion:gateway.networking.k8s.io/v1 -
kind:HTTPRoute -
metadata(ObjectMeta, обязательное)Метаданные ресурса.
-
name(string, обязательное)Имя ресурса. Подробнее о формате см. в документации Kubernetes
.Не является именем маршрута в Application Load Balancer.
-
namespace(string)Пространство имен, к которому относится ресурс. Значение по умолчанию —
default. -
annotations(map[string]string)Аннотации ресурса.
Примечание
Вы можете определить ресурс RoutePolicy вместо аннотаций. Набор параметров ресурса
RoutePolicyи аннотацииHTTPRouteравнозначны.-
gateway.alb.yc.io/rules.timeout(string)Таймаут для HTTP-соединения балансировщика и бэкенда. Соединение поддерживается до истечения указанного времени, независимо от того, происходит ли передача данных. При достижении таймаута ресурс возвращает статус
UNAVAILABLE. -
gateway.alb.yc.io/rules.idleTimeout(string)Таймаут неактивного HTTP-соединения, в течение которого отсутствует передача данных. По истечении таймаута возвращает статус
504 Gateway Timeout. -
gateway.alb.yc.io/rules.securityProfileId(string)Идентификатор профиля безопасности Smart Web Security для маршрута.
-
gateway.alb.yc.io/hosts.securityProfileId(string)Идентификатор профиля безопасности для хоста.
-
gateway.alb.yc.io/rules.backends.http.useHTTP2Использовать HTTP/2 для соединения между балансировщиком и бэкендом.
-
gateway.alb.yc.io/rules.sessionAffinity.header.nameИмя HTTP-заголовка для привязки сессий (session affinity).
-
gateway.alb.yc.io/rules.sessionAffinity.cookie.nameИмя cookie для привязки сессий.
-
gateway.alb.yc.io/rules.sessionAffinity.cookie.ttlВремя жизни cookie для привязки сессий.
-
gateway.alb.yc.io/rules.sessionAffinity.sourceIPПризнак использования IP-адреса клиента для привязки сессий.
-
gateway.alb.yc.io/rules.backends.balancing.modeРежим балансировки нагрузки. Возможные значения:
RANDOM,ROUND_ROBIN,LEAST_REQUEST. -
gateway.alb.yc.io/rules.backends.balancing.localityAwareRoutingПроцент трафика, направляемого в зону доступности ресурса
HTTPRoute, где размещены бэкенды в статусе healthy. Остальной трафик делится между другими зонами доступности. Параметр не применяется, если заданstrictLocality=true(см. ниже). -
gateway.alb.yc.io/rules.backends.balancing.strictLocalityСтрогая локальность маршрутизации трафика на бэкенды (только в зоне доступности ресурса
HTTPRoute) -
gateway.alb.yc.io/rules.backends.balancing.panicThresholdПорог panic mode для балансировки (%).
-
gateway.alb.yc.io/rules.backends.hc.timeoutТаймаут ответа на проверку состояния.
-
gateway.alb.yc.io/rules.backends.hc.intervalИнтервал между проверками состояния.
-
gateway.alb.yc.io/rules.backends.hc.healthyThresholdКоличество успешных проверок для присвоения ресурсу статуса healthy.
-
gateway.alb.yc.io/rules.backends.hc.unhealthyThresholdКоличество неуспешных проверок для присвоения ресурсу статуса unhealthy.
-
gateway.alb.yc.io/rules.backends.hc.portПорт для проверок health check.
-
gateway.alb.yc.io/rules.backends.hc.http.pathПуть для HTTP-проверок health check. Пример:
/health. Используется для HTTP(S)-бэкендов. -
gateway.alb.yc.io/rules.backends.hc.http.useHTTP2Использовать HTTP/2 для проверок health check. По умолчанию используется HTTP/1.1. Используется для HTTP(S)-бэкендов.
-
gateway.alb.yc.io/rules.backends.hc.http.hostАдрес хоста для HTTP-проверок health check.
-
gateway.alb.yc.io/rules.backends.hc.grpc.serviceNameИмя gRPC-сервиса для проверок health check gRPC-бэкендов.
-
gateway.alb.yc.io/rules.backends.hc.stream.sendДанные для отправки при TCP health check. Используется для бэкендов с TCP-интерфейсом.
-
gateway.alb.yc.io/rules.backends.hc.stream.receiveОжидаемый ответ при TCP health check. Используется для бэкендов с TCP-интерфейсом.
-
gateway.alb.yc.io/rules.timeoutОбщий таймаут HTTP-соединения между балансировщиком и бэкендом.
-
gateway.alb.yc.io/rules.idleTimeoutТаймаут неактивного HTTP-соединения.
-
gateway.alb.yc.io/rules.httpUpgradeTypesПоддерживаемые значения HTTP Upgrade (например, websocket).
-
gateway.alb.yc.io/rules.securityProfileIdИдентификатор профиля безопасности Smart Web Security для маршрута.
-
gateway.alb.yc.io/rules.rbac.actionДействие при совпадении заданных условий (
ALLOW/DENY) для контроля доступа к бэкендам. -
gateway.alb.yc.io/rules.rbac.principals.<имя_группы>.<имя_принципала>.header.nameИмя заголовка для проверок условий RBAC.
-
gateway.alb.yc.io/rules.rbac.principals.<имя_группы>.<имя_принципала>.header.regexРегулярное выражение для проверки значения заголовка для управления доступом к хосту по RBAC.
-
gateway.alb.yc.io/rules.rbac.principals.<имя_группы>.<имя_принципала>.header.exactТочное значение заголовка для управления доступом к хосту по RBAC.
-
gateway.alb.yc.io/rules.rbac.principals.<имя_группы>.<имя_принципала>.header.prefixПрефикс значения заголовка для управления доступом к хосту по RBAC.
-
gateway.alb.yc.io/rules.rbac.principals.<имя_группы>.<имя_принципала>.ip.remoteIpIP-адрес или CIDR-блок для управления доступом к хосту по RBAC.
-
gateway.alb.yc.io/rules.rbac.principals.<имя_группы>.<имя_принципала>.anyЛюбое совпадение заданных условий для управления доступом к хосту по RBAC (
true/false). -
gateway.alb.yc.io/hosts.rbac.actionДействие при совпадении заданных условий (
ALLOW/DENY) для контроля доступа к хосту по RBAC. -
gateway.alb.yc.io/rule.<имя_правила>.backends.balancing.modeРежим балансировки для конкретного правила. Возможные значения:
RANDOM,ROUND_ROBIN,LEAST_REQUEST. -
gateway.alb.yc.io/rule.<имя_правила>.timeoutТаймаут для конкретного правила балансировки.
-
gateway.alb.yc.io/rule.<имя_правила>.idleTimeoutТаймаут неактивности для конкретного правила балансировки.
-
-
-
spec(HTTPRouteSpec, обязательное)Спецификация ресурса. Подробнее см. ниже.
HTTPRouteSpec
parentRefs:
- group: <string>
kind: <string>
namespace: <string>
name: <string>
sectionName: <string>
- ...
hostnames:
- <string>
- ...
rules:
- matches:
- path:
type: <string>
value: <string>
method: <string>
- ...
filters:
- <HTTPRouteFilter>
- ...
backendRefs:
- group: <string>
kind: <string>
name: <string>
namespace: <string>
port: <int32>
weight: <int32>
filters:
- <HTTPRouteFilter>
- ...
- ...
- ...
Где:
-
parentRefs([]ParentReference, обязательное)Список ресурсов
Gateway(или их обработчиков из поляspec.listeners— см. справочник), к которым должен быть привязанHTTPRoute.Также маршрут должен удовлетворять правилам, описанным в конфигурации
Gateway(полеspec.listeners.allowedRoutes).-
namespace(string)Пространство имен, к которому относится ресурс
Gateway(указано в его метаданных — в полеmetadata.namespace).По умолчанию совпадает с пространством имен ресурса
HTTPRoute(полеmetadata.namespace). -
name(string, обязательное)Имя ресурса
Gateway(указано в его метаданных — в полеmetadata.name). -
sectionName(string)Имя обработчика, указанного в ресурсе
Gateway(указано в полеspec.listeners.name).
-
-
hostnames([]string)Список доменных имен (значений заголовка
Hostдля HTTP/1.1 или псевдозаголовка:authorityдля HTTP/2), соответствующих маршруту. Для каждого доменного имени будут созданы виртуальные хосты в HTTP-роутерах.Чтобы указать на все возможные поддомены любых уровней, вместо первого уровня доменного имени используйте звездочку
*. В этом случае значение нужно обернуть в кавычки.Например, значение
"*.example.com"соответствует доменным именамfoo.example.com,foo-bar.example.com,foo.bar.example.com,foo.bar.baz.example.comи т. п. (но неexample.com).Заменить звездочкой только часть первого уровня доменного имени, например
*foo.example.com, нельзя. -
rules([]HTTPRouteRule)Правила маршрутизации и перенаправления запросов.
-
matches([]HTTPRouteMatch)Список условий, хотя бы одному из которых должен соответствовать запрос, чтобы к нему было применено правило.
Например, следующему списку условий будут удовлетворять все запросы к пути
/fooметодомPOSTи все запросы к пути/barлюбым методом:matches: - path: value: /foo method: POST - path: value: /barПоддерживаются только поля, перечисленные ниже. Другие поля, описанные в справочнике Gateway API
(headers,queryParams), не поддерживаются.-
path(HTTPPathMatch)Указание на путь в URI запроса.
-
type(string)Тип указания на путь в URI запроса:
Exact: путь должен совпадать со значением поляrules.matches.path.value.PathPrefix: путь должен начинаться со значения поляrules.matches.path.value.
Помимо распределения трафика, от типа зависит механизм замены пути при перенаправлении. Подробнее см. ниже.
-
value(string)Путь в URI входящего запроса (если тип —
Exact) или его начало (если тип —PathPrefix).
-
-
method(HTTPMethod)HTTP-метод запроса.
-
-
filters([]HTTPRouteFilter)Список фильтров, которые описывают изменение заголовков запроса при маршрутизации в любой бэкенд или перенаправление запроса. Подробнее см. ниже.
Разрешается указывать либо фильтр типа
RequestHeaderModifier(изменение заголовков), либо фильтр типаRequestRedirect(перенаправление), но не оба сразу. -
backendRefs([]HTTPBackendRef)Список сервисов Kubernetes, которые должны обрабатывать запрос в качестве бэкенда.
Можно указать ресурс YCStorageBucket (бакет Object Storage) либо ресурс Service.
-
name(string)Имя сервиса Kubernetes или ресурса с бакетом.
-
namespace(string)Пространство имен, к которому относится сервис или ресурс с бакетом.
-
group(string)Имя группы API Kubernetes, к которой относится ресурс с бакетом, например
gwin.yandex.cloud. Только для ресурсаYCStorageBucket.Значение по умолчанию — пустая строка, обозначающая корневую группу API.
-
kind(string)Тип ресурса Kubernetes с бакетом. Только для ресурса
YCStorageBucket. Используется значениеYCStorageBucket. -
port(int32)Номер порта сервиса. Только для ресурса
Service.Номер должен совпадать с одним из номеров портов, указанных в полях
spec.ports.portресурсаService. Подробнее см. в конфигурации ресурса.Поле предназначено для работы Gateway API и не соответствует ни одному из полей ресурсов Application Load Balancer.
-
weight(int32)Относительный вес бэкенда. Трафик между бэкендами в группе распределяется пропорционально их весам.
Веса должны быть указаны либо у всех бэкендов в группе, либо ни у одного из них. Между бэкендами без указанных весов трафик распределяется, как если бы у них были указаны одинаковые положительные веса.
Если указан неположительный вес, бэкенд не будет получать трафик.
-
filters([]HTTPRouteFilter)Настройки изменения заголовков запроса при маршрутизации в бэкенд. Подробнее см. ниже.
Разрешается указывать только фильтр типа
RequestHeaderModifier(изменение заголовков).
-
-
HTTPRouteFilter
type: <string>
requestHeaderModifier:
set:
- name: <string>
value: <string>
- ...
add:
- name: <string>
value: <string>
- ...
remove:
- <string>
- ...
requestRedirect:
scheme: <string>
hostname: <string>
path:
type: <string>
replaceFullPath: <string>
replacePrefixMatch: <string>
port: <int32>
statusCode: <int>
Где:
-
type(string)Тип фильтра:
RequestHeaderModifier— изменение заголовков запроса. Настройки указываются в полеrequestHeaderModifier.RequestRedirect— перенаправление запроса. Настройки указываются в полеrequestRedirect.
-
requestHeaderModifier(HTTPRequestHeaderFilter)Настройки изменения заголовков запроса для фильтра типа
RequestHeaderModifier.-
set([]HTTPHeader)Список перезаписываемых заголовков.
-
name(string)Имя перезаписываемого заголовка.
-
value(string)Значение, записываемое в заголовок.
-
-
add([]HTTPHeader)Список добавляемых заголовков.
-
name(string)Имя добавляемого заголовка.
-
value(string)Значение добавляемого заголовка.
-
-
remove([]string)Список имен удаляемых заголовков.
-
-
requestRedirect(HTTPRequestRedirectFilter)Настройки перенаправления запроса для фильтра типа
RequestRedirect.-
scheme(string)Новая схема в URI запроса:
httpилиhttps. По умолчанию схема остается без изменений. -
hostname(string)Новое доменное имя в URI запроса. По умолчанию доменное имя остается без изменений.
-
path(HTTPPathModifier)Настройки замены пути в URI запроса.
-
type(string)Тип замены пути:
ReplaceFullPath— замена всего пути. Новый путь указывается в полеreplaceFullPath.ReplacePrefixMatch— замена в зависимости от указания пути спецификацииHTTPRoute(полеspec.rules.matches.path): если указан типExact, заменяется весь путь, еслиPathPrefix— только его начало. Новый путь или его начало указывается в полеreplacePrefixMatch.
-
replaceFullPath(string)Новый путь при типе замены
ReplaceFullPath. -
replacePrefixMatch(string)Новый путь или его начало при типе замены
ReplacePrefixMatch(см. описание типа выше).
-
-
port(int32)Новый порт в URI запроса.
-
statusCode(int)HTTP-код состояния, возвращаемый при перенаправлении.
-