BLOG | BUREAU DU CTO

eBPF : Tout est une question d'observabilité

Vignette de James Hendergart
James Hendergart
Publié le 14 juin 2022


De temps à autre, une technologie innovante atteint un point d'inflexion où les besoins réels de l'entreprise croisent les points forts de cette technologie. Cela rend la technologie non seulement plausible mais aussi pratique. Berkeley Packet Filter (BPF) a récemment atteint ce point parmi les développeurs Linux. BPF est un point d’interception et de traitement extrêmement efficace sur un hôte Linux qui promet de s’étendre aux serveurs Windows le plus tôt possible. La gamme de données disponibles est vaste, ajoutant directement une visibilité complète de la pile pour les tâches d'opérations d'ingénierie de fiabilité du site (SRE). Elle s’inscrit également naturellement dans la résolution des défis liés à la sécurité et à la gestion du trafic. La gamme de hooks est tout aussi vaste, offrant un éventail attrayant de points de déclenchement utiles pour les applications BPF qui plaisent aux spécialistes de l'observabilité, de la sécurité et du réseau. BPF est la bonne technologie pour permettre l’observabilité sans se ruiner. Et tout commence par l’observabilité.

La conception fondamentale du BPF en fait une méthode de calcul aussi efficace que possible (en dollars par watt). Mieux encore, les chaînes d'outils produisent le bytecode pour vous, ce qui vous permet de vous concentrer sur le résultat souhaité et non sur la programmation de type langage assembleur de bas niveau. Comment? Ces deux caractéristiques de conception font briller BPF :

Conception d'un jeu d'instructions

La conception du logiciel BPF a été volontairement calquée sur celle des architectures CPU modernes émergentes. En fait, la terminologie du processeur est utilisée car elle décrit avec précision les éléments et l'utilisation du BPF. BPF dispose de registres et d'instructions. Ils sont conçus pour être consommés directement par les processeurs. BPF, basé sur la conception du filtre de paquets BSD (1992), est une machine de filtrage de capture de paquets repensée mieux adaptée aux architectures CPU actuelles basées sur des registres. Cette conception a reçu un coup de pouce naturel en 2014 lorsque « Enhanced Berkeley Packet Filter » ou eBPF a été publié dans la version 3.18 du noyau Linux. eBPF était une distinction importante par rapport au Classic Berkeley Packet Filter (cBPF) dans les premiers jours après sa sortie. Aujourd’hui, la distinction est moins cruciale étant donné que toutes les versions prises en charge du noyau contiennent les améliorations de 2014. Il convient de les noter : Des registres plus larges (de 32 bits à 64 bits signifie que plus de travail est effectué par ligne de cache/cycle d'horloge), plus de registres (de 2 à 10 signifie plus de mappage 1 à 1 entre les registres du processeur moderne et les ABI du noyau) et une poignée d'améliorations supplémentaires du jeu d'instructions qui rendent les programmes BPF plus sûrs et plus utiles.

Couche de liaison

Le BPF se compose d'un robinet réseau et d'un filtre de paquets. Le robinet fonctionne au niveau de la couche de liaison de données lorsque les paquets sortent du fil vers une interface réseau donnée. Il copie les paquets pour que le filtre les interroge. Ce point d'insertion lui donne une visibilité complète sur le chemin réseau de l'hôte Linux. Pour le trafic entrant, cela signifie avant que le processeur hôte ne commence à travailler dessus, et pour le trafic sortant, cela signifie juste avant qu'il n'atteigne le fil pour quitter l'hôte. Ce diagramme montre le BPF croisant le chemin du paquet d'entrée au niveau de la couche de liaison de données .

Chemin d'accès

La gamme de données disponibles est vaste, ajoutant directement une visibilité complète de la pile pour les tâches d'opérations SRE. Dans cet exemple, nous nous concentrons sur certains des champs les plus couramment utilisés de l' en-tête IPv4 .

Chemin d'accès

À l’aide de ces données, des politiques peuvent être définies pour personnaliser le filtrage des paquets. La politique suivante filtre les paquets TCP destinés à une adresse IP de destination spécifique.

Chemin d'accès

L'exploitation de l'eBPF pour l'observabilité présente un avantage BOGO (achetez-en un, obtenez-en un) : Les données observées peuvent être utilisées à d’autres fins que l’observation. Par exemple, le routage du trafic ou la sécurité.

En revenant à l’ensemble de données que nous avons partagé précédemment, des éléments de cet ensemble de données utilisés pour observer le chemin d’entrée du trafic d’un hôte Linux sont utiles pour d’autres choses. Par exemple, l'IP source, l'IP de destination, l'hôte de destination et le port sont utiles à la fois pour le routage du trafic entrant et pour limiter l'accès.

Quelle que soit l'utilisation, tout commence par la copie du paquet par le robinet BPF. Une fois la copie effectuée, les données peuvent être mises en mémoire (voir plus sur les cartes BPF ), puis exportées sous forme de flux de télémétrie et exploitées simultanément par d'autres programmes BPF qui spécifient les actions de politique et de filtrage. C'est ici que se produit la ramification de l'observabilité vers la gestion du trafic et la sécurité. Pour tirer parti de l’extrême efficacité du BPF, le point de départ est de disposer d’une image claire des données nécessaires et de la manière dont elles sont utilisées. Dans le prochain article de cette série, mon collègue, Muhammad Waseem Sarwar, explorera les options de programmation BPF à divers emplacements de la pile réseau Linux.