Firma Solo.io, która rozwija produkty wspierające działanie systemów chmurowych, mikroserwisów, izolowanych kontenerów i obliczeń bezserwerowych, opublikowała otwarte narzędzie BumbleBee, mające na celu uproszczenie przygotowania, dystrybucji i uruchamiania programów eBPF, które działają w specjalnej maszynie wirtualnej w jądrze Linuxa i umożliwiają przetwarzanie operacji sieciowych, kontrolowanie dostępu oraz monitorowanie pracy systemów. Kod napisano w języku Go i udostępniono na licencji Apache 2.0.
BumbleBee umożliwia pakowanie programu eBPF w formie obrazu kontenera w formacie OCI (Open Container Initiative), który można uruchamiać na dowolnych systemach bez potrzeby rekompilacji i użycia dodatkowych komponentów w przestrzeni użytkownika. Interakcję z kodem eBPF w jądrze, w tym przetwarzanie danych pochodzących z eBPF, obsługuje BumbleBee, który automatycznie eksportuje te dane w formie metryk, histogramów lub logów, do których dostęp można uzyskać na przykład za pomocą narzędzia curl. Proponowane podejście pozwala programiście skupić się na pisaniu kodu eBPF i nie odrywać się od organizacji interakcji z tym kodem w przestrzeni użytkownika, a także na jego budowie i ładowaniu do jądra.
Do zarządzania programami eBPF proponowane jest narzędzie 'bee', działające w stylu Dockera, dzięki któremu można od razu pobrać interesujący eBPF zewnętrzny z repozytorium i uruchomić go w lokalnym systemie. Narzędzie pozwala wygenerować szkielety kodu w języku C dla eBPF zgodnych z wybraną tematyką (aktualnie wspierane są jedynie obsługujące operacje sieciowe i plikowe, przechwytujące wywołania stosu sieciowego i systemów plików). Na podstawie wygenerowanego szkieletu programista może szybko zaimplementować pożądaną funkcjonalność.
W odróżnieniu od BCC (BPF Compiler Collection), BumbleBee nie wymaga pełnej retranskompilacji kodu obsługi dla każdej wersji jądra Linux (BCC wykorzystuje kompilację w locie przy pomocy Clang przy każdym uruchomieniu programu eBPF). W celu rozwiązania problemów z przenośnością rozwijane są narzędzia CO-RE oraz libbpf, które pozwalają na skompilowanie kodu tylko raz i użycie specjalnego uniwersalnego loadera, który dostosowuje ładowany program do aktualnego jądra i typów BTF (BPF Type Format). BumbleBee jest nakładką na libbpf i oferuje dodatkowe typy do automatycznej interpretacji oraz wyświetlania danych, umieszczanych w standardowych dla eBPF strukturach map RingBuffer i HashMap.
Aby zbudować finalny program eBPF i zapisać go jako obraz OCI, wystarczy wykonać polecenie „bee build plik_z_kodem nazwa:wersja”, a aby uruchomić, użyj polecenia „bee run nazwa:wersja”. Domyślnie zdarzenia zwracane przez obsługę będą wyświetlane w oknie terminala, ale w razie potrzeby można uzyskać dane, korzystając z narzędzi curl lub wget, kierując je do podłączonego do obsługi portu sieciowego. Obsługi można dystrybuować poprzez repozytoria zgodne z OCI, na przykład, aby uruchomić zewnętrzną obsługę z repozytorium ghcr.io (GitHub Container Registry), można wykonać polecenie „bee run ghcr.io/solo-io/bumblebee/tcpconnect:$(bee version)”. Aby umieścić obsługę w repozytorium, sugerowane jest polecenie „bee push”, a aby oznaczyć wersję – „bee tag”.
Źródło: opennet.ru
