![](https://habrastorage.org/getpro/habr/upload_files/ca5/37f/c01/ca537fc0159aa2950e80d69a28312079.png)
Как работает связь между подами в Kubernetes? Как трафик достигает пода?
В этой статье вы узнаете, как работает низкоуровневая сеть в Kubernetes.
Давайте начнем с того, что сосредоточимся на сети модулей и узлов.
При развертывании пода происходит следующее:
Модуль получает собственное сетевое пространство имен.
Присваивается IP-адрес.
Все контейнеры в модуле используют одно и то же сетевое пространство имен и могут видеть друг друга на localhost.
![](https://habrastorage.org/getpro/habr/upload_files/409/975/e4f/409975e4f9c0039cb83b446a06ef6791.png)
Модуль должен сначала иметь доступ к корневому пространству имен узла, чтобы получить доступ к другим модулям.
Это достигается с помощью виртуальной пары eth, соединяющей 2 пространства имен: pod и root.
Мост позволяет трафику проходить между виртуальными парами и проходить через общее корневое пространство имен.
![](https://habrastorage.org/getpro/habr/upload_files/189/74c/fe5/18974cfe5ff26e7f8db4d59a951aa133.png)
Так что же происходит, когда Pod-A хочет отправить сообщение Pod-B?
Поскольку пункт назначения не является одним из контейнеров в пространстве имен, Pod-A отправляет пакет на свой интерфейс по умолчанию eth0
.
Этот интерфейс привязан к паре veth, и пакеты перенаправляются в корневое пространство имен.
![](https://habrastorage.org/getpro/habr/upload_files/0df/d54/72b/0dfd5472b958def90a756122730dbfd8.png)
Мост ethernet, действующий как виртуальный коммутатор, должен каким-то образом преобразовать IP-адрес целевого модуля (Pod-B) в его MAC-адрес.
![](https://habrastorage.org/getpro/habr/upload_files/b89/2da/239/b892da239859fa836987346ba2b3fb71.png)
На помощь приходит протокол ARP.
Когда кадр достигает моста, всем подключенным устройствам отправляется широковещательная рассылка ARP.
Мост кричит: «У кого есть IP-адрес Pod-B?»
![](https://habrastorage.org/getpro/habr/upload_files/0aa/152/05c/0aa15205ca6e021c5768932677ad17c3.png)
Получен ответ с MAC-адресом интерфейса, соединяющего Pod-B, который хранится в кэше ARP моста (таблица поиска).
![](https://habrastorage.org/getpro/habr/upload_files/3b3/897/6ed/3b38976ed215b7020e2df17c408add48.png)
После сохранения сопоставления IP- и MAC-адресов мост просматривает таблицу и пересылает пакет в нужную конечную точку.
Пакет достигает Pod-B veth в корневом пространстве имен, а оттуда быстро достигает интерфейса eth0 внутри пространства имен Pod-B.
![](https://habrastorage.org/getpro/habr/upload_files/b0b/508/89e/b0b50889ede1aa23135a09460a94b731.png)
При этом связь между Pod-A и Pod-B была успешной.
Дополнительный прыжок необходим модулям для связи между разными узлами, поскольку пакеты должны проходить через сеть узлов, чтобы достичь пункта назначения.
![](https://habrastorage.org/getpro/habr/upload_files/c3f/255/0fe/c3f2550fe1bc4245252bd7ac8171910f.png)
Это «простая» сетевая версия.
Как это меняется при установке подключаемого модуля CNI, использующего оверлейную сеть?
Возьмем, к примеру, фланель.
Flannel устанавливает новый интерфейс между узлом eth0
и мостом контейнера cni0
.
Весь трафик, проходящий через этот интерфейс, инкапсулируется (например, VXLAN, Wireguard и так далее).
![](https://habrastorage.org/getpro/habr/upload_files/072/3e2/7ba/0723e27ba296277a41f8b957b03bf009.png)
В новых пакетах в качестве источника и получателя указаны не IP-адреса модулей, а IP-адреса узлов.
Таким образом, пакет-обёртка выйдет из узла и отправится к узлу назначения.
![](https://habrastorage.org/getpro/habr/upload_files/339/351/d87/339351d8792820e8124122d830fd875d.png)
Оказавшись на другой стороне, flannel.1
интерфейс разворачивает пакет и позволяет исходному pod-to-pod пакету достичь места назначения.
![](https://habrastorage.org/getpro/habr/upload_files/f6a/315/505/f6a315505f9fcf92a7b877bae99d7d34.png)
Откуда Flannel знает, где находятся все модули и их IP-адреса?
На каждом узле Flannel синхронизирует распределение IP-адресов в распределенной базе данных.
Другие экземпляры могут запрашивать эту базу данных, чтобы решить, куда отправлять эти пакеты.
![](https://habrastorage.org/getpro/habr/upload_files/ac2/89e/91a/ac289e91a011f9ad8dad422abb555d44.png)
Узнать больше про работу Kubernetes, можно в Слёрме на курсе «Kubernetes Мега». Это продвинутый курс для тех, кто уже знает этот инструмент, но хочет заглянуть под капот, а также повысить стабильность и отказоустойчивость инфраструктуры.
![](https://habrastorage.org/getpro/habr/upload_files/827/8ac/c85/8278acc85ef977a1bce6271cf32d13bc.jpg)
Курс ? «Kubernetes Мега» на нашем сайте.