← Назад к вопросам

Как работает MetalLB в Kubernetes?

2.3 Middle🔥 212 комментариев
#Kubernetes#Сети и протоколы

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Принцип работы MetalLB в Kubernetes

MetalLB — это CNI-агент уровня 2 (L2) и 3 (L3), который предоставляет LoadBalancer тип сервисов для bare-metal кластеров Kubernetes, устраняя зависимость от облачных провайдеров. Он эмулирует функциональность облачных балансировщиков, распределяя внешний трафик среди Pod'ов, принадлежащих сервису.

Ключевые режимы работы MetalLB

1. Режим Layer 2 (ARP/NDP)

Наиболее простой и распространённый режим. MetalLB назначает сервису выделенный IP-адрес из пула, а затем отвечает на ARP-запросы (IPv4) или NDP-запросы (IPv6) от клиентов, направляя трафик на один из узлов кластера.

Принцип работы:

  • Контроллер выделяет IP из пула для сервиса типа LoadBalancer.
  • Один из узлов кластера (выбранный лидером для этого IP) начинает отвечать на ARP-запросы, ассоциируя этот IP со своим MAC-адресом.
  • Весь внешний трафик попадает на этот узел.
  • Kube-proxy или CNI (например, Calico, Cilium) далее распределяют трафик по Pod'ам сервиса на всех узлах.
# Пример конфигурации ConfigMap для режима L2
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.1.100-192.168.1.200

Преимущества: простота настройки, отсутствие требований к специальному сетевому оборудованию. Недостатки: единая точка отказа (узел-лидер), потенциальная перегрузка узла-лидера, ограниченная пропускная способность.

2. Режим BGP (Layer 3)

Более продвинутый режим для сложных сетевых инфраструктур. Каждый узел кластера устанавливает BGP-сессии с маршрутизаторами верхнего уровня и анонсирует маршруты к IP-адресам сервисов.

Принцип работы:

  • Контроллер выделяет IP-адрес сервису.
  • Каждый узел (или выбранные спикеры) через демон BGP устанавливает сессии с физическими маршрутизаторами.
  • Маршруты к выделенному IP анонсируются через BGP, часто с разными весами (для балансировки).
  • Внешние маршрутизаторы направляют трафик на узлы напрямую, используя ECMP (Equal-Cost Multi-Path).
# Фрагмент конфигурации BGP
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    peers:
    - peer-address: 10.0.0.1
      peer-asn: 64500
      my-asn: 64501
    address-pools:
    - name: default
      protocol: bgp
      addresses:
      - 172.16.0.0/24

Преимущества: настоящая балансировка нагрузки (ECMP), отказоустойчивость, высокая производительность. Недостатки: требует настройки BGP на сетевом оборудовании, более сложная конфигурация.

Архитектурные компоненты

  • Контроллер (Controller): Отвечает за выделение и освобождение IP-адресов из пулов для сервисов. Мониторит изменения в API Kubernetes.
  • Спикер (Speaker): Демон, работающий на каждом узле (в DaemonSet). Реализует выбранный протокол (ARP, NDP или BGP). В режиме L2 выбирает лидера через алгоритм memberlist.

Типичный workflow

  1. Пользователь создаёт сервис с типом LoadBalancer.
  2. Контроллер MetalLB обнаруживает событие через Kubernetes API.
  3. Контроллер назначает свободный IP из настроенного пула и привязывает его к сервису (через аннотацию metallb.universe.tf/address-pool).
  4. В зависимости от режима:
    • L2: Спикеры выбирают лидера для этого IP. Лидер начинает отвечать на ARP-запросы.
    • BGP: Все спикеры анонсируют маршрут к этому IP через BGP.
  5. Внешний трафик поступает на узел(-ы) кластера.
  6. Стандартные механизмы Kubernetes (kube-proxy, CNI) направляют трафик в конечные Pod'ы.

Критические аспекты для эксплуатации

  • Безопасность: В режиме L2 возможны ARP-спуфинг атаки. Рекомендуется использовать BGP с аутентификацией (MD5) или развертывание в изолированных сетях.
  • Отказоустойчивость: В L2 режиме при падении узла-лидера выбор нового занимает несколько секунд (протокол failover). В BGP режиме отказ узла обрабатывается на уровне маршрутизации.
  • Интеграция: MetalLB отлично работает с большинством CNI (Calico, Flannel, Cilium), но требует совместимости при использовании BGP (во избежание конфликтов анонсов).
  • Мониторинг: Важно отслеживать метрики самого MetalLB (доступны в Prometheus-формате) — количество IP в пуле, состояние BGP-сессий, статус спикеров.

В заключение, MetalLB — это элегантное решение проблемы балансировки в bare-metal окружениях, предлагающее гибкость выбора между простым L2 и продвинутым BGP режимами. Его успешное развертывание требует четкого понимания сетевой инфраструктуры и корректной настройки пулов адресов и протоколов анонсирования.