BumbleBee — інструментарій для спрощення створення та розповсюдження eBPF-програм

Компанія Solo.io, що розвиває продукти для забезпечення роботи хмарних систем, мікросервісів, ізольованих контейнерів і безсерверних обчислень, опублікувала відкритий інструментарій BumbleBee, націлений на спрощення підготовки, розповсюдження та запуску eBPF-програм, що виконуються в спеціальній віртуальній машині всередині ядра Linux і дозволяють обробляти операції, контролювати доступ та відстежувати роботу систем. Код написаний мовою Go та поширюється під ліцензією Apache 2.0.

BumbleBee дає можливість запакувати eBPF-програму у вигляді образу контейнера у форматі OCI (Open Container Initiative), який можна запускати на будь-яких системах без перекомпіляції та використання додаткових компонентів у просторі користувача. Взаємодія з eBPF-кодом в ядрі, у тому числі обробку даних, що надходять з eBPF-оброблювача, бере на себе BumbleBee, який автоматично експортує ці дані у вигляді метрик, гістограм або логів, доступ до яких можна отримати, наприклад, за допомогою утиліти curl. Пропонований підхід дозволяє розробнику зосередити увагу на написанні коду eBPF і не відволікатися на організацію взаємодії з цим кодом із простору користувача, збирання та завантаження в ядро.

Для управління eBPF-програмами пропонується утиліта «bee», що працює в стилі Docker, за допомогою якої можна відразу завантажити eBPF-обробник, що цікавить, із зовнішнього репозиторію і запустити на локальній системі. Інструментарій дозволяє згенерувати каркас коду мовою Сі для eBPF-обробників обраної тематики (нині підтримуються лише обробники мережевих та файлових операцій, що перехоплюють виклики мережевого стека та файлових систем). На основі сформованого каркаса розробник може швидко реалізувати функціональність, що цікавить його.

На відміну від BCC (BPF Compiler Collection) BumbleBee не виконується повне перескладання коду обробника для кожної версії ядра Linux (BCC використовує компіляцію на льоту за допомогою Clang при кожному запуску eBPF-програми). Для вирішення проблем з переносимістю розвиваються інструментарії CO-RE і libbpf, що дозволяють збирати код лише один раз і використовувати спеціальний універсальний завантажувач, що адаптує програму, що завантажується, до поточного ядра і типів BTF (BPF Type Format). BumbleBee є надбудовою над libbpf і надає додаткові типи для автоматичної інтерпретації та відображення даних, що розміщуються у штатних для eBPF map-структурах RingBuffer та HashMap.

Для складання підсумкової eBPF-програми та збереження у вигляді OCI-образу достатньо виконати команду "bee build файл_з_кодом ім'я:версія", а для запуску команду "bee run ім'я:версія". За замовчуванням події, що отримуються від обробника, будуть виводитися у вікно терміналу, але при необхідності можна отримати дані звернувшись утилітами curl або wget до прив'язаного до обробника мережного порту. Обробники можна розповсюджувати через OCI-сумісні репозиторії, наприклад, для запуску зовнішнього обробника з репозиторію ghcr.io (GitHub Container Registry) можна виконати команду bee run ghcr.io/solo-io/bumblebee/tcpconnect:$(bee version) Для розміщення обробника в репозиторій пропонується команда bee push, а для прив'язки версії bee tag.

Джерело: opennet.ru

Додати коментар або відгук