Veröffentlicht: 21. November 2023
Mitwirkende: Stephanie Susnjara, Ian Smalley
Kubernetes-Networking bietet die Netzwerkinfrastruktur für Kommunikation, Skalierbarkeit, Sicherheit und externen Zugriff für containerisierte Anwendungen. Das Netzwerk ist komplex und umfasst die Kommunikation zwischen allen wichtigen Komponenten, die sich innerhalb (z. B. Pods, Knoten, Container, Services) und außerhalb (z. B. externer Traffic) eines Kubernetes-Clusters befinden.
Diese Komponenten verwenden vier unterschiedliche Netzwerkmethoden zur Kommunikation:
1. Container-to-Container-Networking
2. Pod-to-Pod-Networking
3. Pod-to-Service-Networking
4. External-to-service-Networking
Für Plattform- und DevOps-Teams, die die Markteinführung beschleunigen und gleichzeitig die Anwendungsleistung sicherstellen möchten.
IBM Newsletter abonnieren
Der Name Kubernetes stammt aus Griechenland und bedeutet Steuermann oder Pilot. Kubernetes basiert auf Borg, der internen Container-Orchestrierungsplattform von Google, und wurde 2014 als Open-Source-Tool der Öffentlichkeit vorgestellt. Im selben Jahr spendete Google Kubernetes an die Cloud Native Computing Foundation (Link befindet sich außerhalb von ibm.com), dem anbieterneutralen Open Source-Hub des cloudnativen Computing. Seitdem hat sich Kubernetes zum weltweit am weitesten verbreiteten Container-Orchestrierungstool für die Ausführung von containerbasierten Workloads entwickelt.
Kubernetes ist auch als „k8s“ oder „kube“ bekannt und wurde speziell dafür entwickelt, das Management von Containern zu automatisieren. Container sind die Standardeinheit der Software, die Code und alle seine Abhängigkeiten paketiert. Das Orchestrierungstool wird sehr geschätzt, da es schnell und zuverlässig in jeder Infrastrukturumgebung ausgeführt werden kann, egal ob On-Premises, Private Cloud, Public Cloud oder Hybrid Cloud.
Im Gegensatz zu virtuellen Maschinen (VMs), die physische Hardware virtualisieren, virtualisieren Container das Betriebssystem (wie etwa Linux oder Windows). Jeder Container enthält nur die Bibliotheken und Abhängigkeiten der Anwendung. Da Container sich den Betriebssystemkernel mit dem Host teilen, gelten sie als schlank, schnell und tragbar.
Kubernetes und sein Ökosystem aus Diensten, Support und Tools sind zur Grundlage für eine moderne Cloud-Infrastruktur und Anwendungsmodernisierung geworden. Alle großen Cloud-Anbieter, darunter Amazon Web Services (AWS), Google, Microsoft, IBM und Red Hat, integrieren Kubernetes in ihre Cloud-Plattformen, um Platform-as-a-Service (PaaS) - und Infrastructure-as-a-Service (IaaS) -Funktionen zu verbessern.
Aus den folgenden grundlegenden Komponenten besteht eine Kubernetes-Architektur:
Ein Kubernetes-Cluster ist eine Reihe physischer oder virtueller Maschinen (Nodes), die zusammen an der Ausführung containerisierter Anwendungen arbeiten. Cluster bilden die Grundlage der Kubernetes-Architektur.
Master Nodes stellen einen einzelnen Rechenhost dar – entweder eine virtuelle oder eine physische Maschine. Sie hosten die Kontrollebenen-Komponenten von Kubernetes und sind für die Planung und Skalierung von Anwendungen verantwortlich. Durch die Verwaltung aller Rechen-, Netzwerk- und Speicherressourcen in einem Kubernetes-Cluster stellt der Master Node sicher, dass containerisierte Anwendungen und Services gleichermaßen auf Worker Nodes im Cluster bereitgestellt werden.
Worker Nodes sind für den Betrieb der Container und die Ausführung aller vom Master Node zugewiesenen Arbeiten verantwortlich. Sie hosten auch Anwendungscontainer, die als Pods gruppiert sind.
Pods sind Gruppen mit einem oder mehreren Containern (z. B. Linux oder Docker) mit denselben Rechenressourcen und demselben Netzwerk. Es handelt sich um Cluster-Bereitstellungseinheiten, die auch als Skalierbarkeitseinheiten fungieren. Wenn zum Beispiel ein Container in einem Pod ein hohes Datenverkehrsaufkommen aufweist, kann Kubernetes diesen Pod auf andere Nodes im Cluster replizieren. Kubernetes kann Pods auch abschalten, wenn der Datenverkehr abnimmt.
Weitere zusätzliche Kubernetes-Komponenten sind:
Beim grundlegenden Computer-Networking werden zwei oder mehr Rechengeräte miteinander verbunden, um Daten gemeinsam zu nutzen und Ressourcen auszutauschen, entweder über Kabel oder über WLAN.
In physischen Netzwerken werden physische Server mit physischen Netzwerkgeräten wie Switches, Routern und Ethernet-Kabeln verbunden, um eine Verbindung zum Internet herzustellen.
In virtuellen Netzwerken werden softwaredefinierte Netzwerke (SDN), Komponenten wie virtuelle Ethernet-Geräte und virtuelle Schnittstellen auf Bare Metal Servern oder virtuellen Maschinen installiert, um eine Verbindung mit dem Internet herzustellen. Die Kubernetes-Bereitstellung nutzt SDN, um die Netzwerkkommunikation zwischen Clustern zu konfigurieren und zu verwalten.
Bevor wir uns eingehender mit dem Thema Kubernetes-Networking befassen, sollten wir die grundlegenden Begriffe kennenlernen:
Kubernetes wurde entwickelt, verteilte Systeme mit einer über ein Cluster von Maschinen verteilten Netzwerkebene auszuführen. Die Kubernetes-Cluster-Vernetzung bietet nicht nur Konnektivität zwischen den Komponenten, sondern schafft auch eine nahtlose Umgebung, in der sich Daten durch Software-defined Networking (SDN) frei und effizient bewegen können.
Ein weiteres besonderes Merkmal des Kubernetes-Networking ist seine flache Netzwerkstruktur, was bedeutet, dass alle Komponenten verbunden werden können, ohne auf andere Hardware angewiesen zu sein. In Kubernetes kann jeder Pod in einem Cluster mit jedem anderen Pod kommunizieren, unabhängig davon, auf welchem Node er ausgeführt wird. Das flache Netzwerk bietet eine effiziente Möglichkeit zur gemeinsamen Nutzung von Ressourcen und macht eine dynamische Portzuweisung überflüssig.
Insgesamt abstrahiert das Kubernetes-Netzwerk die Komplexität und ermöglicht es Entwicklungs- und Operations-Teams, sich auf die Erstellung und Wartung von Anwendungen zu konzentrieren, anstatt sich mit komplizierten Netzwerkkonfigurationen zu beschäftigen.
Kubernetes bietet ein Networking-Modell, mit dem die Herausforderungen der Orchestrierung von Containeranwendungen in einer verteilten Umgebung bewältigt werden können. Die Container-Laufzeit auf jedem Node implementiert das Networking-Modell und hält sich an die folgenden Regeln:
Das Kubernetes-Networking-Modell gilt für vier grundlegende Arten der Kubernetes-Kommunikation:
Container sind die kleinste Einheit in einem Kubernetes-Netzwerk. In grundlegenden Netzwerkkonfigurationen kommunizieren Container innerhalb eines einzelnen Pods über localhost. Diese Kommunikation ist möglich, weil Container im selben Pod denselben Network Namespace teilen, der Netzwerkressourcen wie Speicher, IP-Adresse und Port Space umfasst.
Die Pod-to-Pod-Kommunikation umfasst die Kommunikation zwischen Pods auf demselben Node sowie die Kommunikation zwischen Pods auf verschiedenen Nodes. Jeder Pod in einem Kubernetes-Cluster hat seine eigene eindeutige IP-Adresse, die eine direkte Kommunikation zwischen Pods ermöglicht, unabhängig davon, auf welchem Node sie sich befinden. Darüber hinaus stellt jeder Kubernetes-Cluster zusätzlich zur Pod-IP-Adresse automatisch einen DNS-Dienst (Domain Name System Service) bereit. Der DNS-Dienst, bei dem Pods (und Diensten) Namen zugewiesen werden, erstellt für Administratoren leicht lesbare Namen und bietet so einen einfachen Mechanismus zur Diensterkennung.
Ein Dienst in Kubernetes ist eine Abstraktion, die einen logischen Satz von Pods definiert und die Offenlegung des externen Datenverkehrs, den Lastausgleich und die Diensterkennung für diese Pods ermöglicht. Dienste erleichtern sowohl die Pod-to-Service- als auch die External-to-Service-Kommunikation.
Laut dem Kubernetes-Networking-Modell sind Pod-IP-Adressen kurzlebig. Wenn ein Pod abstürzt oder gelöscht wird und an seiner Stelle ein neuer Pod erstellt wird, erhält der neue Pod daher höchstwahrscheinlich eine neue IP-Adresse.
Bei der Pod-to-Service-Kommunikation ist ein ClusterIP ein Diensttyp, der einer Reihe von Pods eine stabile virtuelle IP-Adresse bereitstellt. Diese interne IP ist nur innerhalb des Clusters erreichbar und kann für die interne Kommunikation zwischen Pods und Services verwendet werden.
Der kube-Proxy, der auf jedem Node in einem Cluster installiert ist, unterhält Netzwerkregeln auf dem Host und überwacht Änderungen an Services und Pods. Wenn Pods erstellt oder zerstört werden, aktualisiert der kube-Proxy iptables (ein Hilfsprogramm zum Erstellen von Regeln in der Linux-Kernel-Firewall für die Weiterleitung des Datenverkehrs), um diese Änderung widerzuspiegeln, sodass der an die Dienst-IP gesendete Datenverkehr korrekt weitergeleitet wird.
External-to-Service-Networking bezieht sich auf die Bereitstellung von und den Zugriff auf Dienste, wie externe Dienste oder Datenbanken, von außerhalb des Kubernetes-Clusters.
Kubernetes bietet mehrere Dienste, um externen Datenverkehr in einen Cluster zu ermöglichen:
Kubernetes-Netzwerkrichtlinien sind ein Anwendungskonstrukt, das eine wichtige Rolle im Kubernetes-Networking spielt. Mit diesen Richtlinien können Administrations- und Entwicklungsteams Regeln definieren, die festlegen, wie Pods miteinander und mit anderen Netzwerkendpunkten kommunizieren können. Netzwerkrichtlinien werden über die Netzwerkrichtlinien-API von Kubernetes angewendet und bestehen aus den folgenden grundlegenden Komponenten:
Kubernetes-Netzwerkrichtlinien helfen bei der Definition und Verwaltung von Sicherheitsrichtlinien, indem sie Regeln festlegen, die kontrollieren, welche Pods miteinander kommunizieren können, und so unberechtigten Zugriff und bösartige Angriffe verhindern. Netzwerkrichtlinien sorgen auch für die Isolation zwischen Pods und Diensten, sodass nur diese Pods oder Dienste mit einer zugelassenen Gruppe von Peers kommunizieren können. Die Isolation ist beispielsweise für Situationen mit mehreren Mandanten von entscheidender Bedeutung, wenn DevOps- oder andere Teams denselben Kubernetes-Cluster gemeinsam nutzen, aber an verschiedenen Projekten arbeiten.
Für Unternehmen mit spezifischen Compliance-Anforderungen helfen Netzwerkrichtlinien bei der Festlegung und Durchsetzung von Netzwerkzugangskontrollen. Dies trägt zur Einhaltung gesetzlicher Standards bei und stellt sicher, dass der Cluster die Richtlinien der Organisation einhält.
Container Network Interface (CNI, deutsch: Container-Netzwerk-Schnittstelle) ist eine weitere wichtige Funktion im Zusammenhang mit Kubernetes-Networking. CNI wird von der Cloud Native Computing Foundation entwickelt und verwaltet und wird von Kubernetes und anderen Container-Runtimes, einschließlich Red Hat OpenShift® und Apache Mesos, verwendet. Es ist eine standardisierte Spezifikation und eine Reihe von APIs, die definieren, wie Netzwerk-Plugins das Container-Networking ermöglichen sollen. CNI-Plugins können IP-Adressen zuweisen, Network Namespaces erstellen, Netzwerkrouten einrichten usw., um die Pod-to-Pod-Kommunikation sowohl innerhalb desselben Nodes als auch nodeübergreifend zu ermöglichen.
Während Kubernetes eine Standard-CNI bereitstellt, gibt es zahlreiche CNI-Plugins von Drittanbietern, darunter Calico, Flannel und Weave, die für die Konfiguration und Sicherheit in containerbasierten Netzwerkumgebungen konzipiert sind. Auch wenn sie unterschiedliche Funktionen und Netzwerkansätze haben, wie Overlay-Netzwerke oder direktes Routing, halten sie sich alle an die CNI-Spezifikationen, die mit Kubernetes kompatibel sind.
Wenn Sie mit der Arbeit mit Kubernetes beginnen oder Ihre vorhandenen Kenntnisse über Kubernetes und die Tools des Kubernetes-Ökosystems erweitern möchten, sollten Sie eines dieser Tutorials ausprobieren.
Interaktive, browserbasierte Schulung zur Bereitstellung und zum Betrieb eines Clusters auf dem IBM Cloud® Kubernetes Service. Downloads oder Konfigurationen nicht erforderlich.
Stellen Sie sichere und hochverfügbare Cluster in einer nativen Kubernetes-Erfahrung bereit.
Mit Red Hat OpenShift on IBM Cloud haben OpenShift-Entwickler eine schnelle und sichere Möglichkeit zur Containerisierung und Bereitstellung von Unternehmensworkloads in Kubernetes-Clustern.
IBM Cloud Code Engine ist eine vollständig verwaltete serverlose Plattform, mit der Sie Ihren Container-, Anwendungscode- oder Batch-Job auf einer vollständig verwalteten Container-Laufzeit ausführen können.
Erweitern Sie Ihre Kubernetes-Kenntnisse durch Kurse, die im Rahmen der IBM Cloud Professional Developer-Zertifizierung enthalten sind.
Studierende präsentieren ihre Kunst mit Red Hat® OpenShift® on IBM Cloud®.
Container sind Teil einer Hybrid-Cloud-Strategie, mit der Sie Workloads von überall aus erstellen und verwalten können.
Kubernetes ist eine Container-Orchestrierungsplattform für die Planung und Automatisierung der Bereitstellung, Verwaltung und Skalierung containerisierter Anwendungen.
Container sind ausführbare Softwareeinheiten, in denen Anwendungscode zusammen mit seinen Bibliotheken und Abhängigkeiten auf übliche Weise verpackt ist, sodass der Code überall ausgeführt werden kann.
Containerorchestrierung automatisiert und vereinfacht die Provisionierung, Bereitstellung und Verwaltung von containerisierten Anwendungen.