Сетевая модель Kubernetes строится на принципе «плоской сети». Это означает, что любой под может достучаться до другого пода по его IP-адресу без использования NAT, независимо от того, на одной ноде они находятся или на разных.
Ниже разберем, как это реализовано на уровне операционной системы Linux внутри виртуальной машины (ноды).
Фундаментальные принципы сети K8s
- Общий стек для контейнеров: Все контейнеры внутри одного пода делят один сетевой неймспейс, один IP и один набор портов. Это заслуга pause-контейнера, который «держит» сеть для пода.
- Прямая видимость: 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).
Схема взаимодействия:
- Трафик выходит из Pod 1 через интерфейс
eth0. - По виртуальному кабелю он попадает на
vethxxxв root неймспейсе. - Далее пакет попадает на Bridge.
- Мост смотрит на MAC/IP адрес назначения и перебрасывает пакет на
vethyyy, который ведет в Pod 2.
Итог
| Компонент | Роль в сети |
| Pause Container | Резервирует IP и сетевой стек для пода. |
| Netns | Изолирует сетевое окружение одного пода от другого. |
| veth pair | Соединяет изолированный неймспейс пода с основной нодой. |
| Bridge | Позволяет подам на одной ноде обмениваться трафиком локально. |
Что если поды на разных нодах? В этом случае в игру вступает CNI (Container Network Interface), например Calico или Flannel, который настраивает маршрутизацию или инкапсуляцию (VXLAN) между физическими интерфейсами eth0 разных машин.