Контроллер Gwin для Yandex Managed Service for Kubernetes
Yandex Application Load Balancer предоставляет инструмент для создания балансировщиков нагрузки и управления ими в кластерах Yandex Managed Service for Kubernetes — Gwin.
Контроллер Gwin, установленный в кластер, автоматически разворачивает L7-балансировщики на основе конфигурации созданных вами ресурсов Kubernetes.
Контроллер поддерживает спецификации Ingress
Поддерживаемые ресурсы Kubernetes:
- Ingress — стандартный ресурс Kubernetes
, возможности которого расширены с помощью аннотаций. - IngressPolicy — обеспечивает дополнительные возможности для всех ресурсов Application Load Balancer.
- IngressBackendGroup — позволяет настраивать группы бэкендов.
- ServicePolicy — позволяет настраивать целевые группы.
- Service — содержит описание сервисов Kubernetes, используемых в качестве бэкендов.
- Gateway — содержит правила приема входящего трафика и выбора маршрутов для этого трафика.
- GatewayPolicy — обеспечивает дополнительные возможности для балансировщиков, роутеров и обработчиков.
- HTTPRoute — содержит правила для маршрутизации HTTP- и HTTPS-трафика по бэкендам.
- GRPCRoute — содержит правила для маршрутизации gRPC-трафика по бэкендам.
- TLSRoute — содержит правила для маршрутизации TLS-трафика по бэкендам.
- RoutePolicy — обеспечивает дополнительные возможности для виртуальных хостов и маршрутов.
- YCStorageBucket — соответствует бакету Yandex Object Storage.
- YCCertificate — соответствует сертификату Yandex Certificate Manager.
Схема работы контроллера Gwin:
Установить контроллер Gwin можно по инструкции.
Примеры конфигурации
Ниже приведены два примера конфигурации — с использованием ресурсов Gateway API и Ingress. В обоих случаях создается балансировщик Application Load Balancer, который:
- автоматически получает динамический публичный IP-адрес;
- принимает HTTP-трафик на порт
80; - принимает HTTPS-трафик на порт
443, используя сертификат Certificate Manager; - отправляет GET-запросы к тестовому сервису
example-service.
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: example-gateway
namespace: example-ns
spec:
gatewayClassName: gwin-default
listeners:
- name: http
protocol: HTTP
port: 80
hostname: "example.com"
allowedRoutes:
namespaces:
from: Same
- name: https
protocol: HTTPS
port: 443
hostname: "example.com"
allowedRoutes:
namespaces:
from: Same
tls:
certificateRefs:
- group: gwin.yandex.cloud
kind: YCCertificate
name: example-certificate
addresses:
- type: gwin.yandex.cloud/autoIPv4
value: auto
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: example-redirect-httproute
namespace: example-ns
spec:
hostnames:
- "example.com"
parentRefs:
- name: example-gateway
sectionName: http
rules:
- filters:
- type: RequestRedirect
requestRedirect:
scheme: https
statusCode: 301
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: example-httproute
namespace: example-ns
spec:
hostnames:
- "example.com"
parentRefs:
- name: example-gateway
sectionName: https
rules:
- matches:
- path:
value: /api
type: PathPrefix
method: GET
backendRefs:
- kind: Service
name: example-service
port: 80
---
apiVersion: gwin.yandex.cloud/v1
kind: YCCertificate
metadata:
name: example-certificate
namespace: example-ns
spec:
certificateRef:
certificateID: "<идентификатор_сертификата>"
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
namespace: example-ns
annotations:
gwin.yandex.cloud/groupName: example
gwin.yandex.cloud/externalIPv4Address: auto
gwin.yandex.cloud/rules.allowedMethods: "GET"
spec:
ingressClassName: gwin-default
rules:
- host: example.com
http:
paths:
- pathType: Prefix
path: "/api"
backend:
service:
name: example-service
port:
number: 80
tls:
- hosts:
- example.com
secretName: "yc-certmgr-cert-id-<идентификатор_сертификата>"