Die Kunst der forensischen Analyse von Kubernetes-Containern
Entdecken Sie, wie Sie Kubernetes-Container effizient forensisch analysieren und wertvolle Einblicke gewinnen können.
In meinem vorherigen Artikel habe ich das Thema Checkpointing in Kubernetes vorgestellt und erläutert, wie es eingerichtet werden kann. Diesmal möchte ich Ihnen zeigen, wie Sie die erstellten Checkpoints analysieren können. Das Checkpointing ist derzeit noch eine Alpha-Funktion in Kubernetes, und dieser Artikel gibt einen Ausblick darauf, wie diese Funktion in Zukunft aussehen könnte.
Vorbereitung
Details zur Konfiguration von Kubernetes und der zugrunde liegenden CRI-Implementierung, um die Unterstützung für Checkpointing zu aktivieren, finden Sie in meinem vorherigen Artikel.
Als Beispiel habe ich ein Container-Image (quay.io/adrianreber/counter:blog
) vorbereitet, das ich im Folgenden checkpointen und analysieren möchte. Mit diesem Container kann ich Dateien im Container erstellen und Informationen im Speicher speichern, die ich später im Checkpoint finden möchte.
Um diesen Container auszuführen, benötige ich ein Pod. Für dieses Beispiel verwende ich das folgende Pod-Manifest:
apiVersion: v1
kind: Pod
metadata:
name: counters
spec:
containers:
- name: counter
image: quay.io/adrianreber/counter:blog
Dies führt dazu, dass ein Container namens counter
in einem Pod namens counters
läuft.
Sobald der Container läuft, führe ich folgende Aktionen mit diesem Container aus:
console
$ kubectl get pod counters –template ‘{{.status.podIP}}’
10.88.0.25
$ curl 10.88.0.25:8088/create?test-file
$ curl 10.88.0.25:8088/secret?RANDOM_1432_KEY
$ curl 10.88.0.25:8088
Der erste Zugriff erstellt eine Datei namens test-file
mit dem Inhalt test-file
im Container, und der zweite Zugriff speichert meine geheimen Informationen (RANDOM_1432_KEY
) irgendwo im Speicher des Containers. Der letzte Zugriff fügt einfach eine zusätzliche Zeile zur internen Protokolldatei hinzu.
Der letzte Schritt, bevor ich den Checkpoint analysieren kann, besteht darin, Kubernetes zu sagen, dass es den Checkpoint erstellen soll. Wie im vorherigen Artikel beschrieben, erfordert dies den Zugriff auf den checkpoint
API-Endpunkt des kubelet.
Für einen Container namens counter in einem Pod namens counters in einem Namespace namens default ist der kubelet API-Endpunkt wie folgt erreichbar:
# Führen Sie dies auf dem Knoten aus, auf dem das Pod läuft
curl -X POST "https://localhost:10250/checkpoint/default/counters/counter"
Für die Vollständigkeit sind die folgenden curl
-Befehlszeilenoptionen erforderlich, damit curl
das selbstsignierte Zertifikat des kubelet akzeptiert und die Verwendung der kubelet checkpoint
API autorisiert:
--insecure --cert /var/run/kubernetes/client-admin.crt --key /var/run/kubernetes/client-admin.key
Sobald das Checkpointing abgeschlossen ist, sollte der Checkpoint unter /var/lib/kubelet/checkpoints/checkpoint-<pod-name>_<namespace-name>-<container-name>-<timestamp>.tar
verfügbar sein.
In den folgenden Schritten dieses Artikels verwende ich den Namen checkpoint.tar
, wenn ich das Checkpoint-Archiv analysiere.
Quelle: Kubernetes Blog