Расширенный Kubernetes: понимание CNI и плагинов CNI

Kubernetes

Поймите принцип работы типичных сетевых подключаемых модулей и освойте использование подключаемых модулей CNI.

Что такое CNI

  • Контейнерный сетевой интерфейс, интерфейс API для контейнерной сети.
  • Kubelet настраивает сеть, вызывая различные сетевые плагины через этот стандартный API.
  • Плагины CNI: серия сетевых плагинов, реализующих интерфейс CNI API.

Как использовать в Кубернете

  1. Настройте файл конфигурации CNI (/etc/cni/net.d/xxnet.conf)
  2. Установите бинарный плагин CNI (/opt/cni/bin/xxnet)
  3. Создайте Pod на этом узле
  4. Kubelet выполнит плагин CNI в соответствии с файлом конфигурации CNI.
  5. Настройка сети Pod завершена.

Если вы просто используете плагин CNI, большинство поставщиков плагинов CNI можно установить одним щелчком мыши, что очень просто. Например, для установки Flannel требуется только одна команда для настройки и настройки автоматической установки двоичных файлов:

For Kubernetes v1.7+                      
# kubectl apply -f http://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Flannel автоматически скопирует конфигурацию и двоичный файл в папку конфигурации Node через Daemonset.

Как выбрать плагин CNI

Плагины CNI обычно имеют три режима

В сообществе так много плагинов, как мне выбрать?

  1. Экологические ограничения:
    Разные среды поддерживают разные базовые возможности
    • ВиртуализацияСетевых ограничений много, поэтому нужно выбирать плагины, поддерживающие Overlay: Flannel-vxlan, Calico-ipip, Weave и т.д.
    • физическая машинаВыберите плагин Underlay или Routing. Например: calico-bgp, flannel-hostgw, sriov и т.д.
    • общедоступное облакоЕсли да, выберите поставщика облачных услуг для поддержки. Пример: Тервей Алиюна.
  2. Функциональные требования:Различные реализации поддерживают разные функции
    • БезопасностьNetworkPolicy поддерживает политики доступа между сетями pod, Calico, Weave.
    • Взаимосвязь ресурсов вне кластераВыберите сеть Underlay, например sriov, calico-bgp.
    • Обнаружение сервисов и балансировка нагрузкиМногие плагины Underlay не поддерживают обнаружение сервисов K8s.
  3. Требования к производительности:Различные реализации имеют разные штрафы за производительность
    • Скорость создания подаСетевые подключаемые модули режима наложения или маршрутизации создаются быстро, тогда как сетевые подключаемые модули режима нижнего слоя создаются медленно.
    • Производительность сети PodПроизводительность оверлея относительно низкая, сетевые плагины режима подложки и режима маршрутизации работают хорошо.

Как разработать собственный плагин CNI

Реализация плагина CNI обычно требует двух частей:

  • Бинарный плагин CNI для настройки сетевой карты и IP-адреса Pod и т. д. ——> Подключите Pod к Интернету.
  • Процесс Daemon для управления сетевым соединением между модулями -> подключить модуль к сети.

Подключите Pod к Интернету

  1. Подготовка виртуальных сетевых карт для модулей
    • Создайте виртуальную пару NIC "veth"
    • Переместите сетевую карту на одном конце в модуль
  2. Назначение IP-адресов модулям
    • Назначьте поду уникальный IP-адрес в кластере.
    • Как правило, сегмент сети Pod сегментируется Node.
    • Затем каждому поду назначается IP-адрес из сегмента узла.
  3. Настройте IP-адрес и маршрутизацию пода
    • Настройте IP-адрес, назначенный виртуальной сетевой карте модуля.
    • Настройте маршрутизацию сегмента сети кластера на сетевой карте Pod.
    • Настройте маршрут к IP-адресу пода на хосте к одноранговой виртуальной сетевой карте.

Подключите модуль к Интернету: сделайте IP-адрес каждого модуля доступным в кластере.

  1. Процесс CNI Daemon изучает IP-адреса и узлы всех модулей в кластере.
    • Обычно IP-адрес и узел существующего пода получают путем запроса K8S APIServer.
    • Отслеживайте создание новых узлов и модулей K8S APIServer и автоматически настраивайте их.
  2. CNI Daemon настраивает сеть, чтобы открыть доступ к IP-адресу модуля.
    • Создайте туннели ко всем узлам: оверлейные туннели, таблицы маршрутизации VPC, маршруты BGP и т. д.
    • Свяжите IP-адреса всех модулей с каналами их узлов: маршрутизация Linux, таблица переадресации Fdb, таблица потоков OVS и т. д.

Если это полезно для вас, не забывайте поощрять друг друга, помогать лайкать, добавлять в избранное или пересылать~