MetalLB Operator
Содержание
Понимание MetalLB OperatorТерминологияПринципы высокой доступности в MetalLBАлгоритм выбора узлов-хостов VIPФормула расчётаПример примененияCustom Resource DefinitionsIPAddressPoolL2AdvertisementBGPPeerBGPAdvertisementBFDProfile (опционально)Ограничения и условияУстановка и удаление MetalLB OperatorОбновление MetalLB OperatorПонимание MetalLB Operator
MetalLB Operator предоставляет реализацию балансировщика нагрузки, нативного для Kubernetes, для локальных или bare-metal сред, которые не имеют доступа к облачным сервисам балансировки нагрузки.
Он позволяет ресурсам Service типа LoadBalancer функционировать, назначая внешние IP-адреса сервисам и рекламируя эти адреса через уровень 2 (ARP/NDP) или уровень 3 (BGP).
Operator автоматизирует управление жизненным циклом компонентов MetalLB, включая установку, обновления и синхронизацию конфигурации.
Терминология
Принципы высокой доступности в MetalLB

По умолчанию платформа использует ARP-режим MetalLB, а конкретный процесс реализации и принципы следующие:
-
Компонент Controller MetalLB выбирает IP-адрес из пула внешних адресов и выделяет его для внутренней маршрутизации типа LoadBalancer в качестве VIP.
-
MetalLB выбирает доступный узел в качестве лидера для хостинга VIP на основе алгоритма, который затем перенаправляет трафик.
-
Компонент Speaker на этом узле активно отправляет GARP, устанавливая связь между VIP и MAC-адресом на всех узлах.
-
Узлы в одной подсети, узнав сопоставление между VIP и MAC-адресом доступного узла, будут напрямую взаимодействовать с этим узлом при обращении к VIP.
-
Узлы в разных подсетях сначала направляют трафик на шлюз своей подсети, который затем перенаправляет трафик на узел, хостящий VIP.
-
-
При сбое этого узла MetalLB выбирает другого лидера для хостинга VIP и отправляет GARP для обновления MAC-адреса IP сервиса, обеспечивая тем самым высокую доступность.
-
При достижении узла Kube-Proxy перенаправляет трафик соответствующему Pod.
Алгоритм выбора узлов-хостов VIP
Выбор «лидера» (узла, который будет рекламировать IP) для данного IP балансировщика нагрузки является статeless и работает следующим образом:
- каждый speaker собирает список потенциальных анонсеров данного IP, учитывая активных спикеров, политику внешнего трафика, активные endpoints, node selectors и другие параметры.
- каждый speaker выполняет одинаковый расчёт: получает отсортированный список хэшей элементов «node+VIP» и анонсирует сервис, если он является первым элементом списка.
Это устраняет необходимость хранить память о том, какой speaker отвечает за анонсирование данного IP.
Формула расчёта
Формула: Количество пулов внешних адресов = ceil(n-vip / n-node), где ceil — округление вверх.
Примечание: При использовании виртуальных машин количество виртуальных машин = Количество пулов внешних адресов * n. Здесь n должно быть больше 2, при этом допускается отказ одного узла.
-
n-vip: количество VIP.
-
n-node: количество VIP, которое может обслуживать один узел.
Пример применения
Если в компании 10 VIP, и каждый доступный узел может обслуживать 5 VIP, при допущении отказа одного узла, как компании спланировать количество пулов внешних адресов и доступных узлов?
Анализ:
Требуется всего два пула внешних адресов и четыре доступных узла.
-
Каждый доступный узел может обслуживать максимум 5 VIP, значит один пул внешних адресов может содержать 5 VIP, поэтому для 10 VIP нужны два пула внешних адресов.
-
При допущении отказа одного узла каждый пул адресов должен включать один узел, хостящий VIP, и один резервный узел, что даёт по два доступных узла для каждого из двух пулов внешних адресов.
Custom Resource Definitions
MetalLB Operator устанавливает и управляет несколькими CRD в группе API metallb.io.
Эти CRD определяют, как MetalLB назначает и рекламирует IP-адреса.
IPAddressPool
Определяет диапазон(ы) IP, которые MetalLB может назначать для Service.type=LoadBalancer.
- Один или несколько CIDR или диапазонов.
- По умолчанию MetalLB выделяет IP из любого настроенного пула адресов с доступными адресами. Это может привести к использованию «дорогих» адресов для сервисов, которым это не требуется. Чтобы предотвратить такое поведение, можно отключить автоматическое выделение для пула, установив флаг autoAssign в
false.
L2Advertisement
Используется в режиме уровня 2, когда MetalLB объявляет IP через ARP/NDP.
- Список пулов, IP-адреса которых будут рекламироваться.
BGPPeer
- IP-адрес пир-роутера.
- ASN пира.
- ASN, используемый MetalLB.
holdTime/keepaliveTime: Опциональные таймеры для BGP-сессий.- Можно ограничить пиры определёнными узлами, используя атрибут node-selectors в конфигурации пиров.
BGPAdvertisement
Управляет тем, как IP из пулов рекламируются через BGP.
- Какие пулы рекламировать.
- Длина префикса агрегации маршрутов.
- Атрибуты BGP community.
BFDProfile (опционально)
Используется для определения параметров BFD (Bidirectional Forwarding Detection) для BGP-пиров.
Ограничения и условия
Ресурсы IP для внешнего адреса должны соответствовать следующим условиям:
-
Пул внешних адресов должен быть связан на уровне 2 (L2) с доступными узлами.
-
IP-адреса должны быть пригодны для использования платформой и не могут включать IP, уже используемые физической сетью, например, IP шлюзов.
-
Не должно быть пересечений с сетями, используемыми кластером, включая Cluster CIDR, Service CIDR, подсети и т. д.
-
В среде с двойным стеком необходимо, чтобы одновременно в одном пуле внешних адресов присутствовали как IPv4, так и IPv6 адреса, и их количество было больше 0. В противном случае внутренние маршруты типа LoadBalancer с двойным стеком не смогут получить внешние адреса доступа.
-
В среде IPv6 DNS узлов должен поддерживать IPv6, иначе плагин MetalLB не сможет успешно развернуться.
Установка и удаление MetalLB Operator
Operator можно установить через Cluster Plugin в веб-консоли Alauda Container Platform.
- Перейдите в
Administrator->Marketplace->Cluster Plugin - Введите ключевое слово
MetalLB. - Нажмите
⋮, затем Install. - После установки нажмите
⋮, затем Uninstall для удаления.
Обновление MetalLB Operator
Обновление MetalLB Operator осуществляется через загрузку пакета в веб-консоли Alauda Container Platform.
- Перейдите в
Administrator->Marketplace->Upload Package
Подробнее о Upload Package.