Когда поды находятся на разных нодах, стандартного сетевого моста (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-адресами нод.
- Процесс:
- Пакет выходит из пода.
- На выходе из ноды интерфейс (например,
flannel.1) «заворачивает» его в UDP. - Пакет летит по физической сети до Node 2.
- 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.
- Внутри пода: Пакет уходит на
eth0(veth-пару) и попадает вrootнеймспейс ноды. - На мосту ноды: Мост видит, что IP назначения (
10.244.2.10) не принадлежит ни одному поду на этой ноде. - Таблица маршрутизации: Система видит маршрут: "Все, что в 10.244.2.0/24, отправлять через CNI-интерфейс".
- Инкапсуляция (если Overlay): CNI-интерфейс берет пакет пода и помещает его в UDP-пакет, где:
- Source IP: IP Node 1
- Dest IP: IP Node 2
- Транзит: Физическая сеть доставляет UDP-пакет на Node 2.
- Распаковка: Ядро Node 2 получает UDP-пакет на порт VXLAN, вынимает из него оригинальный пакет пода и отправляет его на свой локальный мост.
- Доставка: Мост Node 2 доставляет пакет в
eth0целевого Pod B.
Итог
| Метод | Плюсы | Минусы |
| Routing (BGP) | Максимальная скорость, нет нагрузки на CPU для упаковки пакетов. | Сложная настройка сети, оборудование должно поддерживать BGP. |
| Overlay (VXLAN) | Работает в любой сети (даже в облаках), простая настройка. | Небольшой оверхед на размер пакета (MTU) и нагрузка на CPU. |
Если у вас тормозит сеть в кластере, первое, что стоит проверить — это MTU. Из-за инкапсуляции (заголовков VXLAN) полезный размер пакета уменьшается, и если это не учесть, пакеты будут фрагментироваться, что сильно замедляет связь.