Vorwort
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
In der Cloud Native Community und darüber hinaus ist eBPF zu einem der heißesten technischen Themen der letzten Jahre geworden. Eine neue Generation leistungsfähiger Tools und Projekte in den Bereichen Netzwerke, Sicherheit, Beobachtbarkeit und mehr wurde (und wird) auf der Grundlage von eBPF entwickelt und bietet im Vergleich zu ihren Vorgängern eine bessere Leistung und Genauigkeit. eBPF-bezogene Konferenzen wie der eBPF Summit und der Cloud Native eBPF Dayhaben Tausende von Teilnehmern und Zuschauern angezogen, und zum Zeitpunkt der Erstellung dieses Artikels hat die eBPF Slack Community mehr als 14.000 Mitglieder.
Warum wird eBPF als Basistechnologie für so viele Infrastruktur-Tools gewählt? Wie liefert sie die versprochenen Leistungsverbesserungen? Wie ist eBPF in so unterschiedlichen technischen Bereichen nützlich, die von der Leistungsverfolgung bis zur Verschlüsselung des Netzwerkverkehrs reichen?
Dieses Buch soll diese Fragen beantworten, indem es dem Leser ein Verständnis dafür vermittelt, wie eBPF funktioniert, und eine Einführung in das Schreiben von eBPF-Code gibt.
Für wen dieses Buch ist
Dieses Buch richtet sich an Entwickler, Systemadministratoren, Operatoren und Studenten, die neugierig auf eBPF sind und mehr darüber wissen wollen, wie es funktioniert. Es bietet eine Grundlage für diejenigen, die selbst eBPF-Programme schreiben wollen. Da eBPF eine großartige Plattform für eine ganz neue Generation von Instrumenten und Werkzeugen bietet, wird es für eBPF-Entwickler/innen wahrscheinlich noch einige Jahre lang eine lukrative Beschäftigung geben.
Aber du musst nicht unbedingt vorhaben, selbst eBPF-Code zu schreiben, damit dieses Buch für dich nützlich ist. Wenn du im Betrieb, in der Sicherheit oder in einer anderen Funktion arbeitest, die mit Software-Infrastruktur zu tun hat, wirst du wahrscheinlich jetzt oder in den nächsten Jahren mit eBPF-basierten Werkzeugen in Berührung kommen. Wenn du etwas über das Innenleben dieser Tools weißt, bist du in der Lage, sie effektiv zu nutzen. Wenn du zum Beispiel weißt, wie Ereignisse eBPF-Programme auslösen können, hast du ein besseres mentales Modell dafür, was ein eBPF-basiertes Tool wirklich misst, wenn es dir Leistungskennzahlen anzeigt. Als Anwendungsentwickler kommst du vielleicht auch mit einigen dieser eBPF-basierten Tools in Berührung. Wenn du zum Beispiel eine Anwendung leistungsmäßig optimierst, kannst du mit einem Tool wie Parca Flammendiagramme erstellen, die zeigen, welche Funktionen die meiste Zeit benötigen. Wenn du Sicherheitstools evaluierst, hilft dir dieses Buch zu verstehen, wo eBPF glänzt und wie du es vermeidest, es auf eine naive Art und Weise einzusetzen, die weniger effektiv gegen Angriffe ist.
Auch wenn du heute keine eBPF-Tools verwendest, hoffe ich, dass dieses Buch dir interessante Einblicke in Bereiche von Linux gibt, die du vielleicht noch nicht bedacht hast. Für die meisten Entwickler ist der Kernel eine Selbstverständlichkeit, da sie Programmiersprachen mit bequemen Abstraktionen auf höherer Ebene verwenden, die es ihnen ermöglichen, sich auf die Anwendungsentwicklung zu konzentrieren - und die ist schon schwer genug! Sie benutzen Werkzeuge wie Debugger und Leistungsanalysatoren, um ihre Arbeit effektiv zu erledigen. Die Funktionsweise eines Debuggers oder Performance-Tools zu kennen, mag interessant sein, ist aber nicht unbedingt notwendig. Dennoch macht es vielen von uns Spaß und erfüllt uns mit Freude, in den Kaninchenbau hinabzusteigen, um mehr zu erfahren.1 Genauso werden die meisten Menschen eBPF-Tools nutzen, ohne sich Gedanken darüber zu machen, wie sie aufgebaut sind. Arthur C. Clarke schrieb, dass "jede hinreichend fortgeschrittene Technologie von Magie nicht zu unterscheiden ist", aber ich persönlich mag es, in die Tiefe zu gehen und herauszufinden, wie der Zaubertrick funktioniert. Vielleicht geht es dir wie mir und du fühlst dich gezwungen, die eBPF-Programmierung zu erkunden, um ein besseres Gefühl dafür zu bekommen, was mit dieser Technologie möglich ist. Wenn ja, wird dir dieses Buch gefallen.
Was dieses Buch behandelt
eBPF entwickelt sich rasant weiter, was es schwierig macht, ein umfassendes Nachschlagewerk zu schreiben, das nicht ständig aktualisiert werden muss. Es gibt jedoch einige Grundlagen und Prinzipien, die sich wahrscheinlich nicht wesentlich ändern werden, und genau die werden in diesem Buch behandelt.
In Kapitel 1wird beschrieben, warum eBPF als Technologie so mächtig ist und wie die Möglichkeit, eigene Programme im Betriebssystemkern auszuführen, so viele spannende Möglichkeiten bietet.
Konkreter wird es in Kapitel 2, wo du einige "Hello World"-Beispiele siehst, die dich in die Konzepte von eBPF-Programmen und Maps einführen.
Kapitel 3 befasst sich ausführlich mit eBPF-Programmen und wie sie im Kernel laufen, und Kapitel 4 untersucht die Schnittstelle zwischen Userspace-Anwendungen und eBPF-Programmen.
Eine der großen Herausforderungen der eBPF in den letzten Jahren war die Frage der Kompatibilität zwischen verschiedenen Kernel-Versionen. Kapitel 5 befasst sich mit dem Ansatz "einmal kompilieren, überall ausführen" (CO-RE), der dieses Problem löst.
Der Verifizierungsprozess ist vielleicht das wichtigste Merkmal, das eBPF von Kernelmodulen unterscheidet. In Kapitel 6 werde ich dir den eBPF-Verifizierer vorstellen.
In Kapitel 7 bekommst du eine Einführung in die vielen verschiedenen Arten von eBPF-Programmen und ihre Anknüpfungspunkte. Viele dieser Anknüpfungspunkte befinden sich innerhalb des Netzwerkstapels, und in Kapitel 8 wird die Anwendung von eBPF für Netzwerkfunktionen genauer untersucht. In Kapitel 9 geht es darum, wie eBPF für die Entwicklung von Sicherheitstools genutzt wird.
Wenn du eine User-Space-Anwendung schreiben willst, die mit eBPF-Programmen interagiert, gibt es viele Bibliotheken und Frameworks, die dir dabei helfen. Kapitel 10 gibt einen Überblick über die Optionen für verschiedene Programmiersprachen.
In Kapitel 11 schaue ich schließlich in meine Kristallkugel und erzähle dir von einigen zukünftigen Entwicklungen, die in der eBPF-Welt zu erwarten sind.
Vorausgesetzte Kenntnisse
Dieses Buch setzt voraus, dass du mit den grundlegenden Shell-Befehlen unter Linux vertraut bist und mit der Idee, einen Compiler zu benutzen, um Quellcode in ein ausführbares Programm zu verwandeln. Es gibt einige einfache Beispielauszüge aus Makefiles, wobei davon ausgegangen wird, dass du zumindest ein minimales Verständnis davon hast, wie make
diese Dateien verwendet.
Es gibt viele Codebeispiele in Python, C und Go. Du brauchst keine tiefgreifenden Kenntnisse dieser Sprachen, um mit den Beispielen etwas anfangen zu können, aber du wirst das meiste aus dem Buch herausholen, wenn du generell gerne etwas Code liest. Ich gehe außerdem davon aus, dass du mit der Idee von Zeigern vertraut bist, die eine Speicherstelle identifizieren.
Beispielcode und Übungen
In diesem Buch gibt es eine Menge Code-Beispiele. Wenn du sie selbst ausprobieren möchtest, findest du ein begleitendes GitHub-Repository und eine Anleitung zum Installieren und Ausführen des Codes unter https://github.com/lizrice/learning-ebpf.
Außerdem habe ich am Ende der meisten Kapitel Übungen eingefügt, die dir helfen, die eBPF-Programmierung zu erkunden, indem du die Beispiele erweiterst oder deine eigenen Programme schreibst.
Da eBPF ständig weiterentwickelt wird, hängen die Funktionen, die dir zur Verfügung stehen, von der Kernel-Version ab, die du verwendest. Viele der Einschränkungen, die für frühere Versionen galten, wurden in späteren Versionen aufgehoben oder gelockert. Das Iovisor-Projekt bietet eine nützliche Übersicht über die Kernel-Versionen, in denen verschiedene BPF-Funktionen hinzugefügt wurden. In diesem Buch habe ich versucht, zu vermerken, wann die von mir beschriebenen Funktionen hinzugefügt wurden. Die Beispiele wurden mit der Version 5.15 des Kernels getestet, und zum Zeitpunkt der Erstellung dieses Buches unterstützen einige der gängigen Linux-Distributionen noch keine so aktuelle Kernelversion. Wenn du dieses Buch kurz nach seinem Erscheinen liest, kann es sein, dass einige der Funktionen nicht mit dem Linux-Kernel funktionieren, den dein Unternehmen in der Produktion einsetzt.
Ist eBPF nur für Linux?
eBPF wurde ursprünglich für Linux entwickelt. Es gibt keinen besonderen Grund, warum derselbe Ansatz nicht auch in anderen Betriebssystemen verwendet werden könnte - Microsoft hat sogar eine eBPF-Implementierung für Windows entwickelt. Ich gehe in Kapitel 11 kurz darauf ein, aber im Rest des Buches konzentriere ich mich auf die Linux-Implementierung, und alle Beispiele stammen von Linux.
In diesem Buch verwendete Konventionen
In diesem Buch werden die folgenden typografischen Konventionen verwendet:
- Kursiv
-
Weist auf neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen hin.
Constant width
-
Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.
Constant width bold
-
Zeigt Befehle oder anderen Text an, der vom Benutzer wortwörtlich eingetippt werden sollte.
Constant width italic
-
Zeigt Text an, der durch vom Benutzer eingegebene Werte oder durch kontextabhängige Werte ersetzt werden soll.
Tipp
Dieses Element steht für einen Tipp oder eine Anregung.
Hinweis
Dieses Element steht für einen allgemeinen Hinweis.
Warnung
Dieses Element weist auf eine Warnung oder einen Warnhinweis hin.
Code-Beispiele verwenden
Zusätzliches Material (Code-Beispiele, Übungen usw.) steht unter https://github.com/lizrice/learning-ebpf zum Download bereit .
Wenn du eine technische Frage oder ein Problem mit den Codebeispielen hast, sende bitte eine E-Mail an bookquestions@oreilly.com.
Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Wenn in diesem Buch Beispielcode angeboten wird, darfst du ihn in deinen Programmen und deiner Dokumentation verwenden. Du musst uns nicht um Erlaubnis fragen, es sei denn, du reproduzierst einen großen Teil des Codes. Wenn du zum Beispiel ein Programm schreibst, das mehrere Teile des Codes aus diesem Buch verwendet, brauchst du keine Erlaubnis. Der Verkauf oder die Weitergabe von Beispielen aus O'Reilly-Büchern erfordert eine Erlaubnis. Die Beantwortung einer Frage durch Zitieren dieses Buches und von Beispielcode erfordert keine Erlaubnis. Wenn du einen großen Teil des Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eine Genehmigung erforderlich.
Wir freuen uns über eine Namensnennung, verlangen sie aber in der Regel nicht. Eine Quellenangabe umfasst normalerweise den Titel, den Autor, den Verlag und die ISBN. Zum Beispiel: "eBPF lernen von Liz Rice (O'Reilly). Copyright 2023 Vertical Shift Ltd, 978-1-098-13512-6."
Wenn du der Meinung bist, dass deine Verwendung von Codebeispielen nicht unter die Fair-Use-Regelung oder die oben genannte Erlaubnis fällt, kannst du uns gerne unter permissions@oreilly.com kontaktieren .
O'Reilly Online Learning
Hinweis
Seit mehr als 40 Jahren bietet O'Reilly Media Schulungen, Wissen und Einblicke in Technologie und Wirtschaft, um Unternehmen zum Erfolg zu verhelfen.
Unser einzigartiges Netzwerk von Experten und Innovatoren teilt sein Wissen und seine Erfahrung durch Bücher, Artikel und unsere Online-Lernplattform. Die Online-Lernplattform von O'Reilly bietet dir On-Demand-Zugang zu Live-Trainingskursen, ausführlichen Lernpfaden, interaktiven Programmierumgebungen und einer umfangreichen Text- und Videosammlung von O'Reilly und über 200 anderen Verlagen. Weitere Informationen erhältst du unter https://oreilly.com.
Wie du uns kontaktierst
Bitte richte Kommentare und Fragen zu diesem Buch an den Verlag:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Nord
- Sebastopol, CA 95472
- 800-998-9938 (in den Vereinigten Staaten oder Kanada)
- 707-829-0515 (international oder lokal)
- 707-829-0104 (Fax)
Wir haben eine Webseite für dieses Buch, auf der wir Errata, Beispiele und zusätzliche Informationen auflisten. Du kannst diese Seite unter https://oreil.ly/learning-eBPF aufrufen .
Schreib eine E-Mail an bookquestions@oreilly.com, um Kommentare oder technische Fragen zu diesem Buch zu stellen.
Neuigkeiten und Informationen über unsere Bücher und Kurse findest du unter https://oreilly.com.
Du findest uns auf LinkedIn: https://linkedin.com/company/oreilly-media.
Folge uns auf Twitter: https://twitter.com/oreillymedia.
Sieh uns auf YouTube: https://youtube.com/oreillymedia.
Danksagungen
Ich möchte mich bei den vielen Menschen bedanken, die einen großen Beitrag zum Schreiben dieses Buches geleistet haben:
-
Meine technischen Prüfer - Timo Beckers, Jess Males, Quentin Monnet, Kevin Sheldrake und Celeste Stinger - haben mir detailliertes, umsetzbares Feedback und tolle Ideen zur Verbesserung der Beispiele gegeben, wofür ich ihnen sehr dankbar bin.
-
Ich stehe auf den Schultern der Giganten, die eBPF aufgebaut, popularisiert und weiter gepflegt haben. Dazu gehören Daniel Borkmann, Thomas Graf, Brendan Gregg, Andrii Nakryiko, Alexei Starovoitov und zahllose andere, die nicht nur Code, sondern auch Konferenzvorträge und Blogbeiträge für die Community beigesteuert haben.
-
Ich danke meinen talentierten und netten Kolleginnen und Kollegen bei Isovalent, von denen viele eBPF- und Kernel-Spezialisten sind und von denen ich weiterhin so viel lernen kann.
-
Mein Dank geht auch an das Team von O'Reilly, insbesondere an meine Lektorin Rita Fernando, die mich während des Schreibprozesses unermüdlich unterstützte und mir half, das Buch im Zeitplan zu halten, und an John Devins, der mich ermutigte, das Buch zu schreiben.
-
Phil Pearl gab nicht nur hilfreiches Feedback zu den Inhalten, sondern sorgte auch dafür, dass ich etwas aß und Pausen machte. Ich bin ihm für immer dankbar für seine Unterstützung und Ermutigung.
Ich möchte mich auch bei all den wunderbaren Menschen bedanken, die sich im Laufe der Jahre die Zeit genommen haben, ermutigende Kommentare zu meiner Arbeit abzugeben, sei es persönlich auf einer Veranstaltung oder in den sozialen Medien. Es ist unglaublich inspirierend zu wissen, dass etwas, das ich geschrieben oder aufgenommen habe, jemandem geholfen hat, ein technisches Konzept zu verstehen oder ihm den Wunsch gegeben hat, selbst etwas zu bauen oder zu schreiben. Vielen Dank dafür!
1 Auf der dotGo-Konferenz in Paris 2017 habe ich einen Vortrag gehalten, der zeigte, wie ein Debugger funktioniert.
Get eBPF lernen now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.