Spoločnosť Solo.io, ktorá vyvíja produkty na zabezpečenie prevádzky cloudových systémov, mikroslužieb, izolovaných kontajnerov a bezserverových výpočtov, zverejnila otvorený nástroj BumbleBee, zameraný na zjednodušenie prípravy, distribúcie a spúšťania eBPF programov, ktoré sa vykonávajú v špeciálnej virtuálnej stroji v rámci jadra Linuxu a umožňujú spracovávať sieťové operácie, kontrolovať prístup a sledovať činnosť systémov. Kód je napísaný v jazyku Go a je distribuovaný pod licenciou Apache 2.0.
BumbleBee umožňuje zabaliť eBPF program do kontajnerového obrazu v formáte OCI (Open Container Initiative), ktorý je možné spustiť na akýchkoľvek systémoch bez prekompilácie a bez používania ďalších komponentov v užívateľskom priestore. Interakciu s eBPF kódom v jadre, vrátane spracovania údajov prichádzajúcich z eBPF handlerov, preberá BumbleBee, ktorý automaticky exportuje tieto údaje vo forme metrík, histogramov alebo logov, k ktorým je možné získať prístup napríklad pomocou nástroja curl. Navrhovaný prístup umožňuje vývojárovi sústrediť sa na písanie eBPF kódu a neodvádzať sa od organizácie interakcie s týmto kódom z užívateľského priestoru, zostavovania a načítavania do jadra.
Na správu eBPF programov sa navrhuje nástroj v štýle Docker s názvom „bee“, pomocou ktorého je možné okamžite načítať požadovaný eBPF handler z externého repozitára a spustiť ho na lokálnom systéme. Nástroj umožňuje vygenerovať osnovu kódu v jazyku C pre eBPF handlery vybranej témy (v súčasnosti sú podporované iba handlery sieťových a súborových operácií, ktoré zachytávajú volania sieťového zásobníka a súborových systémov). Na základe vytvorenej osnovy môže vývojár rýchlo implementovať zaujímavú funkcionalitu.
Na rozdiel od BCC (BPF Compiler Collection) v BumbleBee neprebieha úplné prekompilovanie kódu spracovateľa pre každú verziu jadra Linux (BCC používa kompiláciu za behu pomocou Clang pri každom spustení eBPF programu). Na riešenie problémov s prenositeľnosťou sa vyvíjajú nástroje CO-RE a libbpf, ktoré umožňujú zostaviť kód iba raz a použiť špeciálny univerzálny loader, ktorý prispôsobuje načítavaný program aktuálnemu jadru a typom BTF (BPF Type Format). BumbleBee je nadstavbou nad libbpf a poskytuje ďalšie typy na automatickú interpretáciu a zobrazenie dát umiestnených v štandardných pre eBPF map-štruktúrach RingBuffer a HashMap.
Na zostavenie konečného eBPF programu a jeho uloženie vo forme OCI obrazu stačí vykonať príkaz „bee build súbor_s_kódom meno:verzia“, a na spustenie príkaz „bee run meno:verzia“. Predvolene budú získavané od spracovateľa udalosti vypisované do okna terminálu, ale v prípade potreby je možné získať dáta pomocou utilít curl alebo wget na pripojený sieťový port. Spracovateľov je možné distribuovať cez OCI kompatibilné repozitáre, napríklad pre spustenie externého spracovateľa z repozitára ghcr.io (GitHub Container Registry) je možné vykonať príkaz „bee run ghcr.io/solo-io/bumblebee/tcpconnect:$(bee version)“. Na umiestnenie spracovateľa do repozitára je navrhnutý príkaz „bee push“, a na priradenie verzie — „bee tag“.
Zdroj: opennet.ru
