Сетевое взаимодействие pod-ов одной ноды

Сетевое взаимодействие pod-ов одной ноды

Сетевая модель Kubernetes строится на принципе «плоской сети». Это означает, что любой под может достучаться до другого пода по его IP-адресу без использования NAT, независимо от того, на одной ноде они находятся или на разных.

Ниже разберем, как это реализовано на уровне операционной системы Linux внутри виртуальной машины (ноды).

Фундаментальные принципы сети K8s

  1. Общий стек для контейнеров: Все контейнеры внутри одного пода делят один сетевой неймспейс, один IP и один набор портов. Это заслуга pause-контейнера, который «держит» сеть для пода.
  2. Прямая видимость: IP-адрес, который под видит «изнутри» (команда ip addr), должен быть точно таким же, каким его видят все остальные поды в кластере.

Эволюция сетевого взаимодействия (от ВМ до моста)

1. Сетевой неймспейс в современной ВМ

В Linux изоляция сети достигается через Network Namespaces (netns). По умолчанию в ВМ есть только root неймспейс, привязанный к физической или виртуальной карте eth0.

Когда мы создаем неймспейс (ip netns add ns-1), мы создаем изолированную копию сетевого стека со своими таблицами маршрутизации и интерфейсами.

2. Сетевой неймспейс Pod'а

В Kubernetes каждый под получает собственный неймспейс. Внутри этого пространства работает специальный pause container, который настраивает сеть, а пользовательские контейнеры (A и B) просто подключаются к ней.

3. Сетевые пары veth

Неймспейс пода изолирован от основной системы. Чтобы «прокинуть» туда интернет или дать возможность общаться с другими подами, используются veth-пары (virtual ethernet).

Это работает как виртуальный кабель: один конец (eth0) вставляется в неймспейс пода, а другой (vethxxx) остается в root неймспейсе ноды.

4. Network Bridge (Сетевой мост)

Чтобы поды на одной ноде могли «видеть» друг друга, все свободные концы veth-пар соединяются в один виртуальный коммутатор — Bridge (обычно это cbr0 или docker0).

Схема взаимодействия:

  1. Трафик выходит из Pod 1 через интерфейс eth0.
  2. По виртуальному кабелю он попадает на vethxxx в root неймспейсе.
  3. Далее пакет попадает на Bridge.
  4. Мост смотрит на MAC/IP адрес назначения и перебрасывает пакет на vethyyy, который ведет в Pod 2.

Итог

КомпонентРоль в сети
Pause ContainerРезервирует IP и сетевой стек для пода.
NetnsИзолирует сетевое окружение одного пода от другого.
veth pairСоединяет изолированный неймспейс пода с основной нодой.
BridgeПозволяет подам на одной ноде обмениваться трафиком локально.

Что если поды на разных нодах? В этом случае в игру вступает CNI (Container Network Interface), например Calico или Flannel, который настраивает маршрутизацию или инкапсуляцию (VXLAN) между физическими интерфейсами eth0 разных машин.