Was ist ATIX in Action?

ATIX in Action ist der Ort, an dem wir über die Herausforderungen unserer Kunden (ohne Namen zu nennen) und die von uns angebotenen Lösungen berichten. Lassen Sie sich von unseren Aktionsberichten inspirieren uns lassen Sie uns gemeinsam eine Lösung für Ihr Problem finden!

Exakte Container-Versionen in Kubernetes oder Immutable Design in der Praxis

Immer das gewünschte Container-Image aus dem Harbor herunterzuladen lässt sich auf zwei Arten erzwingen: durch Prüfsummen anstelle von Image-Tags und durch die ImagePullPolicy: Always.

Kubernetes Schulung

In nur 3 Tagen die Grundlagen von Kubernetes und dem Orchestrieren von Containern lernen! Von Aufbau und Verwaltung eines Container-Cluster bis zu den wichtigsten Konzepten und Best Practices für den stabilen und sicheren Betrieb von Anwendungen im Kubernetes-Cluster.
ATIX ist offizieller Kubernetes Training Provider

Herausforderung

Viele Unternehmen verwenden eine eigene Registry für ihre Container Images. Ihr Arbeitsablauf sieht vor, Images erst dorthin zu kopieren, bevor die Anwendung im Kubernetes-Cluster startet. Jetzt ist es möglich, dass laufende Anwendungen nicht korrekt aktualisiert werden, zum Beispiel wenn sie Image-Name und -Tag nicht verändert haben.

Das ist unerwünscht und zeigt auf, dass man sich nicht an bestimmte Best Practices gehalten hat.

Kontext

Dieses Problem könnte alle interessieren, die Software in Kubernetes betreiben oder Kubernetes selbst betreiben und verwalten.

Lösung & Kundenvorteile

In Kubernetes weist ein zentraler Scheduler Workloads bestimmten Nodes im Cluster zu. Wenn solch eine Anfrage einen Node erreicht, prüft die Container Runtime dort, ob das dazugehörige Image bereits im Cache vorhanden ist. Wenn nein, lädt es es aus der Registry und startet dann den Container. Ist das Image bereits vorhanden, verwendet die Runtime standardmäßig diese Version der Software.

Im Beispielszenario gab es keinen Unterschied im Namen des Image ( scraper:27.15 ). Es handelte sich übrigens um einen Log-Scraper. Die alte Version versuchte, die Logs über den Docker-Daemon zu sammeln. Im Einsatz ist aber schon eine Weile containerd, worauf das aktualisierte Image zugreift. Diese Abhängigkeit von der Runtime fand keinen Niederschlag im Image-Namen. Kurzfristige Lösung (oder Workaround) in diesem Fall war, die ImagePullPolicy im dazugehörigen DaemonSet von IfNotPresent auf Always zu stellen. Damit ging wieder alles.

Andererseits gibt es Best Practices, die dieses Problem verhindert hätten: 1) Images anhand ihrer SHA256-Prüfsummen anstatt eines Tags zu referenzieren und 2) eine clusterweite ImagePullPolicy: Always zu erzwingen.

Prüfsummen sind eindeutige Identifikatoren für Binärobjekte. Da sie sich für die beiden Image-Versionen unterscheiden, hätte deren Verwendung einen erneuten Download erzwungen. Sie sind unveränderlich (“immutable”) im Gegensatz zu den Tags, die man mit beliebigen Werten überschreiben kann wie in diesem Beispiel.

Images vor jedem Containerstart herunterzuladen hätte ebenfalls geholfen und hat einen weiteren Vorteil. Angenommen, mehrere Mandanten lassen Anwendungen im gleichen Cluster laufen. Mandant A startet ein Deployment, das ein bestimmtes Image A verwendet. Die Container Runtime lädt das Image aus der Registry und verwendet dafür die Zugangsdaten von Mandant A. Mandant B sollte im Zweifel keinen Zugriff auf die Images von A haben (sei es aus sicherheitstechnischen oder lizenztechnischen Gründen). Ist es aber bereits auf der Node vorhanden, könnte B darauf zugreifen, ohne sich irgendwo authentifizieren zu müssen. Das ließe sich über die erzwungene ImagePullPolicy erzwingen.

Für den aktuellen Kunden empfehlen sich beide Wege. Prüfsummen zu verwenden kann jedes Team für sich entscheiden und sollte dort diskutiert werden – insbesondere, an welchen Stellen und ob überhaupt sich daraus Änderungen am Arbeitsablauf ergeben. Die ImagePullPolicy zu erzwingen impliziert, nie Image-Versionen aus dem Cache zu verwenden. Die Entscheidung ist zentral, hat etwas größeren Einfluss, bedingt weniger Änderungen am Workflow und ist zuletzt auch aus Sicherheitserwägungen zu empfehlen.

The following two tabs change content below.

Jan Bundesmann

Neueste Artikel von Jan Bundesmann (alle ansehen)