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 для инструментов описано в разделе «Конфигурации инструментов дополнительных компонентов».
prometheus – параметры интеграции с Prometheus и сбора метрик
crds – настройки установки и обновления Custom Resource Definitions (CRD)
imagePullSecrets – Secret для загрузки образов#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Список |
|
nameOverride – переопределение имени чарта#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Переопределение базового имени ресурсов чарта для генерации имен |
|
fullnameOverride – полное переопределение имени чарта#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Полное переопределение имени для всех создаваемых ресурсов чарта |
|
loadBalancerClass – класс балансировщика нагрузки#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Класс |
|
rbac – настройки RBAC (управление доступом на основе ролей)#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Активация автоматического создания ресурсов RBAC |
|
tls – настройки TLS#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Список шифров TLS через запятую. Применяется только к TLS 1.2. Если не задано, используются стандартные алгоритмы Go |
|
|
Список предпочтительных кривых TLS через запятую (например, |
|
|
Минимальная версия TLS. |
|
|
Имя |
|
|
Имя |
|
prometheus – параметры интеграции с Prometheus и сбора метрик#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Добавление аннотаций для автоматического сбора метрик Prometheus |
|
|
Порт для экспорта метрик контроллера и |
|
|
Создание RBAC-правил для Prometheus |
|
|
Настройки |
|
|
Пространство имен, в котором развернут Prometheus |
|
|
Включение |
|
|
Дополнительные метки для |
|
|
Аннотации, добавляемые ко всем создаваемым ресурсам |
|
|
Метка |
|
|
Интервал сбора метрик; при отсутствии используется значение по умолчанию Prometheus |
|
|
Правила фильтрации и преобразования меток, применяемые к собранным метрикам. |
|
|
Правила фильтрации и преобразования меток, применяемые к целям сбора до начала сбора метрик. |
|
|
Включение |
|
|
Дополнительные метки для |
|
|
Аннотации, добавляемые ко всем создаваемым ресурсам |
|
|
Активация пропуска проверки TLS-сертификата для |
|
|
Дополнительные метки для |
|
|
Аннотации, добавляемые ко всем создаваемым ресурсам |
|
|
Активация пропуска проверки TLS-сертификата для контроллера |
|
|
Метка |
|
|
Интервал сбора метрик для |
|
|
Правила фильтрации и преобразования меток, применяемые к собранным метрикам. |
|
|
Правила фильтрации и преобразования меток, применяемые к целям сбора до начала сбора метрик. |
|
|
Включение оповещений через |
|
|
Дополнительные метки для |
|
|
Аннотации, добавляемые ко всем создаваемым ресурсам |
|
|
Активация оповещений |
|
|
Уровень важности оповещения устаревшей конфигурации |
|
|
Активация оповещений |
|
|
Уровень важности оповещения незагруженной конфигурации |
|
|
Активация оповещений |
|
|
Уровень важности оповещения исчерпанного пула |
|
|
Регулярное выражение для исключения пулов адресов из срабатывания оповещений исчерпания адресов |
|
|
Активация оповещений для использования пула адресов |
|
|
Список порогов использования пулов адресов и уровней важности соответствующих оповещений |
|
|
Регулярное выражение для исключения пулов адресов из срабатывания оповещений по использованию |
|
|
Активация оповещений |
|
|
Уровень важности оповещения BGP-соединения |
|
|
Дополнительные кастомные оповещения |
|
controller – настройки контроллера MetalLB#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение контроллера MetalLB |
|
|
Уровень логирования контроллера. |
|
|
Путь к Docker-образу контроллера |
|
|
Тег образа контейнера |
|
|
Политика загрузки образа |
|
|
Стратегия обновления |
|
|
Создание |
|
|
Имя |
|
|
Аннотации, добавляемые ко всем создаваемым ресурсам |
|
|
Запуск от имени пользователя без административных полномочий |
|
|
ID пользователя для запуска контейнера |
|
|
Идентификатор группы файловой системы для pod |
|
|
Запрашиваемые ресурсы памяти для контейнера |
|
|
Запрашиваемые ресурсы CPU для контейнера |
|
|
Ограничение ресурсов памяти для контейнера |
|
|
Ограничение ресурсов CPU для контейнера |
|
|
Селектор узлов для планирования pod |
|
|
|
|
|
Имя |
|
|
Класс среды выполнения для контроллера |
|
|
Настройки правила привязки ( |
|
|
Аннотации для pod контроллера |
|
|
Метки, добавляемые ко всем создаваемым ресурсам |
|
|
Включение проверки работоспособности |
|
|
Порт проверки работоспособности |
|
|
Количество неудачных попыток до перевода контейнера в статус |
|
|
Задержка в секундах перед первой проверкой работоспособности |
|
|
Интервал в секундах между проверками работоспособности |
|
|
Количество успешных попыток для подтверждения работоспособности |
|
|
Тайм-аут ожидания проверки работоспособности |
|
|
Включение проверки готовности |
|
|
Порт проверки готовности |
|
|
Количество неудачных попыток до перевода контейнера в статус |
|
|
Задержка в секундах перед первой проверкой готовности |
|
|
Интервал в секундах между проверками готовности |
|
|
Количество успешных попыток для подтверждения готовности |
|
|
Тайм-аут ожидания проверки готовности |
|
|
Дополнительные контейнеры в pod контроллера |
|
speaker – настройки speaker MetalLB#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение |
|
|
Уровень логирования |
|
|
Разрешение размещения на мастер узле |
|
|
Включение |
|
|
Порт для соединений |
|
|
Переопределение адреса для |
|
|
Путь к секретному ключу |
|
|
Исключение интерфейсов из обработки |
|
|
Игнорирование метки |
|
|
Тайм-аут |
|
|
Путь к Docker-образу |
|
|
Тег образа контейнера |
|
|
Политика загрузки образа |
|
|
Стратегия обновления |
|
|
Создание |
|
|
Имя |
|
|
Аннотации, добавляемые ко всем создаваемым ресурсам |
|
|
Контекст безопасности для |
|
|
Запрашиваемые ресурсы памяти для контейнера |
|
|
Запрашиваемые ресурсы CPU для контейнера |
|
|
Ограничение ресурсов памяти для контейнера |
|
|
Ограничение ресурсов CPU для контейнера |
|
|
Селектор узлов для планирования pod |
|
|
|
|
|
Имя |
|
|
Настройки правила привязки ( |
|
|
Класс среды выполнения для |
|
|
Аннотации для pod |
|
|
Метки, добавляемые ко всем создаваемым ресурсам |
|
|
Включение проверки работоспособности для |
|
|
Порт проверки работоспособности |
|
|
Количество неудачных попыток до перевода контейнера в статус |
|
|
Задержка в секундах перед первой проверкой работоспособности |
|
|
Интервал в секундах между проверками работоспособности |
|
|
Количество успешных попыток для подтверждения работоспособности |
|
|
Тайм-аут ожидания проверки работоспособности |
|
|
Включение проверки готовности для |
|
|
Порт проверки готовности |
|
|
Количество неудачных попыток до перевода контейнера в статус |
|
|
Задержка в секундах перед первой проверкой готовности |
|
|
Интервал в секундах между проверками готовности |
|
|
Количество успешных попыток для подтверждения готовности |
|
|
Тайм-аут ожидания проверки готовности |
|
|
Включение проверки запуска для |
|
|
Количество неудачных попыток проверки запуска |
|
|
Интервал в секундах между проверками запуска |
|
|
Включение FRR-контейнера для BGP; устаревший режим, рекомендуется использовать |
|
|
Путь к Docker-образу FRR |
|
|
Тег образа контейнера |
|
|
Политика загрузки образа |
|
|
Порт метрик FRR |
|
|
Ресурсы для FRR контейнера |
|
|
Ресурсы для контейнера reloader |
|
|
Ресурсы для FRR метрик |
|
|
Ресурсы для init-контейнера, копирующего файлы FRR |
|
|
Ресурсы для init-контейнера, копирующего |
|
|
Ресурсы для init-контейнера, копирующего бинарники метрик |
|
|
Дополнительные контейнеры в pod |
|
crds – настройки установки и обновления Custom Resource Definitions (CRD)#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение установки CRD-ресурсов |
|
|
Политика обработки ошибок валидации |
|
frrk8s – интеграция с frr-k8s#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение FRR-K8s как BGP-бекенда; взаимно исключает FRR-режим |
|
|
Использование внешнего экземпляра FRR-K8s вместо встроенного дочернего чарта |
|
|
Пространство имен для внешнего FRR-K8s (применяется только при |
|
frr-k8s – настройки дочернего чарта frr-k8s#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение |
|
|
Правила фильтрации и преобразования меток, применяемые к собранным метрикам. |
|
networkpolicies – настройки сетевых политик#
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Включение установки |
|
|
Включение установки базовой политики |
|
|
Порт Kubernetes API, используемый в сетевых политиках при необходимости переопределения внутреннего |
|