Понимание ALB
ALB (Another Load Balancer) — это Kubernetes Gateway, основанный на OpenResty, с многолетним опытом эксплуатации в продакшене от Alauda.
Содержание
Основные компонентыБыстрый стартРазвертывание ALB OperatorРазвертывание экземпляра ALBЗапуск демонстрационного приложенияВзаимосвязь между ALB, ALB Instance, Frontend/FT, Rule, Ingress и ProjectIngressIngress ControllerALBALB InstanceALB-OperatorFrontend (сокращенно: FT)RULEALB LeaderProjectДополнительные ресурсы:Основные компоненты

- ALB Operator: оператор, управляющий жизненным циклом экземпляров ALB. Он отслеживает CR ALB и создает/обновляет экземпляры для разных арендаторов.
- ALB Instance: экземпляр ALB включает OpenResty, выступающий в роли data plane, и контроллер на Go в роли control plane. Контроллер на Go следит за различными CR (Ingress, Gateway, Rule и др.) и преобразует их в специфичные для ALB DSL-правила. OpenResty затем использует эти DSL-правила для сопоставления и обработки входящих запросов.
Быстрый старт
Развертывание ALB Operator
- Создайте кластер.
Развертывание экземпляра ALB
Запуск демонстрационного приложения
Теперь вы можете получить доступ к приложению через curl http://${ip}
Взаимосвязь между ALB, ALB Instance, Frontend/FT, Rule, Ingress и Project
LoadBalancer — ключевой компонент современных облачно-нативных архитектур, выступающий в роли интеллектуального маршрутизатора трафика и балансировщика нагрузки.
Чтобы понять, как работает ALB в Kubernetes-кластере, необходимо разобраться в нескольких основных понятиях и их взаимосвязях:
- Сам ALB
- Frontend (FT)
- Правила (Rules)
- Ресурсы Ingress
- Проекты (Projects)
Эти компоненты работают совместно, обеспечивая гибкое и мощное управление трафиком.
Ниже описано, как эти концепции взаимодействуют в цепочке обработки запроса. Подробные описания каждого понятия приведены в отдельных статьях.
В цепочке вызова запроса:
- Клиент отправляет HTTP/HTTPS/другой протокол запрос, который в конечном итоге попадает на pod ALB, и этот pod (экземпляр ALB) начинает обрабатывать запрос.
- Экземпляр ALB находит правило, которое может соответствовать этому запросу.
- При необходимости модифицирует/перенаправляет/переписывает запрос на основе правила.
- Находит и выбирает IP одного из pod-ов сервиса, указанного в правиле, и пересылает запрос на этот pod.
Ingress
Ingress — ресурс в Kubernetes, используемый для описания, какой запрос должен быть направлен к какому сервису.
Ingress Controller
Программа, которая понимает ресурс Ingress и проксирует запросы к сервису.
ALB
ALB — это Ingress controller.
В Kubernetes-кластере мы используем ресурс alb2 для управления ALB. Вы можете использовать kubectl get alb2 -A, чтобы просмотреть все ALB в кластере.
ALB создаются пользователями вручную. Каждый ALB имеет свой собственный IngressClass. При создании Ingress можно использовать поле .spec.ingressClassName, чтобы указать, какой Ingress controller должен обрабатывать этот Ingress.
ALB Instance
ALB также представляет собой Deployment (набор pod-ов), работающий в кластере. Каждый pod называется экземпляром ALB.
Каждый экземпляр ALB обрабатывает запросы независимо, но все экземпляры разделяют Frontend (FT), Rule и другие конфигурации, принадлежащие одному ALB.
ALB-Operator
ALB-Operator — компонент по умолчанию, развернутый в кластере, оператор для ALB. Он создает/обновляет/удаляет Deployment и другие связанные ресурсы для каждого ALB в соответствии с ресурсом ALB.
Frontend (сокращенно: FT)
FT — ресурс, определяемый самим ALB. Он используется для представления портов прослушивания экземпляра ALB.
FT может быть создан ALB-Leader или пользователем вручную.
Случаи создания FT ALB-Leader:
- Если у Ingress есть сертификат, создается FT 443 (HTTPS).
- Если у Ingress нет сертификата, создается FT 80 (HTTP).
RULE
RULE — ресурс, определяемый самим ALB. Он выполняет ту же роль, что и Ingress, но более конкретен. RULE уникально связан с FT.
RULE может быть создан ALB-Leader или пользователем вручную.
Случаи создания RULE ALB-Leader:
- Синхронизация Ingress в RULE.
ALB Leader
В нескольких экземплярах ALB один выбирается лидером. Лидер отвечает за:
- Преобразование Ingress в Rules. Для каждого пути в Ingress создается Rule.
- Создание FT, необходимых для Ingress. Например, если у Ingress есть сертификат, создается FT 443 (HTTPS), если нет — FT 80 (HTTP).
Project
С точки зрения ALB, Project — это набор namespace-ов.
Вы можете настроить один или несколько Projects в ALB. Когда ALB Leader преобразует Ingress в Rules, он игнорирует Ingress в namespace-ах, не входящих в Project.