Модуль реализует улучшенный (относительно стандартного режима L2 в MetalLB) механизм балансировки для сервисов в кластерах bare metal, где нет возможности воспользоваться облачным балансировщиком или MetalLB в режиме BGP с настроенным Equal-cost multi-path (ECMP).
Принцип работы в сравнении с режимом L2 модуля MetalLB
MetalLB в режиме L2 позволяет заказать Service с типом LoadBalancer
, работа которого основана на том, что в пиринговой сети узлы-балансировщики имитируют ARP-ответы от “публичного” IP. Данный режим имеет существенное ограничение — единовременно лишь один балансировочный узел обрабатывает весь входящий трафик данного сервиса. Соответственно:
- Узел, выбранный в качестве лидера для “публичного” IP становится “узким местом” без возможности горизонтального масштабирования.
- В случае выхода узла-балансировщика из строя, все текущие соединения будут оборваны для переключения на новый узел, который будет назначен лидером.
Данный модуль помогает обойти эти ограничения. Он предоставляет новый интерфейс L2LoadBalancer, который:
- Позволяет с помощью
nodeSelector
связать группу узлов и пул IP-адресов.
После чего мы можем создать стандартный ресурс Service с типом LoadBalancer
и в нем с помощью аннотаций указать:
- Какой L2LoadBalancer использовать. Задав этим набор узлов и адресов.
- Указать необходимое количество IP-адресов для L2-анонсирования.
Таким образом:
- Приложение получит не один, а несколько “публичных” IP. Данные IP потребуется прописать в качестве A-записей для публичного домена приложения. Для последующего горизонтального масштабирования потребуется добавить дополнительные узлы-балансировщики, соответствующие Service будут созданы автоматически, потребуется лишь добавить их в список A-записей прикладного домена.
- При выходе из строя одного из узлов-балансировщиков, лишь часть трафика будет подвержена обрыву для переключения на здоровый узел.