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
