Cilium
Cilium (от лат. cilium — ресница) — это программное обеспечение с открытым исходным кодом, предназначенное для обеспечения, мониторинга и управления сетевым взаимодействием между контейнеризированными приложениями, работающими в среде оркестрации Kubernetes. Cilium реализует сетевую модель для контейнеров на уровне ядра операционной системы, используя технологию eBPF (extended Berkeley Packet Filter), что позволяет обрабатывать сетевые пакеты и применять политики безопасности без модификации ядра или приложений.
История
Проект Cilium был основан в 2015 году Томасом Графом (Thomas Graf) и Дэниелом Боркманном (Daniel Borkmann) — ключевыми разработчиками подсистемы eBPF в ядре Linux. Первоначально Cilium разрабатывался как проект компании Covalent, которая позже была приобретена компанией Isovalent. В 2021 году Cilium стал инкубационным проектом Cloud Native Computing Foundation (CNCF), а в 2023 году получил статус «graduated» (завершённого) проекта CNCF, что подтвердило его зрелость и широкое промышленное применение.
Основной движущей силой разработки Cilium стала необходимость решить проблемы традиционных сетевых решений для контейнеров (например, Calico, Flannel, Weave), которые полагались на iptables и другие устаревшие механизмы ядра Linux, неэффективные при большом количестве контейнеров и частых изменениях в сети. Внедрение eBPF позволило Cilium обеспечить высокую производительность, низкую задержку и масштабируемость, недостижимые для старых подходов.
Архитектура и принципы работы
Cilium работает на уровне ядра Linux, используя eBPF для динамической загрузки и выполнения программ в пространстве ядра. Это позволяет обрабатывать сетевые пакеты, применять политики безопасности и собирать метрики без переключения контекста между пользовательским и ядерным пространством, что значительно ускоряет обработку трафика.
Компоненты Cilium
- Cilium Agent — демон, работающий на каждом узле кластера Kubernetes. Он отвечает за управление сетевыми интерфейсами, маршрутизацию, применение политик безопасности и взаимодействие с API Kubernetes.
- Cilium Operator — компонент, управляющий глобальными задачами, такими как распределение IP-адресов, управление сервисами и синхронизация состояний между узлами.
- Cilium CNI (Container Network Interface) — плагин, реализующий стандарт CNI для подключения контейнеров к сети. Он создаёт виртуальные сетевые интерфейсы для подов и назначает им IP-адреса.
- Cilium Hubble — подсистема мониторинга и визуализации сетевого трафика, предоставляющая информацию о соединениях, задержках, потерях пакетов и безопасности.
- Cilium CLI — утилита командной строки для управления и диагностики Cilium.
eBPF и его роль
eBPF — это технология, позволяющая выполнять пользовательские программы в ядре Linux в безопасном изолированном окружении. Cilium использует eBPF для:
- Маршрутизации пакетов — eBPF-программы перехватывают и перенаправляют пакеты между подами, узлами и внешними сетями.
- Применения политик безопасности — eBPF-программы проверяют каждый пакет на соответствие правилам доступа на основе меток (labels) Kubernetes, IP-адресов, портов и протоколов.
- Сбора метрик — eBPF-программы собирают статистику о трафике (количество пакетов, байтов, задержки) и передают её в Hubble.
- Балансировки нагрузки — eBPF-программы реализуют механизмы балансировки трафика между подами сервисов.
Ключевые возможности
Сетевое взаимодействие
Cilium предоставляет полную сетевую модель для Kubernetes, поддерживая:
- Overlay-сети — использование VXLAN, Geneve или других туннельных протоколов для изоляции трафика между узлами.
- Direct-маршрутизацию — прямое соединение между подами на разных узлах без туннелирования, что снижает накладные расходы.
- IPv6 — полная поддержка IPv6-адресации.
- Multi-cluster networking — объединение нескольких кластеров Kubernetes в единую сеть (Cilium Cluster Mesh).
Безопасность
Cilium реализует модель безопасности на основе идентификации (identity-based security), используя метки Kubernetes (labels) для определения субъектов и объектов доступа. Политики безопасности могут быть определены на уровне:
- Сетевых политик (NetworkPolicy) — стандартные политики Kubernetes, расширенные Cilium для поддержки L3-L7 (HTTP, gRPC, Kafka, DNS и др.).
- Политик на основе DNS — разрешение доступа к внешним ресурсам по доменным именам.
- Политик на основе сертификатов — интеграция с mTLS (mutual TLS) для аутентификации и шифрования трафика между подами.
- Политик на основе API — фильтрация запросов к API-серверам (например, HTTP-методы, пути, заголовки).
Наблюдаемость
Hubble предоставляет:
- Карту сервисов — визуализацию всех сетевых соединений между подами, сервисами и внешними ресурсами.
- Мониторинг в реальном времени — отображение метрик трафика (пропускная способность, задержки, количество ошибок).
- Журналы потоков — запись всех сетевых соединений с метаданными (источник, назначение, протокол, порт, решение политики).
- Интеграцию с Prometheus — экспорт метрик для систем мониторинга и алертинга.
Производительность
Благодаря использованию eBPF, Cilium демонстрирует высокую производительность:
- Низкая задержка — обработка пакетов в ядре без переключения контекста.
- Высокая пропускная способность — близкая к нативной производительности сети.
- Масштабируемость — поддержка тысяч узлов и десятков тысяч подов без деградации производительности.
Сравнение с альтернативами
Cilium часто сравнивают с другими популярными сетевыми решениями для Kubernetes:
| Характеристика | Cilium | Calico | Flannel | Weave |
|---|---|---|---|---|
| Технология | eBPF | iptables, eBPF (опционально) | VXLAN, host-gw | VXLAN, weave mesh |
| Производительность | Высокая | Средняя | Средняя | Средняя |
| Безопасность L7 | Полная | Частичная (через прокси) | Нет | Нет |
| Наблюдаемость | Hubble | Prometheus (ограниченно) | Нет | Нет |
| Масштабируемость | Высокая | Высокая | Средняя | Средняя |
| Сложность настройки | Средняя | Средняя | Низкая | Низкая |
Применение
Cilium широко используется в промышленных средах, где требуются высокая производительность, безопасность и наблюдаемость. Основные сценарии применения:
- Крупные кластеры Kubernetes — Cilium позволяет эффективно управлять сетью в кластерах с тысячами узлов и десятками тысяч подов.
- Микросервисные архитектуры — политики безопасности на уровне L7 (HTTP, gRPC, Kafka) позволяют контролировать доступ между микросервисами.
- Мультикластерные развёртывания — Cilium Cluster Mesh обеспечивает единую сеть и политики безопасности для нескольких кластеров.
- Облачные среды — Cilium поддерживается всеми крупными облачными провайдерами (AWS, GCP, Azure, Яндекс.Облако), а также используется в Managed Kubernetes-сервисах.
- Edge-вычисления — Cilium может работать на устройствах с ограниченными ресурсами, используя eBPF для минимизации накладных расходов.
Интересные факты
- Cilium является одним из первых проектов, продемонстрировавших промышленное применение eBPF для сетевых задач.
- Проект активно поддерживается компанией Isovalent, основанной создателями Cilium. В 2023 году Isovalent была приобретена Cisco.
- Cilium используется в производственных средах таких компаний, как Adobe, Bloomberg, Datadog, GitLab, Lyft, Reddit и многих других.
- В 2024 году Cilium стал самым популярным сетевым решением для Kubernetes по данным опроса CNCF.
Критика
Несмотря на преимущества, Cilium имеет и недостатки:
- Сложность настройки — для эффективного использования Cilium требуется глубокое понимание eBPF и архитектуры Kubernetes.
- Зависимость от версии ядра — для работы Cilium требуется ядро Linux версии 4.19 и выше, а для полной функциональности — 5.10 и выше. Старые версии ядер могут не поддерживать все возможности eBPF.
- Ресурсные затраты — хотя Cilium эффективен, он потребляет больше ресурсов (память, CPU) по сравнению с более простыми решениями, такими как Flannel.
- Отсутствие поддержки некоторых протоколов — на момент написания статьи Cilium не поддерживает фильтрацию трафика на уровне L7 для всех протоколов (например, UDP-приложений, не использующих HTTP/gRPC).
Источники
- Официальная документация Cilium (cilium.io)
- Cloud Native Computing Foundation (cncf.io) — статус проектов
- Документация eBPF (ebpf.io)
- «Cilium: eBPF-based Networking, Security, and Observability for Kubernetes» — книга Томаса Графа и Дэниела Боркманна (O'Reilly Media, 2022)
- Статья «Cilium: The Next Generation of Container Networking» на портале The New Stack (2021)
- Материалы конференций KubeCon + CloudNativeCon (2020–2024)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →