Cilium — це хмарне рішення для мереж, спостереження та безпеки.[1] Воно засноване на ядерній технології eBPF, спочатку для підвищення продуктивності мереж, але тепер використовує багато додаткових функцій для різних випадків. Основний мережевий компонент еволюціонував від надання простої 3-го рівня мережі для контейнерів до включення вдосконалених мережевих функцій, таких як BGP та Service mesh, у межах Kubernetes кластера, між кількома кластерами та з'єднанням з зовнішнім світом поза Kubernetes.[1] Hubble був створений як компонент для спостереження за мережею, а Tetragon пізніше додано для спостереження за безпекою та забезпечення виконання в режимі реального часу.[1] Cilium працює на Linux і є одним із перших застосувань eBPF, портованих на Microsoft Windows через проєкт eBPF для Windows.[7]
Еволюція від мережевого CNI (Container Network Interface)
Cilium починав як мережевий CNI[8] для контейнерних робочих навантажень. Спочатку він підтримував лише IPv6 і працював з різними контейнерними оркестраторами, такими як Kubernetes. Початкове бачення Cilium полягало в створенні високопродуктивної мережевої платформи для контейнерів, заснованої на намірах і ідентичностях.[9] Зі зростанням екосистеми хмарних технологій Cilium додав нові проєкти та функції для вирішення нових проблем у цій сфері.
Нижче наведена таблиця, яка узагальнює деякі з найбільш значущих етапів цієї еволюції:
Грудень 2015 року – Перший коміт до проєкту Cilium[10]
Травень 2016 року – Додано підтримку мережевої політики, що розширило сферу застосування за межі лише мереж[11]
Серпень 2016 року – Cilium вперше було анонсовано під час LinuxCon як проєкт, що забезпечує швидке IPv6 мережеве з'єднання контейнерів за допомогою eBPF та XDP.[9] Сьогодні Cilium використовують у Kubernetes від основних хмарних провайдерів і він є одним з найпоширеніших CNIs.
Серпень 2017 року – ebpf-go створено як бібліотеку для читання, модифікації та завантаження програм eBPF і їхнього приєднання до різних хуків.[12]
Квітень 2018 року – Cilium 1.0, перший стабільний реліз[13]
Листопад 2019 року – Запущено Hubble для забезпечення спостереження за мережевими потоками на основі eBPF[14]
Серпень 2020 року – Обрано Google як основу для їхнього Kubernetes Dataplane v2[15]
Вересень 2021 року – AWS обирає Cilium для мережевої безпеки на EKS Anywhere[16]
Жовтень 2021 року – Запущено Pwru для трасування мережевих пакетів у ядрі Linux з розширеними можливостями фільтрації[17][18]
Жовтень 2021 року – Прийнято в CNCF як проєкт на рівні інкубації[19]
Грудень 2021 року – Запущено Service Mesh для Cilium, щоб допомогти керувати трафіком між сервісами[20]
Травень 2022 року – Відкрито вихідний код Tetragon для забезпечення спостереження за безпекою та примусовим виконанням у реальному часі[21][22]
Жовтень 2022 року – Обрано як CNI для Azure[23][24]
Квітень 2023 року – Запуск Cilium Mesh для з'єднання робочих навантажень і машин у хмарі, на локальних серверах та на периферії[25][26][27]
Квітень 2023 року – Перша CiliumCon проведена в рамках KubeCon[28]
Жовтень 2023 року – Cilium стає проєктом, що завершив інкубацію у CNCF [29]
Cilium було прийнято до Cloud Native Computing Foundation 13 жовтня 2021 року як проєкт на рівні інкубації. 27 жовтня 2022 року він подав заявку на перехід до статусу завершеного проєкту.[19] Через рік Cilium став завершеним проєктом. Cilium є одним з найбільш динамічних проєктів у екосистемі CNCF.[30]
Sky використовує Cilium як їхній CNI та для мережевої безпеки[42]
The New York Times використовує Cilium на EKS для багаторегіональних мультитенантних кластерів[43]
Trip.com використовує Cilium як локально, так і в AWS[44]
Cilium є CNI для багатьох хмарних провайдерів, зокрема Alibaba,[45] APPUiO,[46] Azure,[47] AWS,[16] DigitalOcean,[48] Exoscale,[49] Google Cloud,[15] Hetzner,[50] та Tencent Cloud.[51]
Cilium розпочався як проєкт для мереж контейнерів. Зі зростанням Kubernetes та оркестрації контейнерів Cilium став CNI,[8] забезпечуючи базові функції, такі як налаштування мережевих інтерфейсів контейнерів та підключення Pod до Pod. Від самого початку Cilium будував свою мережу на основі eBPF, а не iptables або IPVS, роблячи ставку на те, що eBPF стане майбутнім хмарних нативних мереж.[52]
eBPF-датаплейн Cilium забезпечує просту плоску мережу рівня 3 з можливістю охоплювати кілька кластерів як у нативному режимі маршрутизації, так і в режимі оверлей за допомогою Cilium Cluster Mesh. Cilium має обізнаність про протоколи рівня 7 і може застосовувати мережеві політики на рівнях 3 до 7, а також з використанням FQDN через модель безпеки, що базується на ідентифікації, відокремленій від мережевих адрес.
Cilium реалізує розподілене балансування навантаження для трафіку між Pod-ами та зовнішніми сервісами, і може повністю замінити kube-proxy,[53] використовуючи XDP, балансування навантаження на основі сокетів та ефективні хеш-таблиці у eBPF. Cilium також підтримує розширені функції, такі як інтегровані шлюзи для вхідного та вихідного трафіку,[54] керування пропускною здатністю, окремий балансувальник навантаження та сервісну сітку.[55]
Cilium є першим CNI, що підтримує передові функції ядра, такі як BBR TCP управління перевантаженням[56] та BIG TCP[57] для Kubernetes Pod-ів.[58]
Hubble — це інструмент для спостереження, сервісна мапа та інтерфейс користувача для Cilium, який постачається разом із CNI.[59][60] Його можна використовувати для спостереження за окремими потоками мережевих пакетів, перегляду рішень мережевої політики щодо дозволу або блокування трафіку, а також для побудови сервісних карт, що показують, як взаємодіють сервіси Kubernetes.[61] Hubble може експортувати ці дані до Prometheus, OpenTelemetry, Grafana та Fluentd для подальшого аналізу показників рівнів 3/4 та 7.[62]
Tetragon — це проєкт для спостереження за безпекою та забезпечення виконання в реальному часі для Cilium.[63] Tetragon — це гнучкий інструмент для спостереження за безпекою та забезпечення виконання, орієнтований на Kubernetes, який застосовує політики та фільтрацію безпосередньо за допомогою eBPF. Він дозволяє користувачам відстежувати та спостерігати повний життєвий цикл кожного процесу виконання на машині, трансформувати політики для моніторингу файлів, мережевого спостереження, безпеки контейнерів тощо у програми eBPF, а також здійснювати синхронне моніторинг, фільтрацію та виконання безпосередньо в ядрі.
ebpf-go — це бібліотека на чистому Go для взаємодії з підсистемою eBPF в ядрі Linux.[64] Вона має мінімум зовнішніх залежностей, акцентує увагу на надійності та сумісності й широко використовується в промислових умовах.
pwru ("Packet, де ти?") — це інструмент на основі eBPF для трасування мережевих пакетів у ядрі Linux із розширеними можливостями фільтрації. Він дозволяє здійснювати детальну інспекцію стану ядра для полегшення налагодження проблем із мережевою підключеністю. Під капотом pwru прикріплює програми для налагодження eBPF до всіх функцій ядра Linux, які відповідають за обробку мережевих пакетів.
Це надає користувачам детальніший огляд процесу обробки пакетів у ядрі, ніж за допомогою tcpdump, Wireshark або інших традиційних інструментів. Також він може показувати метадані пакетів, такі як мережевий простір імен, час обробки, поля внутрішнього представлення пакетів у ядрі тощо.
Cilium почався як проєкт мережевої інфраструктури та має багато функцій, що дозволяють забезпечити стабільне з'єднання від робочих навантажень Kubernetes до віртуальних машин і фізичних серверів, які працюють у хмарі, на локальних серверах або на периферії (edge). Деякі з цих функцій включають:
Інтерфейс мережевого підключення контейнерів (CNI)[65] — Забезпечує мережеве підключення для кластерів Kubernetes
Балансувальник навантаження рівня 4[66] — Заснований на Maglev[67][68] і XDP[69] для обробки трафіку північ-південь
Cluster Mesh[70] — Поєднує кілька кластерів Kubernetes в одну мережу
Оптимізація пропускної здатності та затримки[71] — Справедлива черга, оптимізація TCP і обмеження швидкості
Офіційний вебсайт Cilium містить інформацію про онлайн-форуми, платформи для обміну повідомленнями та особисті зустрічі для спільноти користувачів і розробників Cilium.