Сетевое взаимодействие pod’ов с разных нод

Сетевое взаимодействие pod’ов с разных нод

Когда поды находятся на разных нодах, стандартного сетевого моста (L2 Bridge) внутри одной машины уже недостаточно. Пакет должен покинуть физический интерфейс одной ноды и дойти до другой, при этом сохранив уникальность IP-адресов.

Сетевая модель: L3 Routing vs Overlay

Kubernetes требует, чтобы все поды могли общаться друг с другом напрямую по IP без NAT. Для реализации этого между нодами используются два основных подхода: Маршрутизация (Routing) и Инкапсуляция (Overlay).

1. Прямая маршрутизация (L3 Routing)

В этом режиме каждая нода знает, какие диапазоны IP-адресов (Pod CIDR) закреплены за другими нодами.

  • Как это работает: Когда Pod A на Node 1 хочет отправить пакет Pod B на Node 2, Node 1 просто отправляет пакет в физическую сеть. Сетевое оборудование (роутеры) или таблицы маршрутизации на самих нодах знают, что трафик для 10.244.2.0/24 нужно отправить на IP адрес Node 2.
  • Пример: Режим BGP в Calico.

2. Инкапсуляция / Overlay-сети

Если физическая сеть между нодами «глупая» (не знает о подсетях подов) или ноды находятся в разных подсетях, используется Overlay. Пакет пода упаковывается внутрь обычного UDP-пакета.

  • VXLAN (Virtual Extensible LAN): Самый популярный метод. Оригинальный Ethernet-фрейм пода упаковывается в UDP-пакет с заголовком VXLAN. Для физической сети это выглядит как обычный трафик между IP-адресами нод.
  • Процесс:
    1. Пакет выходит из пода.
    2. На выходе из ноды интерфейс (например, flannel.1) «заворачивает» его в UDP.
    3. Пакет летит по физической сети до Node 2.
    4. Node 2 распаковывает его и доставляет целевому поду.

Роль CNI (Container Network Interface)

Kubernetes сам не настраивает мосты и маршруты. Он вызывает CNI-плагин, который делает всю грязную работу.

Популярные CNI и их методы:

  • Flannel: Самый простой. Обычно использует VXLAN для создания overlay-сети.
  • Calico: Мощный инструмент. Может работать через BGP (чистая маршрутизация без оверхеда) или через IP-in-IP (инкапсуляция).
  • Cilium: Использует технологию eBPF для высокопроизводительной маршрутизации и безопасности.

Путь пакета между нодами (Step-by-Step)

Представим, что Pod A (10.244.1.5) на Node 1 пингует Pod B (10.244.2.10) на Node 2.

  1. Внутри пода: Пакет уходит на eth0 (veth-пару) и попадает в root неймспейс ноды.
  2. На мосту ноды: Мост видит, что IP назначения (10.244.2.10) не принадлежит ни одному поду на этой ноде.
  3. Таблица маршрутизации: Система видит маршрут: "Все, что в 10.244.2.0/24, отправлять через CNI-интерфейс".
  4. Инкапсуляция (если Overlay): CNI-интерфейс берет пакет пода и помещает его в UDP-пакет, где:
    • Source IP: IP Node 1
    • Dest IP: IP Node 2
  5. Транзит: Физическая сеть доставляет UDP-пакет на Node 2.
  6. Распаковка: Ядро Node 2 получает UDP-пакет на порт VXLAN, вынимает из него оригинальный пакет пода и отправляет его на свой локальный мост.
  7. Доставка: Мост Node 2 доставляет пакет в eth0 целевого Pod B.

Итог

МетодПлюсыМинусы
Routing (BGP)Максимальная скорость, нет нагрузки на CPU для упаковки пакетов.Сложная настройка сети, оборудование должно поддерживать BGP.
Overlay (VXLAN)Работает в любой сети (даже в облаках), простая настройка.Небольшой оверхед на размер пакета (MTU) и нагрузка на CPU.

Если у вас тормозит сеть в кластере, первое, что стоит проверить — это MTU. Из-за инкапсуляции (заголовков VXLAN) полезный размер пакета уменьшается, и если это не учесть, пакеты будут фрагментироваться, что сильно замедляет связь.