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#
Значения можно переопределить через редактирование инструмента с именем metsllb и указанием нужных values в spec.values. Общее описание конфигурации values для инструментов описано в разделе «Конфигурации инструментов дополнительных компонентов».
imagePullSecrets - секреты для доступа к приватным реестрам образов#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Массив секретов для аутентификации в приватных реестрах образов |
пустой список |
nameOverride - переопределение имени чарта#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Переопределение имени для ресурсов Kubernetes |
|
fullnameOverride - полное переопределение имени ресурсов#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Полное переопределение имени для всех ресурсов |
|
loadBalancerClass - класс балансировщика нагрузки#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Класс |
|
rbac - настройки контроля доступа на основе ролей#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Создание RBAC-правил для MetalLB-компонентов |
|
prometheus - настройки мониторинга и метрик#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Добавление аннотаций для сбора метрик Prometheus |
|
|
Порт для экспорта метрик контроллера и |
|
|
Имя секрета для TLS-защиты метрик |
|
|
Имя секрета для TLS-защиты метрик контроллера |
|
|
Создание RBAC-правил для Prometheus |
|
|
Учетная запись сервиса для Prometheus |
|
|
Namespace, где развернут Prometheus |
|
|
Образ для |
|
|
Тег образа |
|
|
Политика загрузки образа |
|
|
Включение |
|
|
Дополнительные метки для |
|
|
Аннотации для |
|
|
Метка задания для цели сбора метрик |
|
|
Интервал сбора метрик |
|
|
Настройки переименования метрик |
|
|
Настройки переименования целей |
|
|
Включение |
|
|
Дополнительные метки для |
|
|
Аннотации для |
|
|
Пропуск проверки TLS-сертификата для |
|
|
Дополнительные метки для |
|
|
Аннотации для |
|
|
Пропуск проверки TLS-сертификата для контроллера |
|
|
Метка задания для |
|
|
Интервал сбора метрик для |
|
|
Настройки переименования метрик для |
|
|
Настройки переименования целей для |
|
|
Включение оповещений Prometheus |
|
|
Дополнительные метки для |
|
|
Аннотации для |
|
|
Оповещение для устаревшей конфигурации |
|
|
Уровень важности оповещения устаревшей конфигурации |
|
|
Оповещение для незагруженной конфигурации |
|
|
Уровень важности оповещения незагруженной конфигурации |
|
|
Оповещение для исчерпанного пула адресов |
|
|
Уровень важности оповещения исчерпанного пула |
|
|
Оповещение для использования пула адресов |
|
|
Оповещение для разорванного BGP-соединения |
|
|
Уровень важности оповещения BGP-соединения |
|
|
Дополнительные кастомные оповещения |
|
controller - настройки контроллера MetalLB#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение контроллера MetalLB |
|
|
Уровень логирования ( |
|
|
Репозиторий образа контроллера |
|
|
Тег образа контроллера |
|
|
Политика загрузки образа контроллера |
|
|
Стратегия обновления развертывания |
|
|
Создание |
|
|
Имя |
|
|
Аннотации для |
|
|
Запуск от имени непривилегированного пользователя |
|
|
UID пользователя для запуска контроллера |
|
|
Группа файловой системы |
|
|
Запрос памяти для контроллера |
|
|
Запрос CPU для контроллера |
|
|
Лимит памяти для контроллера |
|
|
Лимит CPU для контроллера |
|
|
Селектор узлов для размещения контроллера |
|
|
Tolerations для контроллера |
|
|
Класс приоритета для pod контроллера |
|
|
Класс среды выполнения для контроллера |
|
|
Правила |
|
|
Аннотации для pod контроллера |
|
|
Метки для ресурсов контроллера |
|
|
Включение |
|
|
Порог неудачных проверок |
|
|
Начальная задержка |
|
|
Период проверки |
|
|
Порог успешных проверок |
|
|
Время ожидания |
1 |
|
Включение |
|
|
Порог неудачных проверок |
|
|
Начальная задержка |
|
|
Период проверки |
|
|
Порог успешных проверок |
|
|
Время ожидания |
|
|
Минимальная версия TLS |
|
|
Набор шифров TLS |
|
|
Дополнительные контейнеры в pod контроллера |
|
speaker - настройки speaker компонента MetalLB#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение |
|
|
Уровень логирования |
|
|
Разрешение размещения на master nodes |
|
|
Включение |
|
|
Порт для |
|
|
Переопределение адреса для |
|
|
Путь к секретному ключу |
|
|
Исключение интерфейсов из обработки |
|
|
Игнорирование метки |
|
|
Репозиторий образа |
|
|
Тег образа |
|
|
Политика загрузки образа |
|
|
Стратегия обновления |
|
|
Создание |
|
|
Имя |
|
|
Аннотации |
|
|
Контекст безопасности для |
|
|
Запрос памяти для |
|
|
Запрос CPU для |
|
|
Лимит памяти для |
|
|
Лимит CPU для |
|
|
Селектор узлов для размещения |
|
|
Ключ |
|
|
Оператор |
|
|
Значение |
|
|
Эффект |
|
|
Класс приоритета для pod |
|
|
Правила |
|
|
Класс среды выполнения для |
|
|
Аннотации для pod |
|
|
Метки для ресурсов |
|
|
Включение |
|
|
Порог неудачных проверок |
|
|
Начальная задержка |
|
|
Период проверки |
|
|
Порог успешных проверок |
|
|
Время ожидания |
|
|
Включение |
|
|
Порог неудачных проверок |
|
|
Начальная задержка |
|
|
Период проверки |
|
|
Порог успешных проверок |
|
|
Время ожидания |
|
|
Включение |
|
|
Порог неудачных проверок |
|
|
Период проверки |
|
|
Включение FRR-контейнера для BGP |
|
|
Репозиторий образа FRR |
|
|
Тег образа FRR |
|
|
Политика загрузки образа FRR |
|
|
Порт метрик FRR |
|
|
Ресурсы для FRR контейнера |
|
|
Ресурсы для |
|
|
Ресурсы для FRR метрик |
|
|
Дополнительные контейнеры в pod |
|
crds - настройки Custom Resource Definitions#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение установки CRD-ресурсов |
|
|
Политика обработки ошибок валидации |
|
frrk8s - настройки интеграции с FRR-K8s#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение |
|
|
Использование внешнего экземпляра |
|
|
Namespace для |
|