Ответ
CNI (Container Network Interface) — это стандарт и набор плагинов, которые Kubernetes использует для настройки сетевых интерфейсов и подключения подов к сети. Когда kubelet создаёт под, он вызывает выбранный CNI-плагин, который выделяет IP-адрес, настраивает сетевые интерфейсы и обеспечивает сетевое соединение.
Основные задачи CNI:
- Подключение пода к сети: Создание виртуального интерфейса (veth pair) и подключение его к сетевому мосту (например,
cni0) или другому устройству. - Управление IP-адресами: Выделение уникального IP-адреса для каждого пода из заданного пула (IPAM — IP Address Management).
- Очистка ресурсов: Удаление сетевых интерфейсов и освобождение IP-адресов при удалении пода.
Популярные CNI-плагины:
- Calico: Предоставляет сетевое соединение и политики безопасности (Network Policies) на основе BGP или IP-in-IP.
- Cilium: Работает на основе eBPF, предлагая расширенные возможности сетевой безопасности, наблюдения и балансировки нагрузки.
- Flannel: Простое overlay-решение, создающее виртуальную сеть поверх существующей инфраструктуры.
Пример базовой CNI-конфигурации (в формате JSON), которую kubelet передаёт плагину:
{
"cniVersion": "0.4.0",
"name": "my-k8s-network",
"type": "bridge",
"bridge": "cni0",
"ipam": {
"type": "host-local",
"subnet": "10.244.0.0/24",
"routes": [
{ "dst": "0.0.0.0/0" }
]
}
}
Без работающего CNI-плагина поды в кластере Kubernetes не смогут общаться друг с другом или с внешним миром.