La empresa Solo.io, que desarrolla productos para el funcionamiento de sistemas en la nube, microservicios, contenedores aislados y computación sin servidor, ha publicado una herramienta abierta llamada BumbleBee, destinada a simplificar la preparación, distribución y ejecución de programas eBPF que se ejecutan en una máquina virtual especial dentro del núcleo de Linux y que permiten manejar operaciones de red, controlar el acceso y rastrear el rendimiento de los sistemas. El código está escrito en lenguaje Go y se distribuye bajo la licencia Apache 2.0.
BumbleBee permite empaquetar un programa eBPF como una imagen de contenedor en formato OCI (Open Container Initiative), que se puede ejecutar en cualquier sistema sin necesidad de recompilación ni de componentes adicionales en el espacio del usuario. BumbleBee se encarga de interactuar con el código eBPF en el núcleo, incluyendo el manejo de los datos provenientes de los controladores eBPF, exportando automáticamente esos datos en forma de métricas, histogramas o registros, a los cuales se puede acceder, por ejemplo, utilizando la utilidad curl. Este enfoque permite al desarrollador centrarse en escribir el código eBPF y no distraerse con la organización de la interacción con este código desde el espacio del usuario, la construcción y la carga en el núcleo.
Para gestionar los programas eBPF se ofrece una utilidad llamada 'bee', que funciona al estilo Docker, con la que se puede cargar inmediatamente un controlador eBPF de interés desde un repositorio externo y ejecutarlo en el sistema local. La herramienta permite generar un esqueleto de código en lenguaje C para los controladores eBPF de un tema específico (en este momento, solo se soportan controladores de operaciones de red y de archivos, que interceptan las llamadas al stack de red y a los sistemas de archivos). A partir del esqueleto generado, el desarrollador puede implementar rápidamente la funcionalidad que le interese.
A diferencia de BCC (BPF Compiler Collection), en BumbleBee no se realiza una recompilación completa del código del controlador para cada versión del núcleo de Linux (BCC utiliza compilación en tiempo real mediante Clang en cada ejecución de un programa eBPF). Para resolver problemas de portabilidad, se están desarrollando herramientas como CO-RE y libbpf, que permiten compilar el código solo una vez y usar un cargador universal especial que adapta el programa cargado al núcleo actual y a los tipos de BTF (BPF Type Format). BumbleBee es una capa adicional sobre libbpf y proporciona tipos adicionales para la interpretación automática y la visualización de datos almacenados en las estructuras de mapa estándar para eBPF, como RingBuffer y HashMap.
Para compilar el programa eBPF final y guardarlo como una imagen OCI, basta con ejecutar el comando “bee build archivo_con_codigo nombre:version”, y para ejecutarlo, el comando “bee run nombre:version”. Por defecto, los eventos procesados se mostrarán en la ventana del terminal, pero si es necesario, se puede obtener información utilizando las utilidades curl o wget en el puerto de red vinculado al controlador. Los controladores se pueden distribuir a través de repositorios compatibles con OCI; por ejemplo, para ejecutar un controlador externo del repositorio ghcr.io (GitHub Container Registry), se puede ejecutar el comando “bee run ghcr.io/solo-io/bumblebee/tcpconnect:$(bee version)”. Para colocar el controlador en un repositorio, se sugiere el comando “bee push”, y para etiquetar una versión — “bee tag”.
Fuente: opennet.ru
