Kubernetes Networking: Ein vollständiger Leitfaden zum Verständnis des Netzwerkmodells
Veröffentlicht: 2020-02-18Die Behälterverwaltung ist ein wesentlicher Aspekt der Vernetzung. Mit den sich ändernden Verkehrsanforderungen von heute hat sich die Bedeutung von Kubernetes verzehnfacht. Und wenn Sie etwas über Netzwerke lernen möchten, müssen Sie sich zuerst mit Kubernetes vertraut machen. Das Erlernen von Kubernetes hilft Ihnen dabei, das Container-Management effektiv zu handhaben. Kubernetes ist auch für 2020 eines der Top-DevOps-Tools auf dem Markt.
Aber machen Sie sich keine Sorgen, denn in dieser ausführlichen Anleitung werden wir dasselbe besprechen. Kubernetes ist ein Container-Management-Tool, und in diesem Artikel erfahren Sie, warum es verwendet wird, welche Komponenten das Netzwerk enthält und wie sie den Datenverkehr weiterleiten.
Lernen Sie Software Engineering online von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.
Tauchen wir ein.
Inhaltsverzeichnis
Was ist Kubernetes?
Bevor wir mit der Erörterung von Netzwerken in Kubernetes beginnen, müssen wir uns mit den grundlegenden Konzepten dieses Tools befassen. Auf diese Weise werden Sie später im Artikel nicht verwirrt und haben ein grundlegendes Verständnis für alles, was hier erwähnt wird.
Kubernetes ist ein Open-Source-Container-Orchestrierungstool. Es hilft Ihnen bei der Verwaltung von Containern, die heutzutage zum kritischsten Aspekt der Vernetzung geworden sind. Kubernetes hat viele Funktionen, darunter das Skalieren von Containern, das Deployment von Containern, das Entskalieren von Containern usw.

Während Docker Profis bei der Erstellung von Containern hilft, hilft ihnen Kubernetes bei der Verwaltung derselben. Deshalb sind beide so wichtig. Kubernetes führt ein verteiltes System über einen Cluster aus. Wenn Sie seine Struktur und seine Vernetzung verstehen, können Sie Fehler vermeiden und Container fehlerfrei verwalten.
Warum wird Kubernetes verwendet?
Der Containerbedarf von Unternehmen ist in den letzten Jahren stark gestiegen. Wenn sie nicht zu klein sind, können sie sich nicht auf ein oder zwei Behälter verlassen. Sie müssten über eine große Anzahl von Containern für den Lastenausgleich verfügen. Die Anforderung könnte in die Hunderte gehen, um eine hohe Verfügbarkeit aufrechtzuerhalten und den Datenverkehr auszugleichen.
Wenn der Datenverkehr zunehmen würde, würden sie mehr Container für die Bearbeitung von Anfragen benötigen. Wenn der Datenverkehr geringer wäre, müssten die Container entsprechend herunterskaliert werden. Die Verwaltung der Container entsprechend der Nachfrage kann eine Herausforderung sein, insbesondere wenn Sie dies manuell tun.
Die manuelle Orchestrierung der Container kann viel Zeit und Ressourcen in Anspruch nehmen, die leicht anderweitig aufgewendet worden wären. Die Automatisierung dieser Aufgabe macht die Dinge viel einfacher. Dann müssten Sie sich keine Gedanken über das Ver- und Entkalken der Behälter machen. Das macht Kubernetes. Lesen Sie in unserem Top-Artikel zu DevOps-Projekten für Einsteiger, wie Sie mithilfe von Kubernetes DevOps-Projekte für Anfänger erstellen.
Es automatisiert die Orchestrierung und Verwaltung von Containern. Es ist wegen seiner Funktionalität weit verbreitet. Es ist ein Google-Produkt und seine Leistung hilft Organisationen erheblich bei der Automatisierung der Skalierung von Containern.
Komponenten von Kubernetes
Jetzt, da Sie wissen, was Kubernetes ist und was seine Funktionen sind, können wir damit beginnen, seine verschiedenen Komponenten zu diskutieren. Sie können die Vernetzung in diesem Tool erst verstehen, nachdem Sie sich mit den verschiedenen Teilen vertraut gemacht haben. Es gibt jedoch nicht viel zu befürchten. Das liegt daran, dass wir hier sind, um zu helfen. Es folgt eine kurze Beschreibung der verschiedenen Komponenten. Obwohl die Beschreibung knapp ist, sollte sie ausreichen, um Ihnen eine allgemeine Vorstellung zu geben.
Hülsen
Erinnern Sie sich an Atome in der Chemie, die kleinsten unabhängigen Objekte der Materie? Nun, Pods sind die Atome von Kubernetes. Ein Pod ist eine Arbeitslast in einem Cluster. Es kann einen oder mehrere Behälter mit Stauraum enthalten. Jeder Pod hat eine eindeutige IP-Adresse, die als seine Identität fungiert, wenn er mit anderen Komponenten von Kubernetes interagiert. Alle Behälter eines Pods sind innerhalb derselben Maschine geplant und angeordnet.
Controller
Controller bauen Kubernetes auf. Controller überwachen den Status des API-Servers, um sicherzustellen, dass sein aktueller Status mit dem von Ihnen angegebenen Status übereinstimmt. Wenn sich der Zustand des API-Servers aus irgendeinem Grund ändert, reagiert er entsprechend. Controller verwenden eine Schleife, um die Zustände von Clustern zu überprüfen und sie mit den erforderlichen Zuständen zu vergleichen. Es kann auch Aufgaben ausführen, um den aktuellen Zustand in den erforderlichen Zustand zu ändern.
Knoten
Wenn Pods die Atome sind, sind Nodes die Zahnräder von Kubernetes. Sie betreiben den Cluster. Virtuelle Maschinen sind zugängliche Knoten in Kubernetes-Clustern. Viele Leute neigen dazu, das Wort „Host“ anstelle von „Knoten“ zu verwenden. Wir haben versucht, den Begriff Knoten in diesem Artikel konsistent zu verwenden.
API-Server
Der API-Server ist das Gateway zum Datenspeicher in Kubernetes. Damit können Sie Ihren gewünschten Status für Cluster angeben. Sie müssen API-Aufrufe durchführen, wenn Sie den Status Ihres Kubernetes-Clusters ändern und Ihren erforderlichen Status beschreiben möchten.
Da Sie mit den Komponenten des Kubernetes-Netzwerks vertraut sind, können wir mit dem Netzwerkmodell und seiner Funktionsweise beginnen.
Kubernetes-Netzwerke erklärt
Das Kubernetes-Netzwerk folgt einem bestimmten Modell mit den folgenden Einschränkungen:
- Pods kommunizieren mit allen anderen Pods ohne Netzwerkadressübersetzung
- Nods können ohne Netzwerkadressübersetzung mit Pods kommunizieren
- Die IP eines Pods, die andere Pods für ihn sehen, ist die gleiche IP, die er für sich selbst sieht
Aufgrund dieser Einschränkungen hat Kubernetes nur wenige Netzwerkabschnitte. Sie sind:
- Container-zu-Container-Transfers
- Pod-zu-Pod-Transfers
- Pod-zu-Service-Transfers
- Internet-zu-Service-Übertragungen
Behälter zu Behälter
Sie denken vielleicht, dass eine virtuelle Maschine im Netzwerk direkt mit einem Ethernet-Gerät interagiert, aber es steckt noch mehr dahinter.
Wenn Sie Linux verwenden, gibt Ihnen der Netzwerk-Namespace einen Netzwerkstapel mit seinen Netzwerkgeräten, Routen und Regeln für die Firewall. Jeder laufende Prozess in Linux würde mit diesem Netzwerk-Namespace kommunizieren.
Ein Pod besitzt eine Gruppe von Containern innerhalb eines Netzwerk-Namespace. Diese Container haben denselben Portspace und dieselbe IP-Adresse, die ihnen über den Netzwerk-Namespace zugewiesen wird. Diese Container finden einander über den localhost, da sie sich im selben Namensraum befinden. Wenn sich Ihre Anwendungen in einem Pod befinden, können sie auch auf die freigegebenen Volumes zugreifen.

Pod zu Pod
Pods kommunizieren über ihre IP-Adressen miteinander. Jeder Pod hat eine echte und eindeutige IP-Adresse in Kubernetes. Sie wissen bereits, was Pods sind, also brauchen wir dieses Thema nicht zu berühren. Wir wissen, dass Kubernetes IPs verwendet, um die Kommunikation zwischen Pods zu erleichtern; Lassen Sie uns diskutieren, wie es das tut.
Pods kommunizieren über ihre Knoten. Um die Pod-zu-Pod-Kommunikation zu verstehen, müssen Sie daher die Interaktion zwischen Knoten verstehen.
- Kommunikation zwischen Knoten
- Knoteninterne Kommunikation
Wir werden jeden von ihnen im Detail besprechen:
Kommunikation zwischen Knoten
Wenn sich die Knoten in verschiedenen Pods befinden, kommunizieren sie über diese Methode. Wir können diese Kommunikationsmethode anhand eines einfachen Beispiels verstehen. Angenommen, es gibt vier verschiedene Pod-Netzwerke, nämlich Pod 1, Pod 2, Pod 3 und so weiter. Die Pods 1 und 2 befinden sich im Root-Netzwerk von Node 1 und die Pods 3 und 4 befinden sich im 2. Netzwerk.
Sie müssen ein Paket von Pod 1 zu Pod 4 übertragen.
Das Paket muss zuerst das Pod-1-Netzwerk verlassen und über veth0 in das Root-Netzwerk gelangen. Es geht durch die Linux-Bridge, was ihm hilft, sein Ziel zu finden. Da der Knoten kein Ziel in seinem Pod hat, wird er an die Schnittstelle eth0 zurückgesendet. Jetzt verlässt es den ersten Knoten für die Routing-Tabelle. Die Routing-Tabelle leitet das Paket an den erforderlichen Knoten weiter, der sich in Pod4 befindet. Das Paket erreicht zuerst Knoten 2, dann erreicht es die Bridge, die es an sein Ziel leitet.
Knoteninterne Kommunikation
Die knoteninterne Kommunikation findet statt, wenn sich die Knoten im selben Pod befinden. Wir können die Intra-Node-Kommunikation genauso erklären, wie wir die Inter-Node-Kommunikation erklärt haben. In diesen Fällen reist das Paket vom ersten Pod bei eth0. Es geht über veth0 in das Root-Netzwerk. Dann muss es auf die Bridge übergeben werden, wonach es an die angegebene IP geht.
So kommunizieren Pods in Kubernetes miteinander. Kommen wir zum nächsten Abschnitt.
Pod zum Dienst
Sie haben bereits im vorherigen Abschnitt gesehen, wie der Datenverkehr zwischen den IP-Adressen von Pods geleitet wird. Es gibt jedoch ein Problem mit IP-Adressen. Pod-IPs können je nach Skalierung der Container verschwinden und wieder erscheinen. Wenn also die Container skaliert werden, erhöht sich die Anzahl der Pod-IPs, umgekehrt gilt das auch.
Die Dienste helfen bei der Bewältigung dieser Situation. Hier ist eine kurze Erklärung, welche Dienste in Kubernetes enthalten sind, damit Sie keine Verwirrung stiften.
Was sind Dienste in Kubernetes?
Dienste in Kubernetes konfigurieren Proxys, die Anforderungen an eine Gruppe von Pods übertragen müssen. Diese Pods erhalten Datenverkehr, und der Selektor übernimmt diese Aufgabe. Nach der Erstellung eines Dienstes erhält dieser eine IP-Adresse, die seine Anfragen verarbeitet. Es gibt mehrere Arten von Diensten, und wir müssen sie besprechen, bevor wir uns der Pod-to-Service-Kommunikation zuwenden.
Es gibt insgesamt 4 Arten von Diensten in Kubernetes. Sie sind:
- ClusterIP
- KnotenPort
- Lastenausgleicher
- ExternerName
ClusterIP ist der Standarddiensttyp. Bei diesem Typ ist der Dienst nur im Cluster zugänglich. In NodePort wird der Dienst der IP jedes Knotens ausgesetzt. Der NodePort leitet zu einem ClusterIP-Dienst, da das System ihn zuvor erstellt hat. Im Gegensatz zu ClusterIP können Sie diesen Dienst außerhalb eines Clusters kontaktieren.
LoadBalancer verwendet den Load Balancer einer Cloud, um den Dienst für externe Netzwerke verfügbar zu machen. NodePort und ClusterIP werden dadurch automatisch erstellt, und der ExternalName-Dienst überträgt sie, da sie einen CNAME-Eintrag widerspiegeln.
Nachdem Sie nun wissen, was Dienste sind und wie viele Arten von Diensten es gibt, lassen Sie uns besprechen, wie die Kommunikation zwischen Pod und Dienst stattfindet.
Wie es funktioniert?
In diesem Szenario verlässt das Paket den Pod über eth0. Es geht über das Ethernet-Gerät zur Bridge, von wo es auf die Standardroute von eth0 übertragen wird. Es muss jedoch iptables durchlaufen, bevor es bei eth0 akzeptiert wird. Die iptables bestimmen das Ziel des Pakets anhand der angegebenen Regeln und senden das Paket an den erforderlichen Pod. Sobald dies geschehen ist, geht das Paket an die echte IP eines Pods anstatt an die virtuelle IP des Dienstes.
Außerhalb des Dienstes
Die vorherigen drei Methoden des Traffic-Routings betrafen nur Kubernetes. Aber in realen Fällen besteht die Möglichkeit, dass Sie Ihr Kubernetes-Netzwerk mit einem Drittanbieter-Netzwerk verbinden müssen, um den Datenverkehr weiterzuleiten. Und dieser Abschnitt ist ungefähr gleich.
Wenn Kubernetes mit einem externen Netzwerk verbunden ist, kann es zwei Funktionen ausführen:
- Leiten Sie den Datenverkehr aus dem Internet zu seinem Netzwerk
- Leiten Sie den Datenverkehr von seinem Netzwerk ins Internet
Ersteres erfordert ein Ingress-Netzwerk, letzteres ein Egress-Netzwerk. Werfen wir einen Blick auf sie.
Eindringen
Das Routing Ihres Datenverkehrs von einem öffentlichen Netzwerk zu Ihrem Kubernetes-System ist sehr schwierig. Es erfordert, dass der LoadBalancer und der Controller die Pakete verarbeiten. Hier ist ein Beispiel, wie es funktioniert.
Zunächst stellen Sie einen Dienst bereit und Ihr Cloud-Anbieter erstellt einen neuen Load Balancer. Der Load Balancer verteilt den Datenverkehr über die virtuellen Maschinen in Ihrem Cluster, indem er den festgelegten Port Ihres Dienstes verwendet. Hier übertragen iptables den Datenverkehr, den sie vom Load Balancer erhalten, an den erforderlichen Pod. Der Pod antwortet dem Client mit seiner IP, und conntrack hilft dabei, die IPs richtig umzuschreiben.
Im Netzwerk vorhandene Layer-7-Load-Balancer sind in der Lage, den eingehenden Datenverkehr nach URLs und Pfaden zu segmentieren. Dies ist sehr hilfreich, wenn Sie mit einem Ingress-Netzwerk arbeiten.
Ausgang
Wenn Sie Datenverkehr von einem Knoten Ihres Kubernetes-Netzwerks zum Internet leiten, hängt es stark von Ihren Netzwerkkonfigurationen ab, wie alles funktioniert. Wir werden hier ein allgemeines Beispiel diskutieren, um das Thema anzusprechen.
Das Paket beginnt beim Namespace des Pods und geht über die veth zum Root-Namespace. Dann geht es zur Bridge, von wo aus es zum Standarddienst reist, da die IP, zu der es gehen muss, nicht mit der Bridge verbunden ist. Es durchläuft iptables, während es zum Root-Namespace geht.

Lesen Sie: Voraussetzung für DevOps: Es ist nicht das, was Sie denken
Jetzt akzeptieren Internet-Gateways nur IP-Adressen, die in Verbindung mit virtuellen Maschinen stehen. Und der Quell-Pod unserer Tasche ist nicht mit einer VM verbunden. Die iptables führen also ein Source-NAT durch und ändern die Quelle des Pakets. Jetzt erreicht es das Internet-Gateway, wo es ein weiteres NAT durchläuft und dann in das öffentliche Internet (sein Ziel) eintritt.
Und das ist es. Jetzt wissen Sie alles über das Kubernetes-Netzwerk und seine verschiedenen Komponenten.
Fazit
Kubernetes ist zweifellos eines der wichtigsten Werkzeuge, die Sie lernen sollten, wenn Sie sich für Netzwerke interessieren. Diejenigen, die mit diesem Gebiet nicht vertraut sind, wissen nicht, wie wichtig es ist. Die Verwaltung von Containern und das Routing des Datenverkehrs gemäß diesen Datenverkehrsanforderungen kann Ihnen erheblich helfen. Wir haben versucht, diesen Leitfaden so klar wie möglich zu halten, damit Sie alles verstehen.
Wenn Sie Kubernetes, DevOps und mehr lernen und beherrschen möchten, sehen Sie sich das Executive PG Program in Software Development – Specialization in Full Stack Development von IIIT-B & upGrad an.