MetalLB#
MetalLB - это реализация балансировщика нагрузки (LoadBalancer) для Kubernetes, предназначенная для использования в средах, где облачные провайдеры недоступны или не поддерживаются. По умолчанию в публичных облаках (например, Yandex, VK, AWS, GCP, Azure) сервисы типа LoadBalancer автоматически выделяют внешний IP-адрес и настраивают сетевой балансировщик. Однако в локальных кластерах Kubernetes (например, развернутых на bare-metal серверах или в частных дата-центрах), такая функциональность отсутствует — для решения таких типов задач подходит MetalLB.
Основные задачи и возможности
Обеспечение внешнего доступа к сервисам типа
LoadBalancer:MetalLB предоставляет возможность использовать тип сервиса
LoadBalancerв локальных и гибридных средах, выделяя реальные IP-адреса из заданного диапазона.Управление IP-адресами:
MetalLB распределяет и управляет рядом IP-адресов, которые будут назначаться сервисам автоматически.
Поддержка нескольких режимов работы:
MetalLB поддерживает несколько способов предоставления внешнего доступа:
Режим
Layer 2: один узел становится ответственным за IP-адрес и принимает весь трафик на него. Подходит для простых сетей. В этом режиме Platform V DropApp работает по умолчанию.Режим
BGP: MetalLB взаимодействует с внешними маршрутизаторами по протоколуBGPи объявляет маршруты на выделенные IP-адреса, обеспечивая высокую доступность и балансировку трафика между узлами кластера.
Основные компоненты MetalLB:
Speaker:
Разворачивается как
DaemonSetи отвечает за работу в сети (ARP/NDPвLayer 2илиBGP-соединение).Controller:
Работает как
Deploymentи управляет выдачей IP-адресов, следит за состоянием сервисов.
Принцип работы:
Во время создания сервиса типа LoadBalancer, Kubernetes помечает его как "Pending", ожидая выделения внешнего IP. MetalLB перехватывает этот запрос, выбирает свободный IP из списка, который был определен пользователем, и назначает его сервису. Затем он обеспечивает маршрутизацию трафика на нужный Pod через cilium и Service-механизмы Kubernetes.
Примечание
MetalLB является единственным инструментом в компоненте load-balancer. Он устанавливается по умолчанию в процессе установки всего кластера DropApp. В частности, адрес из его Pool присваивается сервису ingress-nginx-controller.
Конфигурация values#
Значения можно переопределить через редактирование инструмента с именем metallb и указанием нужных values в spec.values. Общее описание конфигурации values для инструментов описано в разделе «Конфигурации инструментов дополнительных компонентов».
-
imagePullSecrets - определить список секретов для загрузки образов из приватных реестров
fullnameOverride - переопределить полное имя ресурсов релиза
loadBalancerClass - определить класс LoadBalancer для сервисов MetalLB
prometheus - определить настройки интеграции с Prometheus и объектами мониторинга
frrk8s - определить настройки интеграции с внешним backend frr-k8s
networkpolicies - определить настройки сетевых политик для компонентов MetalLB
imagePullSecrets - определить список секретов для загрузки образов из приватных реестров#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Массив секретов для аутентификации в приватных реестрах образов |
|
nameOverride - переопределить сокращенное имя релиза#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Переопределение имени для ресурсов Kubernetes |
|
fullnameOverride - переопределить полное имя ресурсов релиза#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Полное переопределение имени для всех ресурсов |
|
loadBalancerClass - определить класс LoadBalancer для сервисов MetalLB#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Класс |
|
rbac - определить настройки RBAC для компонентов MetalLB#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Создание RBAC-правил для MetalLB-компонентов |
|
prometheus - определить настройки интеграции с Prometheus и объектами мониторинга#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Добавление аннотаций для сбора метрик Prometheus |
|
|
Порт для экспорта метрик контроллера и |
|
|
Имя секрета для TLS-защиты метрик |
|
|
Имя секрета для TLS-защиты метрик контроллера |
|
|
Создание RBAC-правил для Prometheus |
|
|
Учетная запись сервиса для Prometheus |
|
|
Пространство имен, в котором развернут Prometheus |
|
|
Образ для |
|
|
Тег образа |
|
|
Политика загрузки образа |
`` |
|
Включение |
|
|
Дополнительные метки для |
|
|
Аннотации для |
|
|
Метка задания для цели сбора метрик |
|
|
Интервал сбора метрик |
`` |
|
Настройки переименования метрик |
|
|
Настройки переименования целей |
|
|
Включение |
|
|
Дополнительные метки для |
|
|
Аннотации для |
|
|
Пропуск проверки TLS-сертификата для |
|
|
Дополнительные метки для |
|
|
Аннотации для |
|
|
Пропуск проверки TLS-сертификата для контроллера |
|
|
Метка задания для |
|
|
Интервал сбора метрик для |
Отсутствует |
|
Настройки переименования метрик для |
|
|
Настройки переименования целей для |
|
|
Включение оповещений Prometheus |
|
|
Дополнительные метки для |
|
|
Аннотации для |
|
|
Оповещение для устаревшей конфигурации |
|
|
Уровень важности оповещения устаревшей конфигурации |
|
|
Оповещение для незагруженной конфигурации |
|
|
Уровень важности оповещения незагруженной конфигурации |
|
|
Оповещение для исчерпанного пула адресов |
|
|
Уровень важности оповещения исчерпанного пула |
|
|
Регулярное выражение для исключения пулов адресов из срабатывания алерта исчерпания адресов |
|
|
Оповещение для использования пула адресов |
|
|
Список порогов использования пулов адресов и уровней важности соответствующих алертов |
|
|
Регулярное выражение для исключения пулов адресов из срабатывания алертов по использованию |
|
|
Оповещение для разорванного BGP-соединения |
|
|
Уровень важности оповещения BGP-соединения |
|
|
Дополнительные кастомные оповещения |
|
controller - определить настройки controller MetalLB#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение контроллера MetalLB |
|
|
Уровень логирования ( |
|
|
Репозиторий образа контроллера |
|
|
Тег образа контроллера |
|
|
Политика загрузки образа контроллера |
`` |
|
Стратегия обновления развертывания |
|
|
Создание |
|
|
Имя |
|
|
Аннотации для |
|
|
Запуск от имени непривилегированного пользователя |
|
|
UID пользователя для запуска контроллера |
|
|
Группа файловой системы |
|
|
Запрос памяти для контроллера |
|
|
Запрос CPU для контроллера |
|
|
Лимит памяти для контроллера |
|
|
Лимит CPU для контроллера |
|
|
Селектор узлов для размещения контроллера |
|
|
Tolerations для контроллера |
|
|
Класс приоритета для pod контроллера |
|
|
Класс среды выполнения для контроллера |
|
|
Правила |
|
|
Аннотации для pod контроллера |
|
|
Метки для ресурсов контроллера |
|
|
Включение |
|
|
Порог неудачных проверок |
|
|
Начальная задержка |
|
|
Период проверки |
|
|
Порог успешных проверок |
|
|
Время ожидания |
|
|
Включение |
|
|
Порог неудачных проверок |
|
|
Начальная задержка |
|
|
Период проверки |
|
|
Порог успешных проверок |
|
|
Время ожидания |
|
|
Минимальная версия TLS |
|
|
Набор шифров TLS |
|
|
Дополнительные контейнеры в pod контроллера |
|
speaker - определить настройки speaker MetalLB#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение |
|
|
Уровень логирования |
|
|
Разрешение размещения на мастер-узле |
|
|
Включение |
|
|
Порт для |
|
|
Переопределение адреса для |
|
|
Путь к секретному ключу |
|
|
Исключение интерфейсов из обработки |
|
|
Игнорирование метки |
|
|
Репозиторий образа |
|
|
Тег образа |
|
|
Политика загрузки образа |
`` |
|
Стратегия обновления |
|
|
Создание |
|
|
Имя |
|
|
Аннотации |
|
|
Контекст безопасности для |
|
|
Запрос памяти для |
|
|
Запрос CPU для |
|
|
Лимит памяти для |
|
|
Лимит CPU для |
|
|
Селектор узлов для размещения |
|
|
Список tolerations для размещения pod speaker на узлах с taint’ами |
|
|
Класс приоритета для pod |
|
|
Правила |
|
|
Класс среды выполнения для |
|
|
Аннотации для pod |
|
|
Метки для ресурсов |
|
|
Включение |
|
|
Порог неудачных проверок |
|
|
Начальная задержка |
|
|
Период проверки |
|
|
Порог успешных проверок |
|
|
Время ожидания |
|
|
Включение |
|
|
Порог неудачных проверок |
|
|
Начальная задержка |
|
|
Период проверки |
|
|
Порог успешных проверок |
|
|
Время ожидания |
|
|
Включение |
|
|
Порог неудачных проверок |
|
|
Период проверки |
|
|
Включение FRR-контейнера для BGP |
|
|
Репозиторий образа FRR |
|
|
Тег образа FRR |
|
|
Политика загрузки образа FRR |
`` |
|
Порт метрик FRR |
|
|
Ресурсы для FRR контейнера |
|
|
Ресурсы для |
|
|
Ресурсы для FРР метрик |
|
|
Ограничения и запросы ресурсов для initContainer, копирующего файлы FRR |
|
|
Ограничения и запросы ресурсов для initContainer, копирующего reloader |
|
|
Ограничения и запросы ресурсов для initContainer, копирующего бинарники метрик |
|
|
Дополнительные контейнеры в pod |
|
crds - определить настройки установки CRD MetalLB#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение установки CRD-ресурсов |
|
|
Политика обработки ошибок валидации |
|
frrk8s - определить настройки интеграции с внешним backend frr-k8s#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение |
|
|
Использование внешнего экземпляра |
|
|
Пространство имен для |
|
networkpolicies - определить настройки сетевых политик для компонентов MetalLB#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Определяет, нужно ли устанавливать NetworkPolicy для компонентов MetalLB в их namespace |
|
|
Определяет, нужно ли устанавливать базовую политику default deny в namespace MetalLB |
|
|
Порт Kubernetes API, используемый в сетевых политиках при необходимости переопределения внутреннего targetPort |
|