Kubernetes, auch als K8s abgekürzt, ist eine Open-Source-Plattform zur Automatisierung und Orchestrierung der Bereitstellung, Skalierung und Verwaltung containerisierter Anwendungen und Workloads. Sie stellt eine Computing-Infrastruktur mit integrierter Flexibilität, Skalierbarkeit, Zuverlässigkeit, Hochverfügbarkeit und Portabilität für Anwendungen bereit, die in beliebigen Umgebungen als Container ausgeführt werden – lokal, in der Cloud und am Edge.

Was ist Kubernetes?

Kubernetes automatisiert die gängigsten Aufgaben bei der Verwaltung containerisierter Workloads in großem Maßstab, darunter Bereitstellung, Lastverteilung, horizontale Skalierung, Rollouts und Rollbacks sowie Selbstheilung.

Viele Unternehmen setzen Kubernetes bereits produktiv ein – sei es für einige oder für den Großteil ihrer Anwendungen –, während andere den Einsatz derzeit prüfen. Aufgrund seiner Beliebtheit hat sich Kubernetes zum De-facto-Standard für die Orchestrierung und Verwaltung von Containern entwickelt.

Vorteile von Kubernetes

Die Verbreitung von Kubernetes nimmt rasant zu, da es dabei helfen kann:

  • Den Lebenszyklus von Anwendungs-Releases beschleunigen und vereinfachen
  • Ermöglichen Sie die Portabilität von Workloads über Public-, Private- und Hybrid-Clouds sowie Multi-Cloud-Umgebungen hinweg
  • Effizienz der Ressourcennutzung verbessern
  • Erleichtert das Erreichen von Skalierbarkeit und Produktionsreife
  • Optimieren Sie die Umgebung, um die geschäftlichen SLAs zu erfüllen

Kubernetes und Microservices

Die Umstrukturierung herkömmlicher monolithischer Anwendungen in kleinere, lose gekoppelte Komponenten, sogenannte Microservices, verbessert die geschäftliche Agilität, da neue Anwendungsfunktionen und Updates schneller veröffentlicht und einfacher skaliert werden können. Die Einführung einer cloudnativen Microservices-Architektur erfordert eine Weiterentwicklung der zugrunde liegenden Computing-Infrastruktur. Daher beobachten wir den Übergang von physischen Systemen und virtuellen Maschinen zu Containern als eine der effizientesten Möglichkeiten, Microservices auszuführen.

Mit der wachsenden Zahl an Microservices und Containern steigt auch der Bedarf, die Containerverwaltung zu automatisieren. Hier kommt Kubernetes ins Spiel.

Was ist Kubernetes?

Kubernetes, auch als K8s abgekürzt, ist eine Open-Source-Plattform zur Automatisierung und Orchestrierung der Bereitstellung, Skalierung und Verwaltung containerisierter Anwendungen und Workloads. Sie stellt eine Computing-Infrastruktur mit integrierter Flexibilität, Skalierbarkeit, Zuverlässigkeit, Hochverfügbarkeit und Portabilität für Anwendungen bereit, die in beliebigen Umgebungen als Container ausgeführt werden – lokal, in der Cloud und am Edge.

Kubernetes automatisiert die gängigsten Aufgaben bei der Verwaltung containerisierter Workloads in großem Maßstab, darunter Bereitstellung, Lastverteilung, horizontale Skalierung, Rollouts und Rollbacks sowie Selbstheilung.

Viele Unternehmen setzen Kubernetes bereits produktiv ein – sei es für einige oder für den Großteil ihrer Anwendungen –, während andere den Einsatz noch prüfen. Aufgrund seiner Beliebtheit hat sich Kubernetes zum De-facto-Standard für die Orchestrierung und Verwaltung von Containern entwickelt.

Vorteile von Kubernetes

Die Verbreitung von Kubernetes nimmt rasant zu, da es dabei helfen kann:

  • Den Lebenszyklus der Anwendungsbereitstellung beschleunigen und vereinfachen
  • Ermöglichen Sie die Portabilität von Workloads über Public-, Private- und Hybrid-Clouds sowie Multi-Cloud-Umgebungen hinweg
  • Effizienz der Ressourcennutzung steigern
  • Erleichtert das Erreichen von Skalierbarkeit und Produktionsreife
  • Optimieren Sie die Umgebung, um die geschäftlichen SLAs zu erfüllen

Kubernetes und Microservices

Die Umstrukturierung herkömmlicher monolithischer Anwendungen in kleinere, lose gekoppelte Komponenten, sogenannte Microservices (https://www.f5.com/glossary/microservices-architecture), trägt zu einer höheren geschäftlichen Agilität bei, da neue Anwendungsfunktionen und Updates schneller veröffentlicht und einfacher skaliert werden können. Die Einführung einer cloudnativen Microservices-Architektur macht eine Weiterentwicklung der zugrunde liegenden Computing-Infrastruktur erforderlich. Daher ist der Übergang von physischen Systemen und virtuellen Maschinen zu Containern eine der effizientesten Möglichkeiten, Microservices auszuführen.

Mit der zunehmenden Anzahl von Microservices und Containern wächst auch der Bedarf, die Containerverwaltung zu automatisieren. Hier kommt Kubernetes ins Spiel.

Kubernetes im Vergleich zu Docker

Kubernetes orchestriert und betreibt containerisierte Anwendungen in großem Maßstab. Es bietet jedoch keine Möglichkeit, Anwendungscode zur Verteilung und Ausführung in ein containerisiertes Format zu verpacken (ein Container-Image enthält den Anwendungscode sowie die erforderlichen Laufzeitumgebungen, Bibliotheken und sonstigen Softwareabhängigkeiten). Damit Pods ausgeführt werden können, muss bei Kubernetes außerdem auf jedem Knoten eine Container-Laufzeitumgebung installiert sein. Ursprünglich verwendete Kubernetes Docker Engine als Container-Laufzeitumgebung. Seit Kubernetes 1.24 muss die Container-Laufzeitumgebung jedoch mit dem Container Runtime Interface (CRI) kompatibel sein, was bei Docker Engine nicht der Fall ist. Zwei beliebte CRI-kompatible Container-Laufzeitumgebungen sind CRI-O und containerd (ursprünglich ein Docker-Projekt).

Um Apps in Container zu verpacken, benötigen Sie ein Tool wie Docker, eines der beliebtesten Tools zum Erstellen, Teilen und Ausführen containerisierter Apps. Es vereinfacht und automatisiert das Verpacken von Apps in portable Container-Images, die lokal, in der Cloud und auch in Kubernetes-Umgebungen ausgeführt und bereitgestellt werden können. Mit Docker verpackte Container können nativ auf den Laufzeitumgebungen containerd und CRI-O ausgeführt werden.

Kubernetes-Architektur

Eine Kubernetes-Plattform besteht aus Knoten, die zu einem Cluster zusammengeschlossen sind und sich einen gemeinsamen Pool an Rechenressourcen teilen. Jeder Cluster verwaltet Pods, die kleinsten bereitstellbaren Einheiten der Kubernetes-Architektur. Ein Pod enthält einen oder mehrere Anwendungscontainer. Pods werden zu einem Service zusammengefasst. Auf Anwendungen innerhalb eines Kubernetes-Clusters kann von außen über verschiedene Methoden zugegriffen werden, wobei der Ingress-Controller eine der beliebtesten und effizientesten Möglichkeiten ist.

Kubernetes-Cluster

Sehen wir uns die Komponenten einer Kubernetes-Umgebung genauer an:

Kubernetes-Pods

Ein Kubernetes-Pod ist die kleinste ausführbare Einheit, die in Kubernetes bereitgestellt werden kann. Der Pod ist ein „virtueller Host“ für das bzw. die Container-Images der Anwendung (vergleichbar mit einem physischen Server oder einer virtuellen Maschine für herkömmliche Anwendungen). Er umfasst einen oder mehrere Container, die dieselben Rechen-, Speicher- und Netzwerkressourcen gemeinsam nutzen und daher als relativ eng miteinander gekoppelt betrachtet werden können. Pods werden auf Kubernetes-Knoten bereitgestellt und ausgeführt.

Kubernetes-Knoten

Ein Kubernetes-Knoten ist die kleinste Einheit einer Recheninfrastruktur. Der Knoten kann eine virtuelle Maschine oder ein physischer Server sein, der Prozessor-, Arbeitsspeicher-, Speicher- und Netzwerkressourcen für die Bereitstellung, Ausführung, Skalierung und Verwaltung von Pods zuweist. Mehrere Knoten werden zu einem Cluster zusammengeschlossen.

Kubernetes-Cluster

Ein Kubernetes-Cluster ist eine Gruppe von Knoten, deren gebündelte Rechenressourcen von mehreren Pods gemeinsam genutzt werden. Ein Cluster umfasst zwei Arten von Knoten:

  • Worker-Knoten – Führen die containerisierten Anwendungen in den Pods aus
  • Master-Knoten – Führen die Kubernetes-Steuerungsebene aus, die Worker-Knoten und Pods orchestriert und verwaltet

In der Regel gibt es in einem Kubernetes-Cluster mehrere Knoten jedes Typs, um eine hohe Verfügbarkeit und Fehlertoleranz zu gewährleisten.

Kubernetes-Bereitstellungen

Ein Kubernetes-Deployment beschreibt, wie eine Anwendung als Gruppe von Replikaten (oder Instanzen) des Pods in einem Cluster ausgeführt wird. Ein Deployment definiert:

  • Die Anzahl der auszuführenden Pod-Replikate
  • So führen Sie Pod-Updates schrittweise ein
  • So setzen Sie Pod-Replikate auf den vorherigen Zustand zurück
  • So skalieren Sie Pod-Replikate horizontal

App-Konnektivität in Kubernetes

Kubernetes unterstützt einen dualen IPv4/IPv6-Stack, um die Netzwerkkonnektivität für containerisierte Anwendungen bereitzustellen, die in einem Cluster ausgeführt werden. Sowohl die Kommunikation mit Anwendungen im Kubernetes-Cluster als auch von diesen Anwendungen aus sowie die Kommunikation zwischen Diensten innerhalb des Clusters werden auf Layer 4 (IP-Adresse, Port) und Layer 7 (Hostname, Uniform Resource Identifier [URI]) verwaltet und umfassen Funktionen für Routing, Lastverteilung, Sicherheit, Überwachung und Transparenz.

Kubernetes-Ingress-Controller

Kubernetes-Netzwerk

Im Kubernetes-Netzwerkmodell verfügt jeder Pod über eine eindeutige IP-Adresse, die dynamisch aus dem Pool privater Adressen des Clusters zugewiesen wird. Alle Pods, die auf den verschiedenen Knoten desselben Clusters ausgeführt werden, gehören demselben IP-Netzwerk an und können über dieses Netzwerk miteinander kommunizieren. Mehrere Container innerhalb eines Pods kommunizieren über die Loopback-Schnittstelle miteinander.

Kubernetes-Dienste

Ein Kubernetes-Service macht die Anwendung oder den Microservice, die bzw. der als ein oder mehrere Pods im Cluster ausgeführt wird, im Netzwerk zugänglich („stellt sie bzw. ihn bereit“). Ein Kubernetes-Service stellt die Anwendung als logische Gruppe bestimmter Pods dar, die dieselbe Funktion erfüllen, beispielsweise die Bereitstellung von Webinhalten. Auf alle Pods eines Service wird derselbe Selektor (bzw. dasselbe Label) angewendet, um ihre Zugehörigkeit zum Service zu kennzeichnen. Kubernetes verwendet das Label, um die Gruppe der Pods eines Service nachzuverfolgen, wenn neue Pods bereitgestellt oder laufende Pods beendet werden.

Kubernetes-Dienste können innerhalb des Clusters gemäß den definierten Konnektivitätsrichtlinien miteinander kommunizieren und beispielsweise mithilfe eines Ingress-Controllers von außerhalb des Clusters zugänglich gemacht werden.

Kubernetes-Ingress

Das Ingress-Objekt, ein Bestandteil der Kubernetes Ingress API, kann verwendet werden, um in Kubernetes ausgeführte Anwendungen über Layer-7-Protokolle (Anwendungsschicht) wie HTTP extern zugänglich zu machen. Ingress-Gateways und Ingress-Controller sind Werkzeuge zur Steuerung des Ingress-Objekts und zur Verwaltung der Kommunikation zwischen Benutzern und Anwendungen (User-to-Service- bzw. Nord-Süd-Konnektivität).

Das Ingress-Objekt bietet konzeptbedingt nur eingeschränkte Unterstützung für benutzerdefinierte Richtlinien zur Verarbeitung von Anfragen. So können beispielsweise keine Sicherheitsrichtlinien dafür definiert und damit verknüpft werden. Daher verwenden viele Anbieter benutzerdefinierte Ressourcendefinitionen (Custom Resource Definitions, CRDs), um die Funktionen ihrer Ingress-Controller zu erweitern und so den sich wandelnden Kundenanforderungen gerecht zu werden.

Beispielsweise definiert der NGINX Ingress Controller benutzerdefinierte Ressourcen (VirtualServer, VirtualServerRoute, TransportServer und Policy), um Leistung, Ausfallsicherheit, Verfügbarkeit, Sicherheit und Beobachtbarkeit für API-Gateway-, Load-Balancer- und Ingress-Funktionen am Rand eines Kubernetes-Clusters zu verbessern.

NGINX bietet Dienste für Lastverteilung, Authentifizierung, Autorisierung, Zugriffskontrolle, Verschlüsselung, Observability und Traffic-Aufteilung (Circuit Breaker, A/B-Tests sowie Blue-Green- und Canary-Bereitstellungen), um eine schnelle, zuverlässige und sichere Kommunikation zu gewährleisten. Zur Unterstützung häufiger App-Releases ermöglichen benutzerdefinierte NGINX-Ressourcen außerdem eine Self-Service-Governance für mandantenfähige Entwicklungs- und DevOps-Teams.

Kubernetes-Gateway-API

Die Gateway API ist ein Open-Source-Projekt, das die Vernetzung von Diensten in Kubernetes verbessern und standardisieren soll. Die von der Kubernetes-Community verwaltete Gateway-API-Spezifikation ging aus der Kubernetes Ingress API hervor, um Einschränkungen der Ingress-Ressource in Produktionsumgebungen zu beheben. Dazu gehören die Möglichkeit, detaillierte Richtlinien für die Verarbeitung von Anfragen festzulegen, sowie die Delegierung der Kontrolle über die Konfiguration an mehrere Teams und Rollen.

Weitere Informationen zur Implementierung der Gateway API durch NGINX finden Sie in unserem Blogbeitrag „5 wissenswerte Fakten über NGINX Gateway Fabric“.

Service Mesh

Ein Service Mesh ist eine Infrastrukturschicht, die die Kommunikation zwischen Diensten in einem Kubernetes-Cluster steuert (Service-to-Service- bzw. Ost-West-Konnektivität). Zu den häufigsten Anwendungsfällen für ein Service Mesh gehören die mTLS-Authentifizierung/-Verschlüsselung und die Beobachtbarkeit der Kommunikation zwischen Diensten in einem K8s-Cluster.

Erfahren Sie mehr über die einheitliche Anwendungsbereitstellung mit NGINX Gateway Fabric, das darauf ausgelegt ist, die Anwendungsfälle von Ingress-Controllern und Service Meshes effektiv in einem einzigen Tool zu vereinen, im Beitrag „Ankündigung von NGINX Gateway Fabric Version 1.0“ in unserem Blog.

Kubernetes-Sicherheit

Kubernetes-Sicherheit ist ein mehrschichtiger Ansatz zum Schutz der Infrastruktur (lokale und cloudbasierte Rechenressourcen, Netzwerkkommunikation und Verwaltungsebene) sowie der Anwendungen, die innerhalb eines Kubernetes-Clusters ausgeführt werden.

Befolgen Sie zum Schutz der Infrastruktur die allgemeinen Sicherheitsempfehlungen, Anleitungen und Best Practices zum Schutz von Cloud- und On-Premises-Implementierungen.

Implementieren Sie für sichere Anwendungen robuste Sicherheitskontrollen am Netzwerkrand und innerhalb eines Kubernetes-Clusters, um für die gesamte Kommunikation zum, vom und innerhalb des Clusters Authentifizierung, Autorisierung, Zugriffskontrolle, Verschlüsselung, Überwachung und Transparenz sowie optional eine Web Application Firewall und Schutz vor Denial-of-Service-Angriffen bereitzustellen.

Kubernetes-Sicherheit

Erfahren Sie mehr über die Absicherung von Kubernetes in unserem Blogbeitrag „Sechs Möglichkeiten, Kubernetes mit Traffic-Management-Tools abzusichern“.

Kubernetes im Produktivbetrieb

In der Anfangszeit der Kubernetes-Einführung dominierte ein Do-it-yourself-Ansatz (DIY). Für viele Unternehmen ist es jedoch komplex und schwierig, eine solche Lösung aufzubauen und zu betreiben. Daher setzen Unternehmen bei Produktivbereitstellungen zunehmend auf Cloud-verwaltete Kubernetes-Plattformen und vorkonfigurierte Kubernetes-Distributionen, die verschiedene Technologiekomponenten integrieren, den Wartungslebenszyklus vereinfachen und sich in Hybrid- und Multi-Cloud-Umgebungen bereitstellen lassen.

Nachfolgend sind einige Beispiele für verwaltete und vorkonfigurierte Kubernetes-Plattformen aufgeführt:

Cloudverwaltetes Kubernetes:

Vorkonfigurierte Kubernetes-Distributionen:

Wie NGINX helfen kann

Der Kubernetes-native Konnektivitäts- und Sicherheits-Stack von NGINX trägt dazu bei, das Kundenerlebnis durch geringere Komplexität, höhere Verfügbarkeit und detaillierte Echtzeittransparenz in großem Maßstab für Kubernetes-Anwendungen zu verbessern, die lokal, in der Cloud und am Edge ausgeführt werden.

Konnektivitäts-Stack für Kubernetes – Optimieren, skalieren und schützen Sie Kubernetes-Anwendungen in hybriden Multi-Cloud-Umgebungen.

  • NGINX Ingress Controller – Ein einheitliches API-Gateway, ein Load Balancer und ein Ingress-Controller, der bessere geschäftliche SLAs sowie umfassende Einblicke in den Zustand und die Performance von Anwendungen in großem Maßstab über verteilte Kubernetes-Umgebungen hinweg ermöglicht.
  • NGINX Gateway Fabric – Eine einheitliche Plattform für die Anwendungsbereitstellung, die die Konnektivität von Anwendungen, Diensten und APIs in hybriden Kubernetes-Umgebungen und Kubernetes-Multicloud-Umgebungen optimiert.
  • NGINX App Protect – Eine umfassende WAF-Sicherheits- und Abwehrlösung gegen Denial-of-Service-Angriffe (DoS), die Anwendungen und APIs vor Angriffen auf Layer 7 schützt.

Fordern Sie zunächst Ihre kostenlose 30-Tage-Testversion des NGINX Ingress Controller mit NGINX App Protect WAF und DoS an.