PDA

Просмотр полной версии : BumbleBee - инструментарий для упрощения создания и распространения eBPF-программ


Suicide
12.01.2022, 00:33
Компания Solo.io, развивающая продукты для обеспечения работы облачных систем, микросервисов, изолированных контейнеров и бессерверных вычислений, опубликовала (https://www.solo.io/blog/solo-announces-bumblebee/) открытый инструментарий BumbleBee (https://bumblebee.io/), нацеленный на упрощение подготовки, распространения и запуска eBPF-программ, выполняемых в специальной виртуальной машине внутри ядра Linux и позволяющих обрабатывать сетевые операции, контролировать доступ и отслеживать работу систем. Код написан (https://github.com/solo-io/bumblebee) на языке Go и распространяется под лицензией Apache 2.0.

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

Для управления eBPF-программами предлагается (https://www.solo.io/blog/get-started-with-ebpf-using-bumblebee/) работающая в стиле Docker утилита "bee", при помощи которой можно сразу загрузить интересующий eBPF-обработчик из внешнего репозитория и запустить на локальной системе. Инструментарий позволяет (https://github.com/solo-io/bumblebee/blob/main/docs/getting_started.md) сгенерировать каркас кода на языке Си для eBPF-обработчиков выбранной тематики (в настоящее время поддерживаются только обработчики сетевых и файловых операций, перехватывающих вызовы сетевого стека и файловых систем). На основе сформированного каркаса разработчик может быстро реализовать интересующую его функциональность.

В отличие от BCC (https://github.com/iovisor/bcc) (BPF Compiler Collection) в BumbleBee не выполняется полная пересборка кода обработчика для каждой версии ядра Linux (BCC использует компиляцию на лету при помощи Clang при каждом запуске eBPF-программы). Для решения проблем с переносимостью развиваются инструментарии CO-RE (https://facebookmicrosites.github.io/bpf/blog/2020/02/20/bcc-to-libbpf-howto-guide.html) и libbpf (https://github.com/libbpf), позволяющие собирать код только один раз и использовать специальный универсальный загрузчик, адаптирующий загружаемую программу к текущему ядру и типам BTF (BPF Type Format). BumbleBee является надстройкой над libbpf и предоставляет дополнительные типы для автоматической интерпретации и отображения данных, размещаемых (https://github.com/solo-io/bumblebee/blob/main/docs/concepts.md) в штатных для 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".

11.01.2022

https://www.opennet.ru/opennews/art.shtml?num=56489​