L'azienda Solo.io, che sviluppa prodotti per il funzionamento di sistemi cloud, microservizi, container isolati e calcolo serverless, ha pubblicato un toolkit open source chiamato BumbleBee, progettato per semplificare la preparazione, la distribuzione e l'esecuzione di programmi eBPF, eseguiti in una macchina virtuale dedicata all'interno del kernel Linux, che consentono di gestire le operazioni di rete, controllare l'accesso e monitorare il funzionamento dei sistemi. Il codice è scritto in linguaggio Go e distribuito sotto licenza Apache 2.0.
BumbleBee consente di impacchettare un programma eBPF come immagine di un contenitore in formato OCI (Open Container Initiative), che può essere eseguito su qualsiasi sistema senza ricompilazione e senza l'uso di componenti aggiuntivi nello spazio utente. BumbleBee gestisce l'interazione con il codice eBPF nel kernel, inclusa l'elaborazione dei dati provenienti dai gestori eBPF, esportando automaticamente queste informazioni come metriche, istogrammi o log, accessibili, ad esempio, tramite l'utilità curl. L'approccio proposto consente agli sviluppatori di concentrarsi sulla scrittura del codice eBPF senza distrazioni nell'organizzazione dell'interazione con questo codice dallo spazio utente, e nella raccolta e nel caricamento nel kernel.
Per gestire le applicazioni eBPF, è disponibile uno strumento in stile Docker chiamato "bee", che permette di caricare immediatamente l'handler eBPF desiderato da un repository esterno e di eseguirlo sul sistema locale. Questo strumento consente di generare uno scheletro di codice in linguaggio C per gli handler eBPF di temi selezionati (attualmente sono supportati solo gli handler per le operazioni di rete e di file, che intercettano le chiamate allo stack di rete e ai sistemi di file). A partire dallo scheletro creato, lo sviluppatore può implementare rapidamente la funzionalità di suo interesse.
A differenza di BCC (BPF Compiler Collection), BumbleBee non esegue la ricompilazione completa del codice del gestore per ciascuna versione del kernel Linux (BCC utilizza la compilazione just-in-time con Clang ad ogni avvio del programma eBPF). Per affrontare i problemi di portabilità, si stanno sviluppando gli strumenti CO-RE e libbpf, che consentono di compilare il codice una sola volta e utilizzare un caricatore universale speciale che adatta il programma caricato al kernel corrente e ai tipi di BTF (BPF Type Format). BumbleBee è un'estensione di libbpf e fornisce tipi aggiuntivi per l'interpretazione automatica e la visualizzazione dei dati conservati nelle strutture mappa standard per eBPF, RingBuffer e HashMap.
Per compilare il programma eBPF finale e salvarlo come immagine OCI, è sufficiente eseguire il comando «bee build file_con_codice nome:versione», e per eseguire il comando «bee run nome:versione». Di default, i dati ottenuti dal gestore degli eventi vengono visualizzati nella finestra del terminale; tuttavia, se necessario, è possibile ottenere informazioni utilizzando gli strumenti curl o wget per accedere alla porta di rete collegata al gestore. I gestori possono essere distribuiti attraverso repository compatibili con OCI; ad esempio, per eseguire un gestore esterno dal repository ghcr.io (GitHub Container Registry) è possibile utilizzare il comando «bee run ghcr.io/solo-io/bumblebee/tcpconnect:$(bee version)». Per pubblicare il gestore nel repository, si consiglia di utilizzare il comando «bee push», mentre per associare una versione si utilizza «bee tag».
Fonte: opennet.ru
