Миграция с ALB Ingress Controller на Gwin
С помощью этой инструкции вы перенесете приложения Kubernetes с Ingress-контроллера Application Load Balancer на новый контроллер Gwin для Managed Service for Kubernetes.
Чтобы мигрировать приложение с Ingress-контроллера Application Load Balancer на контроллер Gwin:
- Установите Gwin.
- Запустите скрипт конвертации.
- Создайте новые ресурсы в кластере.
- Проверьте корректность балансировки нагрузки.
- Перенаправьте трафик на новый балансировщик нагрузки.
- Удалите ненужные ресурсы.
Установите Gwin
Разверните контроллер Gwin в вашем кластере по инструкции. Контроллер не будет реагировать на ресурсы контроллера ALB Ingress, поскольку в его спецификации используется другой ingressClassName.
Запустите скрипт конвертации
Для автоматического преобразования существующих ресурсов контроллера ALB Ingress в формат контроллера Gwin используется инструмент alb-ingress-converter.
Конвертер выполняет следующие преобразования ресурсов Kubernetes:
- IngressClass — изменяет класс ALB Ingress на
gwin-default. - Аннотации — преобразует
ingress.alb.yc.io/*в форматgwin.yandex.cloud/*. - Backend Groups — преобразует
HttpBackendGroup/GrpcBackendGroupвIngressBackendGroup. - Storage Buckets — преобразует ссылки на бакеты Object Storage в ресурсы
YCStorageBucket. - Services — создает ресурсы
IngressBackendGroupдля групп бэкендов при необходимости. - Path Types — обновляет типы путей для поддержки регулярных выражений (
ImplementationSpecific).
Чтобы запустить скрипт конвертации:
-
Загрузите бинарный файл конвертера и сделайте его исполняемым. Файл хранится в публичном бакете Object Storage. Доступны сборки для следующих ОС:
Пример загрузки файла для Linux:
wget https://storage.yandexcloud.net/gwin/utils/alb-ingress-converter/alb-ingress-converter-v1.0.0.linux-amd64.tar.gz && tar -xzf alb-ingress-converter-v1.0.0.linux-amd64.tar.gz && chmod +x alb-ingress-converter -
(Опционально) Экспортируйте все ресурсы ALB Ingress из вашего кластера с помощью команды:
kubectl get ingress,ingressclasses,ingressgroupsettings,httpbackendgroups,grpcbackendgroups,services \ -A -o yaml > current-resources.yamlТакже вы сможете запустить конвертер и получить ресурсы напрямую из кластера. При этом конвертер может использовать конфигурацию
kubectlпо умолчанию или конфигурацию, заданную в параметре-kubeconfig. -
Запустите конвертер. Доступно несколько способов запуска:
-
Базовое использование конвертера:
# Конвертация из файлов ./alb-ingress-converter -input-files current-resources.yaml # Конвертация напрямую из кластера ./alb-ingress-converter -
Использование конвертера с расширенными опциями:
# Указание директории для результатов ./alb-ingress-converter -input-files input.yaml -output-dir ./migration-output # Добавление префиксов/суффиксов к именам для избежания конфликтов ./alb-ingress-converter -input-files input.yaml -add-name-suffix "-migrated" # Сохранение diff-файлов для просмотра изменений ./alb-ingress-converter -input-files input.yaml -save-diff # Только валидация (без генерации вывода) ./alb-ingress-converter -input-files input.yaml -validate-only # Обработка нескольких файлов или директорий ./alb-ingress-converter -input-files file1.yaml,file2.yaml ./alb-ingress-converter -input-dirs ./manifests -recursiveДля конвертера доступны параметры, перечисленные в таблице ниже.
Флаг Описание -kubeconfigПуть к конфигурации kubectl.-input-filesСписок YAML-файлов с исходной конфигурацией ресурсов через запятую. -input-dirsСписок директорий с исходной конфигурацией ресурсов через запятую. -recursiveРекурсивное сканирование директорий.
По умолчанию:false.-output-dirВыходная директория.
По умолчанию:./alb-ingress-converter-output.-output-formatФормат вывода: filesилиstdout.
По умолчанию:files.-save-diffСохранение diff-файлов с изменениями.
По умолчанию:false.-validate-onlyТолько валидация входных файлов.
По умолчанию:false.-add-name-prefixДобавление префикса к именам генерируемых ресурсов.
По умолчанию:"".-add-name-suffixДобавление суффикса к именам генерируемых ресурсов.
По умолчанию:"".-ingress-controller-nameИмя контроллера для фильтрации.
По умолчанию:ingress.alb.yc.io/yc-alb-ingress-controller.
-
-
Проверьте результат работы конвертера. Директория с файлами вывода организована следующим образом:
output/ ├── alb-ingress/ # Оригинальные ресурсы ALB Ingress │ ├── ... ├── gwin/ # Преобразованные ресурсы Gwin │ ├── ... └── diff/ # Diff файлы (если использован параметр -save-diff) └── ...
Создайте новые ресурсы в кластере
Просмотрите преобразованные ресурсы и примените их к вашему кластеру:
- Проверьте сгенерированные YAML-файлы в папке
gwin. - Примените их с помощью команды
kubectl apply -f <YAML_файл>. В результате будет создан новый балансировщик нагрузки. - Убедитесь, что все ресурсы созданы успешно. Для этого проверьте статус ресурсов командой
kubectl get.
Новый балансировщик нагрузки будет создан без удаления существующего.
Проверьте корректность балансировки нагрузки
Протестируйте новый балансировщик нагрузки, чтобы убедиться в его корректной работе:
- Получите IP-адрес нового балансировщика нагрузки:
- Запросите статус ресурса
Ingressкомандойkubectl get Ingress. - В консоли управления
:- Перейдите на страницу кластера Managed Service for Kubernetes.
- На панели слева выберите
Сеть. - Перейдите на вкладку Ingress.
- Запросите статус ресурса
- Убедитесь, что маршрутизация работает, как ожидается. Для этого протестируйте доступность HTTP/HTTPS-эндпоинтов вашего приложения.
- Убедитесь, что проверки статуса бэкендов показывают их работоспособность.
- Проверьте наличие ошибок в логах и наличие признаков проблем с производительностью в метриках балансировщика.
Перенаправьте трафик на новый балансировщик нагрузки
- Обновите DNS-записи ваших доменов на IP-адрес нового балансировщика нагрузки для перенаправления трафика.
- Следите за метриками приложения во время переключения трафика.
- Убедитесь, что функциональность приложения полностью доступна после перенаправления трафика.
Удалите ненужные ресурсы
- Удалите старые ресурсы ALB Ingress — оригинальные Ingress-контроллеры, группы бэкендов и т. д.
- Удалите приложение ALB Ingress Controller.
- Удалите неиспользуемые балансировщики нагрузки или сертификаты.
Решение проблем
Ошибки в работе конвертера
Ресурсы не найдены (No resources found):
- Убедитесь, что ресурсы
IngressClassвключены во входные данные. - Проверьте, что фильтр имени контроллера соответствует вашей настройке.
Примеры изменения ресурсов при конвертации
Базовая конвертация ресурса Ingress
До конвертации (класс ALB Ingress):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
ingress.alb.yc.io/group-name: "my-group"
ingress.alb.yc.io/security-groups: "sg-1,sg-2"
spec:
ingressClassName: yc-alb-ingress
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: grpc-service
port:
number: 80
После конвертации (класс Gwin):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
gwin.yandex.cloud/groupName: "my-group"
gwin.yandex.cloud/securityGroups: "sg-1,sg-2"
spec:
ingressClassName: gwin-default
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
resource:
apiGroup: gwin.yandex.cloud
kind: IngressBackendGroup
name: grpc-service-80
Конвертация группы бэкендов
До конвертации (версия ALB Ingress):
apiVersion: alb.yc.io/v1alpha1
kind: HttpBackendGroup
metadata:
name: weighted-backends
spec:
backends:
- name: v1
service:
name: app-v1
port:
number: 8080
weight: 70
После конвертации (версия Gwin):
apiVersion: gwin.yandex.cloud/v1
kind: IngressBackendGroup
metadata:
name: weighted-backends
spec:
type: HTTP
backends:
- name: v1
backendRef:
name: app-v1
port: 8080
weight: 70