Модуль cni-flannel обеспечивает работу сети между узлами в кластере Deckhouse Platform. Модуль основан на проекте Flannel и реализует Container Network Interface (CNI).
Подробнее с описанием настройки и примерами использования модуля можно ознакомиться в разделе документации модуля.
Архитектура модуля
Для упрощения схемы приняты следующие допущения:
- На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме все поды изображены в одной реплике.
Архитектура модуля cni-flannel на уровне 2 модели C4 и его взаимодействия с другими компонентами платформы Deckhouse изображена на следующей диаграмме:
Компоненты модуля
Модуль состоит из следующих компонентов:
-
Flannel (DaemonSet) — компонент запускается на каждом узле кластера и реализует L3-оверлей-сеть Flannel между узлами.
В зависимости от параметра
podNetworkModeиспользуется соответствующий бэкенд host-gw или VXLAN.Компонент берёт подсеть подов из поля
spec.podCIDRресурса Node и записывает полученные параметры подсети (сеть, подсеть, MTU) в файл/run/flannel/subnet.envна узле. Этот файл используется CNI-плагином Flannel при каждом создании или удалении пода.Состоит из следующих контейнеров:
- cni-migration-init-checker — init-контейнер, ожидающий завершения процесса миграции с другого CNI-плагина, если такая миграция была запущена;
- iptables-wrapper-init — init-контейнер, выполняющий подготовку необходимых для работы с iptables исполняемых файлов;
- handle-vxlan-offload — опциональный init-контейнер, исправляющий настройки UDP-сегментации на сетевом интерфейсе узла. Создаётся контроллером Deckhouse, если параметр
podNetworkModeпринимает значениеVXLAN; - kube-flannel — основной контейнер.
-
Flannel (CNI-плагин) — исполняемый файл, запускаемый компонентом containerd в соответствии со спецификацией CNI, например ADD при создании сетевого пространства имён пода и DEL при его удалении.
При запуске компонент читает параметры подсети из файла
/run/flannel/subnet.envи делегирует создание сетевого интерфейса пода CNI-плагинуbridge, который, в свою очередь, запрашивает выделение IP-адреса у плагина IP Address Management (IPAM)host-local. Оба плагина,bridgeиhost-local, являются стандартными Open Source-плагинами CNI, устанавливаемыми на каждый узел кластера независимо от этого модуля, в рамках установки kubelet.
Взаимодействия модуля
Модуль взаимодействует со следующими компонентами:
-
Kube-apiserver:
- следит за кастомными ресурсами CNIMigration и CNINodeMigration, а также ресурсами Pod и Node;
- обновляет статус ресурса Node.
-
Bridge (CNI-плагин) — создаёт сетевой интерфейс пода.
С модулем взаимодействуют следующие внешние компоненты:
- Containerd — запускает исполняемый файл flannel с определёнными командами в соответствии со спецификацией CNI.