Das Unternehmen Solo.io, das Produkte zur Unterstützung von Cloud-Systemen, Mikrodiensten, isolierten Containern und serverlosen Berechnungen entwickelt, hat das Open-Source-Werkzeug BumbleBee veröffentlicht. Es zielt darauf ab, die Vorbereitung, Verbreitung und Ausführung von eBPF-Programmen zu vereinfachen, die innerhalb einer speziellen virtuellen Maschine im Linux-Kernel ausgeführt werden und Netzwerkoperationen verarbeiten, den Zugriff kontrollieren und die Systemleistung überwachen. Der Code ist in Go geschrieben und wird unter der Lizenz Apache 2.0 verteilt.
BumbleBee ermöglicht es, ein eBPF-Programm in Form eines OCI (Open Container Initiative)-Container-Images zu verpacken, das auf beliebigen Systemen ohne Neukompilierung und ohne zusätzliche Komponenten im Benutzerraum gestartet werden kann. Die Interaktion mit dem eBPF-Code im Kernel, einschließlich der Verarbeitung von Daten aus dem eBPF-Handler, wird von BumbleBee übernommen, der diese Daten automatisch in Form von Metriken, Histogrammen oder Logs exportiert, auf die beispielsweise über das Tool curl zugegriffen werden kann. Der vorgeschlagene Ansatz ermöglicht es Entwicklern, sich auf das Schreiben von eBPF-Code zu konzentrieren, ohne sich um die Organisation der Interaktion mit diesem Code aus dem Benutzerraum, den Build und das Laden in den Kernel kümmern zu müssen.
Zur Verwaltung von eBPF-Programmen steht das im Stil von Docker gestaltete Tool 'bee' zur Verfügung, mit dem Benutzer sofort den gewünschten eBPF-Handler aus einem externen Repository laden und auf dem lokalen System ausführen können. Das Werkzeug ermöglicht die Generierung eines Codegerüsts in C für eBPF-Handler eines bestimmten Themas (derzeit werden nur Handler für Netzwerk- und Dateisystemoperationen unterstützt, die Aufrufe des Netzwerkstacks und von Dateisystemen abfangen). Auf Basis des generierten Gerüsts kann der Entwickler schnell die gewünschte Funktionalität realisieren.
Im Gegensatz zu BCC (BPF Compiler Collection) wird im BumbleBee keine vollständige Neukompilierung des Handler-Codes für jede Version des Linux-Kernels durchgeführt (BCC nutzt die Just-in-Time-Kompilierung mit Clang bei jedem Start eines eBPF-Programms). Zur Lösung von Portabilitätsproblemen werden die Tools CO-RE und libbpf entwickelt, die es ermöglichen, den Code nur einmal zu kompilieren und einen speziellen universellen Loader zu verwenden, der das geladene Programm an den aktuellen Kernel und die BTF-Typen (BPF Type Format) anpasst. BumbleBee ist eine Erweiterung von libbpf und bietet zusätzliche Typen für die automatische Interpretation und Darstellung von Daten, die in den Standard-eBPF-Map-Strukturen RingBuffer und HashMap platziert sind.
Um das endgültige eBPF-Programm zu erstellen und als OCI-Image zu speichern, reicht es aus, den Befehl „bee build datei_mit_code name:version“ auszuführen, und zum Starten den Befehl „bee run name:version“. Standardmäßig werden die von der Event-Handler erhaltenen Ereignisse im Terminalfenster ausgegeben, aber bei Bedarf können die Daten auch durch Anfragen mit den Tools curl oder wget an den an den Handler gebundenen Netzwerkport abgerufen werden. Handler können über OCI-kompatible Repositories verteilt werden, zum Beispiel kann für das Starten eines externen Handlers aus dem Repository ghcr.io (GitHub Container Registry) der Befehl „bee run ghcr.io/solo-io/bumblebee/tcpconnect:$(bee version)“ ausgeführt werden. Um den Handler in das Repository zu stellen, wird der Befehl „bee push“ empfohlen, und zum Binden einer Version „bee tag“.
Quelle: opennet.ru
