eBPF: Der neue Stern am Cloud-Native-Himmel

Eine Technologie, die zunehmend in den Fokus rückt, ist eBPF. Es handelt sich um ein Framework, welches direkt in den Linux-Kernel integriert ist und eine Vielzahl neuer Projekte ermöglicht, allen voran Cilium das Kubernetes CNI-Plugin.

eBPF in a nutshell

Grundsätzlich erlaubt eBPF einfache, ereignisgesteuerte Programme in den Kernel zu laden und dort dynamisch auszuführen. Diese Ereignisse oder Hooks können Systemaufrufe (Syscalls), Funktionsaufrufe oder Netzwerkereignisse sein. Man kann es sich als Sandbox oder virtuelle Maschine innerhalb des Kernels vorstellen.

Quelle: https://ebpf.io/what-is-ebpf/

Wie sind wir hierher gekommen?

Früher wurde eBPF als BPF oder Berkeley Packet Filter bezeichnet und hatte den Zweck, ein- und ausgehende Netzwerkpakete effizient zu filtern und zu beobachten. Die Implementierung ähnelte einem Interpreter, der im Kernel (in der BPF-VM) ausgeführt und mit Filterregeln gefüttert wurde, die ein zu suchendes Muster beschrieben. Davon machten bekannte Werkzeuge wie Wireshark und tcpdump Gebrauch, um einen Mitschnitt des Netzwerkverkehrs zu ermöglichen. Jedoch gab es noch keine Möglichkeit, Programme für allgemeinere Anwendungsfälle zu schreiben.

eBPF steht für extended BPF und ist nicht mehr nur auf die oben beschriebene Paketfilterung beschränkt. Im Laufe der Jahre hat es sich zu einem universellen Framework entwickelt und unterstützt so vielfältige Anwendungsszenarien. Es ermöglicht Entwickler:innen, Funktionen und Erweiterungen für den Kernel auf einer höheren Abstraktionsebene zu erstellen.

In dem Vortrag „Past, Present, and Future of eBPF in Cloud Native Observability“ von der KubeCon 2023, erhält man einen detaillierten Überblick über die Geschichte von eBPF -, wo die Technologie heute steht und welche Entwicklungen in zukünftigen Kernels zu erwarten sind.

Aber jetzt: etwas detaillierter!

Auf den ersten Blick mag das Konzept, Benutzer:innen das Ausführen beliebiger Programme im Kernel auf die Schnelle zu ermöglichen, wie ein fragwürdiger Ansatz erscheinen. Es gab schließlich gute Gründe für die strikte Trennung zwischen der Betriebssystem-Ebene und dem sog. Userland.

Der Vortrag eBPF 201: Supercharging Your eBPF Dev Process for Cloud Native Apps zeigt im Detail, wie eBPF-Programme tatsächlich in Ihrem Kernel ausgeführt werden und wie mit der eBPF-Entwicklung begonnen werden kann. Ein wesentlicher Teil der gesamten eBPF-Kette ist der Verifier. Den eBPF-Verifikationsprozess kann man sich als eingebauten Türsteher des Kernels vorstellen. Seine Aufgabe besteht darin, Programme abzuweisen, die schädlich sein könnten oder zu lange dauern würden, um ausgeführt zu werden. 

Quelle: https://ebpf.io/what-is-ebpf/

Da es theoretisch unmöglich ist, das Halteproblem vollständig zu lösen, haben sich die eBPF-Expert:innen mit einer weniger Turing-vollständigen, aber verifizierbaren Sprache zufrieden gegeben. Das bedeutet, dass nicht einfach ein beliebiger C-Code geschrieben wird und erwartet werden kann, dass dieser die Verifikation besteht. Insbesondere sind nur begrenzte Schleifen (bounded loops) erlaubt und es gibt eine Obergrenze für die Gesamtzahl der Instruktionen, die das Programm enthalten darf.

Eine weitere wichtige Erkenntnis besteht darin, stets nach benutzerfreundlichen Bibliotheken in der bevorzugten Programmiersprache zu suchen, wie zum Beispiel dem Go-Paket „cilium/ebpf“. Diese Bibliotheken sind darauf ausgerichtet, das Programmieren zu erleichtern, indem sie komplexe technische Details hinter intuitiven Schnittstellen verbergen, die auf einer höheren Abstraktionsebene arbeiten.

Einst ein experimentelles Gimmick, entwickelt sich eBPF heute zu einer standardisierten Methode, um die Fähigkeiten des Kernels zu erweitern. Es hat Potenzial, die Art und Weise, wie wir mit dem Linux-Kernel interagieren, zu revolutionieren. Von der Netzwerkanalyse über die Sicherheit bis hin zur Systemüberwachung eröffnet eBPF neue Möglichkeiten für Entwickler:innen und Systemadministratoren:innen. Es ist definitiv eine Technologie in der Cloud-Native-Welt, die es lohnt, im Auge zu behalten und weiter zu erkunden.

Hast Du schon Erfahrungen mit ePBF gemacht? Gerne möchten wir uns mit Dir darüber austauschen!

Share: