← Назад к вопросам

Что такое CNI в Kubernetes?

1.2 Junior🔥 212 комментариев
#Kubernetes#Сети и протоколы

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Container Network Interface (CNI) в Kubernetes?

Container Network Interface (CNI) — это стандартизированный протокол и набор библиотек, который определяет, как сетевая конфигурация должна динамически предоставляться контейнерам в среде выполнения, такой как Kubernetes. CNI выступает в роли абстракции между Kubernetes (или другими оркестраторами) и конкретными реализациями сетевых плагинов. Его основная цель — создать унифицированный способ подключения контейнеров к сети и управления их сетевыми пространствами (network namespaces), IP-адресацией, маршрутизацией и политиками.

В экосистеме Kubernetes CNI является де-факто стандартом для сетевого плагина. Когда kubelet на узле создает pod, он вызывает выбранный CNI-плагин через исполняемый файл или библиотеку, чтобы настроить сетевой стек для этого pod.

Ключевые концепции и обязанности CNI

  1. Управление сетевым пространством имен (Network Namespace): Каждый pod в Kubernetes получает собственное изолированное сетевое пространство имен. CNI отвечает за создание виртуальной сетевой пары (veth pair), которая связывает это пространство с основной сетью узла (обычно с мостом cni0).
  2. Выделение IP-адресов: CNI-плагин взаимодействует с IPAM (IP Address Management) компонентом (встроенным или внешним, например, host-local или DHCP) для выделения уникального IP-адреса каждому pod в рамках кластера.
  3. Настройка маршрутов: Плагин конфигурирует таблицы маршрутизации как внутри пространства имен pod, так и на основном узле, чтобы обеспечить правильную связность.
  4. Применение сетевых политик: Многие продвинутые CNI-плагины (например, Calico, Cilium) реализуют механизмы для применения NetworkPolicy Kubernetes, обеспечивая микросегментацию трафика между pod'ами.

Пример базового взаимодействия

Когда kubelet создает pod, он выполняет примерно следующую последовательность действий:

  1. Создает сетевое пространство имен для pod.
  2. Вызывает CNI-плагин (например, /opt/cni/bin/bridge), передавая ему через стандартный ввод (stdin) JSON-конфигурацию и путь к созданному сетевому пространству имен.
  3. Плагин выполняет необходимые операции (создает интерфейс, назначает IP, настраивает маршруты).
  4. Возвращает результат (например, назначенный IP-адрес) в стандартный вывод (stdout), который затем используется kubelet.

Пример простой CNI-конфигурации в файле /etc/cni/net.d/10-mybridge.conf:

{
  "cniVersion": "0.4.0",
  "name": "my-k8s-network",
  "type": "bridge",
  "bridge": "cni0",
  "isDefaultGateway": true,
  "ipMasq": true,
  "ipam": {
    "type": "host-local",
    "subnet": "10.244.0.0/16",
    "routes": [
      { "dst": "0.0.0.0/0" }
    ]
  }
}

Популярные CNI-плагины в Kubernetes

Существует множество реализаций CNI, каждая со своими особенностями:

  • Flannel: Один из самых простых плагинов, предоставляет плоскую L3 сеть (обычно через VXLAN или host-gw).
  • Calico: Мощный плагин, который может работать как в режиме L3 (BGP), так и в overlay-сетях. Известен своей производительной реализацией сетевых политик.
  • Cilium: Плагин нового поколения, основанный на eBPF. Обеспечивает не только базовую сетевую связность, но и расширенные возможности безопасности, наблюдаемости и балансировки нагрузки на уровне L3-L7.
  • Weave Net: Создает overlay-сеть с собственным протоколом маршрутизации, не требующим специальной настройки на хостах.
  • Amazon VPC CNI (для EKS): Интегрирует pod'ы напрямую в VPC AWS, назначая им IP-адреса из диапазона подсети VPC.

Почему CNI важен для DevOps?

  1. Гибкость и выбор: Абстракция CNI позволяет выбирать оптимальное сетевое решение под конкретные требования: производительность, безопасность, интеграция с облаком.
  2. Стандартизация: Упрощает жизнь разработчикам плагинов и администраторам кластеров благодаря единому интерфейсу.
  3. Динамическая конфигурация: Сеть адаптируется к жизненному циклу pod'ов без ручного вмешательства.
  4. Основа для расширенных функций: Такие концепции, как Service Mesh (Istio, Linkerd) и расширенные политики безопасности, часто строятся поверх надежной сетевой инфраструктуры, предоставляемой CNI.

Таким образом, CNI — это фундаментальный строительный блок сетевой модели Kubernetes, который превращает набор отдельных узлов в единый, согласованный и управляемый кластер, где каждый pod может общаться с любым другим pod'ом, соблюдая заданные политики. Выбор и корректная настройка CNI-плагина критически важны для стабильности, производительности и безопасности всего кластера Kubernetes.

Что такое CNI в Kubernetes? | PrepBro