Компанията Solo.io, която разработва продукти за работа с облачни системи, микросервизи, изолирани контейнери и безсървърни изчисления, публикува отворен инструментариум BumbleBee, насочен към опростяване на подготовката, разпространението и стартирането на eBPF програми, изпълнявани в специална виртуална машина в ядрото на Linux и позволяващи обработка на мрежови операции, контрол на достъпа и наблюдение на работата на системите. Кодът е написан на езика Go и се разпространява под лицензия Apache 2.0.
BumbleBee дава възможност да опаковате eBPF програмата под формата на контейнерен образ в OCI (Open Container Initiative) формат, който може да се стартира на всякакви системи без пр recompilation и използване на допълнителни компоненти в потребителското пространство. Взаимодействието с eBPF кода в ядрото, включително обработката на данните, получени от eBPF обработвача, се поема от BumbleBee, който автоматично експортира тези данни под формата на метрики, хистограми или логове, до които можете да получите достъп, например, с помощта на утилита curl. Предложеният подход позволява на разработчика да се съсредоточи върху написването на eBPF кода и да не се разсейва с организацията на взаимодействието с този код от потребителското пространство, компилирането и зареждането в ядрото.
За управление на eBPF програмите се предлага работа с утилита «bee» в стил Docker, с помощта на която можете веднага да заредите интересуващия ви eBPF обработвач от външно репозиторио и да го стартирате на локалната система. Инструментариумът позволява генериране на скелет на кода на езика C за 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
