Ein nicht ganz unbekannter Running Gag lautet: „Alle Softwareprobleme lassen sich mit Kubernetes lösen“. Aber für Laien erklärt: Was genau ist Kubernetes, und warum sollte man sich unbedingt dafür interessieren?
Dazu wurde Tim Mackey, Principal Security Strategist bei Synopsys, befragt.
Was ist Kubernetes? Und was genau sind Container? Beides gehört ja zusammen.
Tim Mackey: Kubernetes ist eine Möglichkeit, Cloud-Computing-Ressourcen zu verwalten.
Und zwar so, dass sie sich gleichermaßen für Unternehmen mit den IT-Anforderungen eines kleinen Shops bis hin zu Unternehmen auf Konzernniveau skalieren lassen. Die von Kubernetes verwalteten Computerressourcen bezeichnet man als Container, und sie sind die Software, die für den Betrieb eines Teils einer Anwendung erforderlich ist. Wenn Sie sich beispielsweise eine Shopping-Website ansehen, können der Warenkorb, der Anmeldeprozess, die Suche und der Produktkatalog alle in separaten Containern implementiert sein. Aber nicht jede dieser Softwarefunktionen benötigt die gleichen Ressourcen. Ein Benutzer befüllt normalerweise einen einzigen Warenkorb und meldet sich auch nur ein einmal an. Aber er stellt möglicherweise viele verschiedene Suchanfragen, bevor er sich für ein Produkt entscheidet, das er schlussendlich kaufen will.
Mit Kubernetes lässt sich jede dieser containerisierten Softwareressourcen unabhängig voneinander und gemäß der jeweiligen Kundenaktivität skalieren. Ein Vorteil von Kubernetes ist, dass Unternehmen damit eine hoch resiliente Infrastruktur nutzen – eine Infrastruktur, die Ausfälle und Nachfragespitzen gleichermaßen verkraftet. Wie viele Replikate eines jeden Containers man braucht, um die Benutzeraktivität zu befriedigen, das variiert im Laufe eines Tages.
Kubernetes trägt dazu bei, dass tatsächlich nur die Ressourcen bereitgestellt werden, die für den aktuellen Bedarf benötigt werden. Genau das hilft Unternehmen dabei, die Kundenerwartungen zu erfüllen und gleichzeitig im Rahmen ihres Budgets zu bleiben.
Wie werden Container und Kubernetes innerhalb einer Anwendung eingesetzt? Wenn Google angibt, “Milliarden von Containern pro Woche” auszuführen – was ist damit gemeint?
Tim Mackey: Die Aussage, Milliarden von Containern pro Woche auszuführen, ist als solche schwer zu beurteilen. Es kann bedeuten, dass buchstäblich Milliarden von Containern gleichzeitig ausgeführt werden. Viel wahrscheinlicher ist aber, dass es sich um Milliarden von Container-Instanzen handelt. Der Unterschied besteht darin, dass im Gegensatz zu einer herkömmlichen Anwendung, die mehrere Funktionen über einen langen Zeitraum, vielleicht Tage oder Wochen, ausführt, Container typischerweise simple Funktionen ausführen und eine Lebensdauer von nur wenigen Sekunden haben können.
Das hat eine Reihe von Vorteilen. Einer der wichtigsten davon ist die Sicherheit. Hacker versuchen üblicherweise auf Anmeldedaten wie Passwörter zuzugreifen. Bei einer herkömmlichen Anwendung könnten der Benutzername und das Kennwort eines Benutzers direkt an die Anwendung übermittelt werden. Wird die Anwendung kompromittiert, haben die Hacker potenziell Zugriff auf die Anmeldedaten des Benutzers. Wäre die Anwendung hingegen „Cloud-nativ“, ein anderer Begriff für containerisiert, würde der Anmeldeprozess in einem eigenen dedizierten Container isoliert.
Das heißt, ein Hacker müsste den Login-Container kompromittieren. Das ist natürlich möglich. Allerdings gibt es Dutzende oder sogar Hunderte von Login-Containern, und ihre Lebensdauer währt nur so lang wie es dauert, die angegebenen Anmeldedaten zu validieren. Dann müssten die Angreifer einen Weg finden, sämtliche Login-Container zu kompromittieren und den Angriff in Sekundenbruchteilen durchzuführen. Diese einfache Eigenschaft von Containern besagt, dass jedes Login einen eigenen Container erfordern kann und es im Laufe einer Woche gegebenenfalls Milliarden davon gibt.
Warum sind Kubernetes und Container so elementar wichtig für die digitale Transformation? Wie wirkt sich das praktisch aus?
Tim Mackey: Die digitale Transformation ist Cloud-getrieben und damit zwangsläufig auch von Kubernetes abhängig. Eine Schlüsseleigenschaft der Cloud ist die Resilienz. Cloud-Anbieter haben mehrere Präsenzpunkte im Internet, und Unternehmen stellen ihre Dienste in unterschiedlichen Regionen bereit. Bei einem Ausfall in lediglich einer Region laufen die in anderen Regionen eingesetzten Anwendungen weiter – auch wenn sie möglicherweise langsamer reagieren.
Hier hilft Kubernetes, einige wichtige Probleme zu lösen. Wenn es in einer Region zu einem Ausfall kommt, kann Kubernetes in den verbleibenden Regionen, die online sind, Ressourcen hochskalieren, um die erhöhte Nachfrage zu befriedigen. Aus Sicht von Kubernetes unterscheidet sich der Ausfall nicht von einem plötzlichen Nachfrageanstieg beispielsweise durch einen viralen Social-Media-Beitrag. Kubernetes „weiß“, dass mehr Kapazität benötigt wird, und folgt der Skalierungskonfiguration, die das Unternehmen definiert hat, um die Kapazität nahtlos zu erhöhen.
Für welche Anwendungen sind Kubernetes und Container die richtige Wahl und wo eher nicht?
Tim Mackey: Man kann Container verwenden, um Probleme mit virtuellen Maschinen zu lösen, aber in der Praxis sind Container am effektivsten, wenn sie Cloud-native Anwendungen ausführen.
Die Anwendung wurde so konzipiert, dass sie in einer Cloud-Umgebung ausgeführt wird. Cloud-Umgebungen sind in vielerlei Hinsicht unterschiedlich, sodass Annahmen darüber, wie Systemprotokolle oder Patch-Management auszusehen haben, überdacht werden sollten. Für viele Unternehmen ist Kubernetes noch neu. Und oft ist es verlockend, bestehende IT-Praktiken zu replizieren und sie auf Container und Kubernetes zu übertragen. Das ist aber nicht unbedingt im Sinne der Sicherheit und erhöht nicht selten die geschäftlichen Risiken.
Nehmen wir an, ein Unternehmen verfügt über eine Richtlinie, sich bei allen laufenden virtuellen Infrastrukturen anzumelden und den Patch-Status zu überprüfen. Das ist nicht unvernünftig. Wenn man diese Richtlinie aber auf Container und Kubernetes anwendet, heißt es, dass alle Container über solche Funktionen verfügen müssen. Und zwar auch dann, wenn keine Anforderung für diese
Funktionalität besteht. Besser wäre es, ein Verständnis dafür zu entwickeln, dass Kubernetes hervorragend geeignet ist, Replikate desselben “goldenen” Containers zu verwalten.
Container patcht man am besten indem man diesen “goldenen” Container patcht. Das anschließende Auslösen von Kubernetes zum erneuten Bereitstellen der Anwendung erfolgt dann mit diesem neu gepatchten Container. Im Endergebnis sind alle Container gepatcht, und aufgrund der Art und Weise, wie Kubernetes Replikate verwaltet, bleiben sie es auch.