Поля ресурса Gateway
В ресурсе Gateway
определяются правила приема входящего трафика и выбора маршрутов (ресурсов HTTPRoute и TLSRoute) для этого трафика. По этим правилам Gateway API Application Load Balancer создает:
- балансировщик с нужными обработчиками;
- группы бэкендов;
- HTTP-роутеры (если используются ресурсы HTTPRoute).
Gateway
предназначен для оператора кластера. Разработчики приложений должны использовать TLSRoute
или HTTPRoute
.
Gateway
— ресурс Kubernetes, определенный проектом Kubernetes Gateway API
Gateway
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: Gateway
metadata:
name: <string>
namespace: <string>
annotations:
gateway.alb.yc.io/security-groups: <string>
spec: <GatewaySpec>
Где:
-
apiVersion
:gateway.networking.k8s.io/v1alpha2
-
kind
:Gateway
-
metadata
(ObjectMeta
, обязательное)Метаданные ресурса.
-
name
(string
, обязательное)Имя ресурса. Подробнее о формате см. в документации Kubernetes
.Не является именем балансировщика в Application Load Balancer.
-
namespace
(string
)Пространство имен, к которому относится ресурс. Значение по умолчанию —
default
. -
annotations
(map[string]string
, обязательное)Аннотации ресурса.
-
gateway.alb.yc.io/security-groups
(string
, обязательное)Список групп безопасности Virtual Private Cloud для балансировщика. Идентификаторы групп перечисляются через запятую, например:
gateway.alb.yc.io/security-groups: b0c2kotoidcoh6haf8cu,e2lnhhdj9a0aqmr78d36,e9bud5itjnl8mkjj7td1
Для корректной работы балансировщика и Gateway API группы безопасности должны быть настроены, как описано в разделе Настройка групп безопасности для инструментов Application Load Balancer для Managed Service for Kubernetes.
-
-
-
spec
(GatewaySpec
, обязательное)Спецификация ресурса. Подробнее см. ниже.
GatewaySpec
gatewayClassName: yc-df-class
listeners:
- name: <string>
hostname: <string>
port: <int32>
protocol: <string>
tls:
mode: <string>
certificateRefs:
- group: <string>
kind: <string>
name: <string>
namespace: <string>
- ...
allowedRoutes:
namespaces:
from: <string>
selector:
matchExpressions:
- key: <string>
operator: <string>
values:
- <string>
- ...
matchLabels:
<string>: <string>
...
- ...
addresses:
- type: IPAddress
value: <string>
- ...
Где:
-
gatewayClassName
:yc-df-class
-
listeners
([]Listener
)Обработчики балансировщика.
-
name
(string
)Внутреннее имя обработчика.
Используется только для нужд Kubernetes и не является именем обработчика в Application Load Balancer.
Имя должно иметь формат доменного, то есть соответствовать следующему регулярному выражению:
[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
Например, имена
example
,example.com
,foo.example.com
подходят, аexample.com/bar
,-example.
— нет.Максимальная длина имени — 63 символа.
-
hostname
(string
)Доменное имя, для которого действует обработчик.
Чтобы указать на все возможные поддомены любых уровней, вместо первого уровня доменного имени используйте звездочку
*
. В этом случае значение нужно обернуть в кавычки.Например, значение
"*.example.com"
соответствует доменным именамfoo.example.com
,foo-bar.example.com
,foo.bar.example.com
,foo.bar.baz.example.com
и т. п. (но неexample.com
).Заменить звездочкой только часть первого уровня доменного имени, например
*foo.example.com
, нельзя.К обработчику будут привязаны только те маршруты (ресурсы HTTPRoute и TLSRoute), доменные имена которых (поле
spec.hostnames
)пересекаются
с доменным именем в этом поле. -
port
(int32
)Порт, на котором обработчик принимает входящий трафик.
-
protocol
(string
)Протокол, по которому обработчик принимает входящий трафик:
HTTP
,HTTPS
илиTLS
. -
tls
(GatewayTlsConfig
)Настройки TLS, которые используются при работе с входящим HTTPS- или TLS-трафиком.
-
mode
(string
)Режим терминирования TLS-соединений.
Единственное поддерживаемое значение и значение по умолчанию —
Terminate
: соединения терминируются с использованием сертификатов из поляcertificateRefs
, расшифрованный трафик отправляется на бэкенды. РежимPassthrough
(соединения не терминируются) не поддерживается. -
certificateRefs
([]SecretObjectReference
)Список ресурсов Kubernetes, в которых хранятся TLS-сертификаты.
Используется, только если значение поля
protocol
—HTTPS
илиTLS
. В этом случае в списке должен быть хотя бы один сертификат.В балансировщике используется только первый сертификат из списка, остальные игнорируются.
Добавить сертификат в кластер можно в виде секрета (ресурса
Secret
) через консоль управления Managed Service for Kubernetes или с помощью kubectl:kubectl create secret tls <имя_секрета> \ -n <имя_пространства_имен> \ --cert <путь_к_файлу_с_сертификатом> \ --key <путь_к_файлу_с_закрытым_ключом_сертификата>
-
group
(string
)Имя группы API Kubernetes, к которой относится ресурс с сертификатом, например
networking.k8s.io
.Значение по умолчанию — пустая строка, обозначающая корневую группу API.
-
kind
(string
)Тип ресурса Kubernetes, в котором хранится сертификат.
Значение по умолчанию —
Secret
. -
name
(string
)Имя ресурса Kubernetes, в котором хранится сертификат.
-
namespace
(string
)Пространство имен, к которому относится имя ресурса с сертификатом.
-
-
-
allowedRoutes
(AllowedRoutes
)Правила, по которым для обработчика выбираются маршруты (ресурсы HTTPRoute и TLSRoute). Чтобы маршрут был выбран, в конфигурации этих ресурсов должно быть указание на
Gateway
в полеspec.parentRefs
.По этим маршрутам создаются группы бэкендов, привязываемые к обработчику. При использовании
HTTPRoute
также создаются HTTP-роутеры.-
namespaces
(RouteNamespaces
)Правило выбора пространств имен, к которым относятся ресурсы
HTTPRoute
иTLSRoute
, привязываемые к обработчику.-
from
(string
)Тип правила:
All
— выбираются ресурсы из всех пространств имен.Same
— выбираются ресурсы только из того же пространства имен, что и ресурсGateway
(полеmetadata.namespace
).Selector
— выбираются ресурсы из пространств имен, соответствующих требованиям из поляselector
.
-
selector
(LabelSelector
)Селектор — набор требований к пространствам имен. Выбираются только те пространства, которые удовлетворяют всем требованиям из полей
matchExpressions
иmatchLabels
.Подробнее см. в справочнике API Kubernetes
.Если значение поля
from
— неSelector
, то полеselector
игнорируется.
-
-
-
-
addresses
([]GatewayAddress
)Настройки публичных IP-адресов балансировщика.
Если поле не указано, балансировщику будет автоматически присвоен один публичный адрес.
-
type
:IPAddress
-
value
(string
)Публичный IP-адрес Yandex Virtual Private Cloud, присваиваемый балансировщику.
Перед указанием адреса в этом поле его нужно зарезервировать по инструкции.
-