TL;DR
- Klassische Container-Builds mit Docker Daemon, Root-Rechten und
docker.sock im CI-System sind ein unnötiges Sicherheitsrisiko – insbesondere, wenn Builds direkt in einem Kubernetes-Cluster laufen.
- Rootless, daemonless Tools wie Kaniko und Buildah erlauben sichere Image-Builds in Pods ohne privilegierte Rechte und ohne Docker Daemon – ein wichtiger Baustein für technische Guardrails und moderne Compliance-Anforderungen.
- Kaniko ist der „Kubernetes-native“ Weg: deklarativ, stark auf Dockerfiles fokussiert, mit gutem Layer-Caching über die Registry; Buildah bietet mehr Flexibilität, tiefe OCI-Integration und Skriptbarkeit – eignet sich, wenn Sie komplexere Build-Workflows oder eigene Toolchains brauchen.
- Für den europäischen Kontext – inklusive Cyber Resilience Act und signierten Builds – sind rootless Pipelines ein pragmatischer Weg, Security-by-Design in der Softwarelieferkette zu verankern.
- ayedo setzt in der eigenen Plattform konsequent auf rootless Builds mit Kaniko und Buildah, integriert in GitLab, Harbor und GitOps-Deployment – und unterstützt Teams dabei, diese Architektur strukturiert zu übernehmen.
Warum traditionelle Container-Builds in Kubernetes zum Risiko werden
Viele Organisationen haben ihre ersten CI/CD-Pipelines mit einer simplen Annahme gebaut: „Wir installieren Docker auf dem Runner und rufen docker build auf.“ In klassischen VM-Setups war das pragmatisch. In einem Kubernetes-Cluster wird aus dieser Gewohnheit jedoch ein strukturelles Risiko.
Typische Muster, die in modernen Umgebungen problematisch sind:
- CI-Jobs mit direktem Zugriff auf
docker.sock
- Build-Pods, die als
privileged laufen
- Container-Builder, die effektiv Root-Rechte auf dem Node erhalten
Damit erhält der Build-Prozess einen weitreichenden Zugriff auf den Host – und indirekt auf andere Workloads. Aus Angreiferperspektive ist die CI-Umgebung hochattraktiv: Zugriff auf Quellcode, Credentials, Registries und oft Produktionscluster.
Aus Compliance-Sicht erschweren solche Setups zudem die Argumentation, dass Sie das Prinzip der minimalen Rechte konsequent umsetzen. Security- und Audit-Teams fragen zunehmend:
- Welche Rechte haben CI-Jobs tatsächlich?
- Kann ein kompromittierter Build-Job andere Workloads im Cluster beeinflussen?
- Wie stellen Sie sicher, dass Guardrails wie „keine privileged Pods“ wirklich durchgängig gelten?
Die Antwort darauf führt fast zwangsläufig zu rootless, daemonless Build-Werkzeugen.
Rootless, daemonless Builds: Prinzipien statt Workaround
„Rootless“ und „daemonless“ sind mehr als Schlagworte – sie beschreiben ein Architekturmuster:
- Rootless: Der Build-Prozess läuft nicht mit Root-Rechten im Container oder auf dem Host. Nutzer-Namespaces und User-Space-Dateisysteme sorgen dafür, dass der Build sich wie Root „anfühlt“, aber technisch keine Host-Privilegien erhält.
- Daemonless: Es gibt keinen langlaufenden Docker Daemon mehr, der mit dem Host kommuniziert und über
docker.sock gesteuert wird. Stattdessen baut ein einzelnes Prozess-Tool direkt Container-Layer und schreibt sie in eine Registry oder ein lokales Storage-Backend.
Für Kubernetes-native CI/CD bedeutet das:
- Build-Jobs laufen als normale Pods mit restriktiven PodSecurity- oder Admission-Policies.
- Guardrails wie „keine
privileged-Pods“, „keine Host-Mounts“ oder „keine HostPID/HostIPC“ lassen sich hart durchsetzen.
- Sicherheitszonen werden klarer: Die CI-Pipeline baut Images, aber sie erhält keinen generellen Zugriff auf den Node.
Kaniko und Buildah sind zwei ausgereifte Projekte, die genau dieses Muster implementieren – mit unterschiedlichen Schwerpunkten.
Kaniko: Kubernetes-native Image-Builds ohne Docker Daemon
Kaniko wurde ursprünglich von Google entwickelt, um Container-Images in Kubernetes-Clustern zu bauen, ohne einen Docker Daemon zu benötigen. Es ist damit von Haus aus auf Cluster-Umgebungen und CI/CD zugeschnitten.
Architektur und Funktionsweise
Kaniko:
- Läuft selbst als Container in einem Pod.
- Liest ein Dockerfile und den Build-Kontext (z. B. aus dem Git-Checkout).
- Simuliert den Docker-Build-Prozess in User-Space, ohne auf
docker.sock oder Host-Privilegien zuzugreifen.
- Schreibt die resultierenden Image-Layer direkt in eine Registry, etwa Harbor.
Wichtige Eigenschaften:
- Rootless: Kaniko benötigt keine Root-Rechte im Pod; Policies, die
runAsNonRoot fordern, bleiben intakt.
- Daemonless: Es ist kein Docker Daemon im Cluster nötig; das reduziert Angriffsfläche und Komplexität.
- Multi-Stage-Builds: Moderne Dockerfile-Patterns werden unterstützt, inklusive Multi-Stage-Builds für schlanke Produktionsimages.
- Layer-Caching: Kaniko kann ein dediziertes Cache-Repository in der Registry nutzen. Häufig wiederverwendete Layer (z. B. Basis-Dependencies) müssen dann nicht bei jedem Build neu erzeugt werden.
Stärken von Kaniko
Für viele Teams ist Kaniko der naheliegende Standard:
- Einfachheit: Wer bereits saubere Dockerfiles hat, kann Kaniko oft ohne große Umstellungen einsetzen.
- Kubernetes-Integration: Kaniko-Executors fügen sich gut in bestehende GitLab-Runners auf Kubernetes ein.
- Gute Performance durch Remote-Caching: Gerade in Shared-Runner-Umgebungen ist Caching über eine Registry robuster als lokale Daemon-Caches.
Die Kehrseite dieser Fokussierung ist, dass Kaniko bewusst nicht alles können will: Es ist primär ein Dockerfile-Interpreter, kein umfassendes Container-Tooling.
Buildah stammt aus dem Red-Hat-Umfeld und ist Teil des breiteren OCI-Ökosystems rund um Podman. Es ist nicht nur ein „Image Builder“, sondern ein Werkzeugkasten für die Arbeit mit Container-Images.
Architektur und Funktionsweise
Buildah:
- Ist ein CLI-Tool, das Images erstellen, modifizieren, taggen und pushen kann.
- Unterstützt sowohl Dockerfiles als auch deklarative Build-Skripte und schrittweise Image-Manipulation.
- Arbeitet OCI-nativ und integriert sich gut in Toolchains, die auf offenen Standards beruhen.
- Lässt sich ebenfalls rootless und ohne Docker Daemon betreiben – sowohl direkt auf Linux-Workern als auch in Containern innerhalb eines Kubernetes-Clusters.
Stärken von Buildah
Buildah spielt seine Vorteile aus, wenn die Anforderungen an den Build-Prozess komplexer werden:
- Hohe Flexibilität: Neben klassischen Dockerfile-Builds können Sie Images auch schrittweise in Skripten zusammenstellen – nützlich bei dynamischen oder generischen Pipelines.
- Tiefe OCI-Integration: Für Teams, die verstärkt auf OCI-Standards, SBOMs und signierte Artefakte setzen, fügt sich Buildah gut in entsprechende Toolchains ein.
- Erweiterte Features: Feinere Kontrolle über Layer, Storage-Backends und Integration mit anderen Werkzeugen (z. B. Podman) ist möglich.
Der Preis ist eine etwas höhere Einstiegshürde: Wer „nur“ Dockerfiles bauen möchte, findet Kaniko oft leichter zugänglich.
Beide Werkzeuge sind rootless, daemonless und damit grundsätzlich geeignet, Ihre Build-Pipelines sicherer zu machen. Die Entscheidung hängt weniger an „besser oder schlechter“, sondern an Ihrem Kontext.
Orientierungspunkte für die Auswahl
1. Fokus auf Kubernetes-CI mit bestehenden Dockerfiles
- Sie setzen bereits stark auf Kubernetes-basierte Runner, etwa GitLab Runners im Cluster.
- Ihre Projekte nutzen konsistente Dockerfiles, Multi-Stage-Builds und standardisierte Patterns.
- Sie wünschen sich eine möglichst einfache Umstellung von
docker build auf ein rootless Tool.
→ In diesem Setting ist Kaniko meist der pragmatische Einstieg.
2. Bedarf an flexiblen, skriptbaren Build-Prozessen
- Sie wollen Images programmatisch erstellen, ohne sich strikt an Dockerfile-Syntax zu binden.
- Ihre Toolchain soll tiefergehende OCI-Funktionalitäten nutzen (z. B. erweiterte Metadaten, spezielle Storage-Setups).
- Sie planen komplexere Build-orchestrierungen, etwa für Base-Image-Pipelines oder mehrere Variationen eines Produkts.
→ Hier spielt Buildah seine Stärken aus.
3. Performance- und Caching-Überlegungen
- Kaniko nutzt typischerweise ein Registry-basiertes Cache-Repository – ideal für Shared-Runner in Clustern.
- Buildah kann stärker von lokalem Caching profitieren, wenn Sie dedizierte Runner-Nodes haben, auf denen Builds regelmäßig laufen.
In vielen Organisationen ist eine Kombination sinnvoll: Kaniko für standardisierte App-Workloads, Buildah für spezielle Pipelines und Plattform-Builds.
Guardrails und Cyber Resilience Act: Rootless Builds als Compliance-Baustein
Mit dem europäischen Cyber Resilience Act (CRA), der am 29. Juli 2024 in Kraft tritt, verschiebt sich der Fokus regulatorisch noch stärker in Richtung sichere Softwarelieferketten. Nach Ablauf der Übergangsfristen werden Hersteller nachweisen müssen:
- dass sie Sicherheitsrisiken systematisch adressieren,
- dass sie Schwachstellenmanagement und Updates über den gesamten Lifecycle betreiben,
- dass sie Transparenz über die eingesetzten Komponenten (z. B. SBOMs) bieten.
In diesem Kontext sind rootless, daemonless Builds kein „Nice to have“, sondern eine greifbare Manifestation von Security-by-Design.
Guardrails im Cluster durchsetzen
Moderne Plattform-Teams implementieren Guardrails wie:
- Keine
privileged-Pods
- Verbot von Host-Mounts (z. B.
/var/run/docker.sock)
- Pflicht zu
runAsNonRoot und restriktiven SecurityContexts
Mit klassischen Docker-basierten Builds kollidieren diese Vorgaben schnell. Kaniko und Buildah hingegen fügen sich in solche Policies ein, ohne dass Sie Ausnahmen oder Sonderrollen definieren müssen.
Das erleichtert nicht nur die technische Umsetzung, sondern auch die Dokumentation für Compliance-Audits: Sie können klar zeigen, dass CI-Builds den gleichen Sicherheitsregeln unterliegen wie alle anderen Workloads.
Signierte Builds und Nachvollziehbarkeit
Der CRA fördert explizit Maßnahmen wie:
- Signierte Artefakte
- Nachvollziehbare Build-Prozesse
- Rückverfolgbarkeit von Versionen und Komponenten
Kaniko und Buildah erzeugen OCI-kompatible Images, die sich nahtlos mit Signatur-Tools (z. B. über Sigstore/cosign) kombinieren lassen. In einer typischen Pipeline sieht das konzeptionell so aus:
- Git-Commit wird in GitLab gemergt.
- Rootless Build-Job (Kaniko oder Buildah) erstellt ein Image und pusht es in Harbor.
- Ein nachgelagerter Job signiert das Image und erstellt optional SBOMs und Attestierungen.
- GitOps-Deployment-Tools verteilen ausschließlich signierte Images in Zielcluster.
So entsteht eine lieferkettenfähige Architektur, die den Anforderungen des CRA und interner Richtlinien langfristig besser standhält.
Praktisches Beispiel: GitLab CI/CD-Job mit Kaniko in Kubernetes
Um das greifbar zu machen, lohnt sich ein Blick auf den Aufbau einer Pipeline mit GitLab und Kaniko auf der ayedo-Plattform – abstrahiert von konkretem YAML.
Rollenverteilung im Build-Prozess
- GitLab orchestriert die CI/CD-Pipeline und verwaltet Projektkonfiguration, Branches und Merge Requests.
- GitLab Runner auf Kubernetes starten für jeden Job einen eigenen Pod im Cluster.
- Kaniko läuft in diesen Pods als Container, liest das Projekt-Repository und erzeugt Images.
- Harbor dient als zentrale Registry für Images und Helm-Charts.
Kein Schritt erfordert einen Docker Daemon oder privilegierte Pods im Cluster.
Ablauf eines Kaniko-Build-Jobs
Konzeptionell passiert im Build-Job Folgendes:
- GitLab plant einen „Build“-Job in der Pipeline (typischerweise nach Tests und Linting).
- Der Kubernetes-basierte Runner startet einen Pod, der das Kaniko-Executor-Image verwendet.
- Der Pod erhält:
- Read-Only-Zugriff auf den Quellcode des Commits,
- Zugriff auf Registry-Credentials (z. B. als Kubernetes Secret),
- Konfigurationsvariablen wie Ziel-Image-Namen und Tags.
- Kaniko liest das Dockerfile, baut das Image in User-Space und schreibt die Layer direkt in Harbor.
- Optional nutzt Kaniko ein dediziertes Cache-Repository in Harbor, um wiederverwendbare Layer vorzuhalten.
- Nach erfolgreichem Push endet der Pod – es bleibt kein langfristiger Dienst mit erweiterten Rechten im Cluster zurück.
In einem nächsten Pipeline-Schritt können Sie dann:
- Helm-Charts erstellen, die das neue Image referenzieren,
- Signaturen und SBOMs erzeugen,
- über GitOps-Mechanismen in Zielumgebungen deployen.
Durchgängig gilt: Rootless und daemonless – ohne Docker Daemon, ohne docker.sock, ohne Privileged-Pods.
Häufige Fragen
Brauche ich in Zukunft gar kein Docker mehr für Builds?
Für die meisten CI/CD-Szenarien in Kubernetes ist ein klassischer Docker Daemon nicht mehr nötig. Kaniko und Buildah decken das Bauen von Images ohne Daemon ab.
Docker kann lokal für Entwicklung und Debugging weiterhin sinnvoll sein. Für produktive Pipelines – insbesondere in sicherheitskritischen oder regulierten Umgebungen – ist ein Umstieg auf rootless Tools jedoch empfehlenswert.
Werden rootless Builds nicht deutlich langsamer?
Die Performance hängt stark von Projektgröße, Netzwerk-Latenz zur Registry und Caching-Strategie ab. In der Praxis zeigt sich:
- Mit sinnvoll konfiguriertem Layer-Caching (z. B. Kaniko-Cache in Harbor) sind Build-Zeiten sehr konkurrenzfähig.
- Durch den Wegfall des Daemon-Overheads und besser planbaren Pod-Ressourcen lassen sich Kapazitäten effizienter nutzen.
- Engpässe liegen häufiger in Tests, Dependency-Downloads oder schwachen Storage-Backends als im eigentlichen Build-Tool.
Rootless heißt also nicht automatisch „langsamer“, sondern eher „anders optimieren“.
Wie unterstützt ayedo bei der Umstellung auf Kaniko oder Buildah?
ayedo stellt eine integrierte Plattform bereit, in der:
- GitLab auf Kubernetes mit vorkonfigurierten, rootless Runnern betrieben wird,
- Build-Jobs mit Kaniko oder Buildah out-of-the-box verfügbar sind,
- Harbor als zentrale Registry, inklusive Caching und Scan-Integration, angebunden ist,
- Guardrails und Policies so gesetzt sind, dass sie Sicherheits- und Compliance-Anforderungen adressieren, ohne Teams auszubremsen.
Gemeinsam mit Ihren Engineering- und Security-Teams begleiten wir die Umstellung Schritt für Schritt – von der ersten Pipeline-Migration bis zur dokumentierten, auditierbaren Lieferkette.
Weitere Fragen? Siehe unsere FAQ
Von der Theorie zur Umsetzung
Rootless, daemonless Container-Builds sind kein theoretisches Ideal mehr, sondern der neue Normalfall für Organisationen, die Sicherheit, Compliance und Geschwindigkeit in Einklang bringen wollen. Kaniko und Buildah bieten zwei ausgereifte Wege dorthin – mit unterschiedlichen Stärken, aber einem gemeinsamen Ziel: Container-Images sicher und nachvollziehbar zu bauen, ohne Ihren Kubernetes-Cluster zu gefährden.
In der ayedo Software Delivery Plattform verbinden wir diese Werkzeuge zu einem konsistenten Gesamtsystem:
- GitLab als kollaboratives Zentrum für Code, Reviews und Pipelines,
- Kubernetes-basierte Runner, die rootless Builds mit Kaniko und Buildah ausführen,
- Harbor als Registry für Images und Charts, inklusive Caching und Security-Scans,
- eine Plattformebene (/platform/), die Guardrails, Policies und Integrationen mit Secrets-Management und GitOps bereitstellt.
So entsteht eine durchgängige Lieferkette, die den Anforderungen des Cyber Resilience Act, internen Security-Richtlinien und praktischer Engineering-Realität gleichermaßen gerecht wird.
Wenn Sie Ihre bestehenden Docker-basierten Builds schrittweise in rootless Pipelines überführen möchten – ohne Ihre Teams mit Tooling-Experimenten zu überfordern – stellen wir erprobte Referenzarchitekturen, Migrationspfade und technische Expertise bereit.
Den Einstieg erleichtert unser kompakter Leitfaden, der typische Migrationsszenarien, Entscheidungsbäume (Kaniko vs. Buildah) und organisatorische Schritte bündelt: Rootless Builds Guide