Dans cet article, je vais essayer d'introduire la fonctionnalité eBPF (utilisée par la CNI Cilium) et qui permet de fournir des fonctionnalités de réseaux et de sécurité avancées sur la plateforme Kubernetes.

eBPF En Bref

En bref

Cilium utilise la technologie eBPF (extended Berkeley Packet Filter) pour offrir de nombreux services de sécurité et de réseau dans un environnement Kubernetes.
eBPF permet d'exécuter des espèces de sandbox confinées directement au niveau du Kernel (l'endroit parfait pour intercepter tous les appels systèmes).

Le système d'exploitation garantit alors la sûreté des programmes grâce à un vérificateur, et assure une vitesse d'exécution égale au code natif à l'aide d'un compilateur Just-In-Time (JIT).

Cela permet d'ajouter des fonctionnalités dans le Kernel à la volée, sans avoir à attendre la prochaine release qui implémenterait, de façon officielle une technologie similaire.

Dans le schéma ci-dessus, emprunté sur le site officiel d'eBPF (que je vous recommande fortement), on peut voir plusieurs cas d'usage qui sont possibles grâce à un tel mécanisme : le réseau, la sécurité et l'observabilité.

En effet, le positionnement des fonctions directement dans le Kernel, permet de voir absolument tout ce qui vient de l'espace utilisateur. Ainsi, il est possible de déclencher des actions sur des évènements particuliers.

Fonctionnement

Hook sur les appels systèmes

Le schéma ci-dessus illustre le mécanisme de fonctionnement d'eBPF.
Les programmes eBPF sont exécutés lorsque des Hooks sont atteints. Les Hooks sont des points d'attaches prédéfinis qui incluent les appels système, l'entrée/sortie de fonctions, les points de trace du noyau, les événements réseau, et d’autres encore.

Lorsqu'un Hook est atteint, il est possible d'exécuter des fonctions sur l'action interceptée. On peut observer, rediriger, filtrer, etc...

eBFP permet aussi d'utiliser des MAPs afin de partager des informations et de stocker un état. D'autres programmes eBPF peuvent accéder à ces MAPs pour pouvoir créer du "Service Chaining", mais surtout des applications, dans l'espace utilisateur, peuvent aussi y accéder, permettant une remontée d'information.

Architecture des maps

XDP (eXpress Data Path)

Une des applications eBPF qui nous intéresse particulièrement est XDP. XDP est une application spécialisée de traitement de paquets, programmable et haute performance dans le Data Path de réseau Linux.

XDP traite les paquets au plus bas niveau de la Stack logiciel et vise à bypasser le processeur. En gros XDP permet de créer des traitement haut débit sur les paquets réseaux. C'est une composante essentielle de l'utilisation d'eBPF pour permettre la mise en place de fonctionnalités de type Firewalling et Load Balancing.

Cilium

eBPF-based Networking, Observability, Security

Cilium est une solution Cloud Native, Open Source qui permet de fournir, de sécuriser et d'observer une connectivité réseau entre les Workloads, en se basant sur la technologie eBPF.

Je me passionne depuis un bon moment sur cette CNI et les prochains articles permettront de faire le tour de toutes les fonctionnalités majeures dans l'univers des réseaux et de la sécurité.