Модуль cni-flannel обеспечивает работу сети между узлами в кластере Deckhouse Platform. Модуль основан на проекте Flannel и реализует Container Network Interface (CNI).

Подробнее с описанием настройки и примерами использования модуля можно ознакомиться в разделе документации модуля.

Архитектура модуля

Для упрощения схемы приняты следующие допущения:

  • На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой.
  • Поды могут быть запущены в нескольких репликах, однако на схеме все поды изображены в одной реплике.

Архитектура модуля cni-flannel на уровне 2 модели C4 и его взаимодействия с другими компонентами платформы Deckhouse изображена на следующей диаграмме:

Архитектура модуля cni-flannel

Компоненты модуля

Модуль состоит из следующих компонентов:

  1. 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 — основной контейнер.
  2. 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.

Взаимодействия модуля

Модуль взаимодействует со следующими компонентами:

  1. Kube-apiserver:

    • следит за кастомными ресурсами CNIMigration и CNINodeMigration, а также ресурсами Pod и Node;
    • обновляет статус ресурса Node.
  2. Bridge (CNI-плагин) — создаёт сетевой интерфейс пода.

С модулем взаимодействуют следующие внешние компоненты:

  1. Containerd — запускает исполняемый файл flannel с определёнными командами в соответствии со спецификацией CNI.

Дополнительные ресурсы