Aller au contenu
Mon premier contact avec Tetragon
  1. Tetragons/

Mon premier contact avec Tetragon

·1173 mots·6 mins·
Joseph Ligier
Auteur
Joseph Ligier
CNCF ambassador | Kubestronaut 🐝
Sommaire
Ma première fois avec Tetragon - Cet article fait partie d'une série.
Partie 1: Cet article

Dans cette série d’articles, nous allons découvrir Tetragon qui est un outil pour sécuriser les clusters Kubernetes.

Voici les différentes questions que vous pourrez répondre après la lecture de ces articles :

  • Est-ce que cet outil est fait pour votre cluster Kubernetes ?
  • Comment on l’installe ?
  • Comment cela fonctionne ?
  • Comment étendre ses fonctionnalités de base ?

Dans ce premier article, nous allons avoir une vue d’ensemble de ce qu’est Tetragon.

Tetragon logo
Tetragon


Qu’est-ce que Tetragon ?
#

Qu’est-ce que c’est qu’ce bin’s ?
#

Vous vous êtes déjà demandé ce qu’il se passait réellement dans chacun de vos pods de vos clusters Kubernetes à un instant T ? Quels processus sont lancés ? Par qui ? Avec quels arguments ?

Et si un de vos pods était compromis, comment détecter le comportement malveillant avant qu’il ne cause de dégats ?

C’est exactement dans ces domaines que Tetragon intervient.

Tetragon peut être considéré comme un EDR (Endpoint Detection and Response) pour Kubernetes.
Il fournit de la visibilité et de la détection sur les processus et événements runtime, c’est-à-dire toutes les actions qui se produisent à l’intérieur d’un pod pendant son exécution : lancement de processus, accès fichiers, connexions réseau, appels système, etc.

Il a été créé par l’entreprise Isovalent qui est également à l’origine de Cilium, un plugin CNI pour les clusters Kubernetes. Tout comme Cilium, Tetragon est basé sur eBPF.

eBPF logo

C’est quoi eBPF ?
#

Les programmes eBPF sont des programmes qui s’exécutent dans le noyau Linux. Ils sont attachés (ou crochetés, hook en anglais) à des points spécifiques du noyau. Chaque fois que le noyau Linux passe par un hook, le programme est déclenché.

eBPF hook
Exemple de hooks eBPF (représentés par une abeille)

Ces programmes sont relativement difficiles à écrire car il faut connaître la programmation système bas niveau.

Si vous voulez en savoir plus, j’ai créé des articles pour apprendre à programmer en eBPF avec du Rust sans connaître eBPF ni Rust.

eBPF in tetragon

Comment Tetragon utilise eBPF ?
#

Tetragon est en fait un “générateur” de programmes eBPF :

  • vous allez créer des tracing policies (en yaml) ;
  • Tetragon va se charger de les traduire en programmes eBPF et de les installer dans le noyau Linux de chaque serveur ;
  • chaque fois que l’événement (event) décrit dans la tracing policies aura lieu, Tetragon génèrera un log avec toutes les informations disponibles.

Ainsi vous n’aurez pas besoin de connaître un langage bas niveau. Mais comprendre eBPF et avoir une bonne compréhension du noyau Linux est fondamental pour devenir expert Tetragon.

Cilium est également un générateur de programmes eBPF mais il crée des hooks eBPF réseau (de type TC et XDP pour être précis) au niveau des interfaces réseau. Tetragon génère d’autres types de programmes eBPF (trace et sécurité) comme les Tracepoints, kProbes, LSM, etc).
Chaque action détectée dans le kernel qui correspond à votre policy est un event, le cœur de la détection runtime.

Maintenant que nous avons vu le fonctionnement théorique de Tetragon, passons à la pratique.


Démonstration de Tetragon 🚀
#

Pour suivre la démonstration présentée dans la suite de cet article, vous devez avoir accès à un Linux. Je l’ai installé sur une VM Lima sur mon Mac. Si vous êtes déjà sous Linux, je vous conseille de l’installer sur une VM Linux pour éviter de casser votre environnement perso.

Installation sur un serveur
#

Nous allons montrer comment on installe Tetragon hors Kubernetes. Cela permettra de mieux comprendre comment il fonctionne sans connaître Kubernetes.

Nous allons installer la dernière version de Tetragon (1.6.0 au moment de l’écriture). On va créer des variables pour que l’installation soit toujours compatible avec les nouvelles versions :

VERSION=v1.6.0
ARCH=amd64 #other choice arm64

N’hésitez pas à vérifier s’il n’y a pas des versions plus récentes.

Nous téléchargeons et décompressons le tar gz :

curl -LO https://github.com/cilium/tetragon/releases/download/$VERSION/tetragon-${VERSION}-${ARCH}.tar.gz
tar -xvf tetragon-${VERSION}-${ARCH}.tar.gz

Nous installons ensuite Tetragon :

cd tetragon-${VERSION}-${ARCH}/
sudo ./install.sh

Cela va simplement copier les binaires dans les bons répertoires, configurer systemd, etc.

Pour le désinstaller, il y a un autre script : uninstall.sh.

Regardons les événements de Tetragon
#

Avant même de créer vos propres tracing policies, Tetragon produit déjà des events par défaut.
Grâce à la ligne de commande officielle tetra, vous pouvez récupérer ces events en direct :

tetra getevents -o compact

Grâce à cette commande, vous allez voir les logs que génèrent Tetragon. Ici, sans configuration, vous pourrez observer :

  • tous les processus qui démarrent en direct (🚀)
  • tous les processus qui meurent en direct (💥)

Ainsi à l’installation, Tetragon injecte déjà des programmes eBPF dans le noyau Linux permettant de logger tout le cycle de vie des processus.

À titre d’exemple, voici ce que je vois dans ma VM :

🚀 process lima-default /usr/sbin/iptables -t nat -S
💥 exit    lima-default /usr/sbin/iptables -t nat -S 0
🚀 process lima-default /usr/bin/touch /var/lib/apt/periodic/upgrade-stamp
🚀 process lima-default /usr/bin/apt-config shell MaxAge APT::Archives::MaxAge
🚀 process lima-default /usr/bin/dpkg --print-foreign-architectures
🚀 process lima-default /usr/bin/apt-config shell MaxAge APT::Periodic::MaxAge
🚀 process lima-default /usr/bin/dpkg --print-foreign-architectures
🚀 process lima-default /usr/bin/apt-config shell MinAge APT::Archives::MinAge
🚀 process lima-default /usr/sbin/iptables -t nat -S
💥 exit    lima-default /usr/sbin/iptables -t nat -S 0
  • La première colonne est un emoji qui informe le statut du processus (🚀 ou 💥)
  • La deuxième colonne est sa traduction (process ou exit)
  • La troisième colonne est le nom du serveur
  • La quatrième colonne est le nom de la commandes et ses arguments
  • Si le processus est en exit, la dernière colonne est le code retour de commande (0 si cela se passe bien)

On peut également changer la sortie standard et avoir des logs plus standards avec du json et comme ça il ne reste plus qu’à installer des outils comme Prometheus, Grafana ou Fluentbit pour l’exploiter de manière asynchrone.

Dans cette série d’article, nous ne verrons pas la configuration d’outils de monitoring qui est essentiel pour de la production (Exemple d’article sur le sujet). Nous allons surtout nous focaliser sur Tetragon et ses fonctionnalités.

Introduction aux politiques de traces
#

L’installation de Tetragon permet déjà d’observer pas mal de choses. Mais certaines informations plus spécifiques ne sont pas disponibles automatiquement, par exemple :

  • savoir quel pod communique avec une IP précise ;
  • vérifier si un fichier particulier a été modifié.

Pour cela, il faut définir des tracing policies (politiques de traces, traduction français non officielle). Par ailleurs, ces tracing policies permettent d’aller encore plus loin : en plus d’observer, Tetragon pourra agir avant même que le binaire ait fini son exécution.

Tetragon peut alors agir de façon proactive en empêchant un processus d’accéder à une ressource par exemple.

Il y a pas mal d’exemples qu’on peut découvrir dans la doc officiel. N’hésitez pas à la consulter si vous souhaitez explorer davantage les possibilités offertes par les Tracing Policies.

Nous avons introduit ce qu’est Tetragon :

  • son fonctionnement général ;
  • son installation sur un serveur Linux ;
  • son comportement par défaut ;
  • et la manière d’étendre ses capacités via des Tracing Policies.

Dans la prochaine partie, nous installerons Tetragon dans son environnement naturel : Kubernetes.

Ma première fois avec Tetragon - Cet article fait partie d'une série.
Partie 1: Cet article