Kubernetes Networking - Ein umfassender Leitfaden zu den Netzwerkkonzepten in Kubernetes



Dieser Blog über Kubernetes Networking befasst sich eingehend mit den Konzepten von Kubernetes wie der Kommunikation mit Pods, Diensten und Ingress-Netzwerken.

Im vorherigen Blog auf , Sie müssen ein Verständnis für Kubernetes haben. In diesem Blog über Kubernetes-Netzwerke werde ich mich hauptsächlich auf die Netzwerkkonzepte konzentrieren, die mit Kubernetes verbunden sind.

In diesem Blog über Kubernetes Networking werden Sie die folgenden Themen verstehen:





Was ist Kubernetes?

Sie können Kubernetes als Open-Source-Tool für die Container-Orchestrierung definieren, das eine tragbare Plattform zur Automatisierung der Bereitstellung containerisierter Anwendungen bietet.

Jetzt muss jeder, der mit Kubernetes arbeitet, ein klares Verständnis von Kubernetes Cluster haben, da dies Ihnen hilft, Kubernetes Networking zu verstehen.



Kubernetes Cluster

Die Kubernetes-Plattform bietet die gewünschte Statusverwaltung, mit der die Clusterdienste ausgeführt werden können, die gespeiste Konfiguration in der Infrastruktur. Lassen Sie mich anhand eines Beispiels erklären.

Stellen Sie sich eine YAML-Datei vor, die alle Konfigurationsinformationen enthält, die in die Clusterdienste eingespeist werden müssen. Diese Datei wird also der API der Clusterdienste zugeführt, und dann müssen die Clusterdienste herausfinden, wie Pods in der Umgebung geplant werden. Angenommen, es gibt zwei Container-Images für Pod 1 mit drei Replikaten und ein Container-Image für Pod 2 mit zwei Replikaten. Es liegt an den Clusterdiensten, diese Pod-Replikat-Paare den Workern zuzuweisen.

ist ein Masterstudium

Kubernetes Cluster - Kubernetes Networking - Edureka



Siehe obiges Diagramm. Wie Sie jetzt sehen können, haben die Clusterdienste dem ersten Worker zwei Pod-Replikatpaare, dem zweiten Worker ein einzelnes Pod-Replikat-Paar und dem dritten Worker zwei Pod-Replikatpaare zugewiesen. Jetzt ist es der Kubelet-Prozess, der für die Kommunikation der Clusterdienste mit den Mitarbeitern verantwortlich ist.

Diese ganze Einrichtung von Clusterdiensten und den Mitarbeitern selbst macht dies aus Kubernetes-Cluster !!

Wie kommunizieren diese individuell zugewiesenen Pods miteinander?

Die Antwort liegt in Kubernetes Networking!

Abonniere unseren Youtube-Kanal, um neue Updates zu erhalten ..!

Mit den Netzwerkkonzepten sind hauptsächlich 4 Probleme zu lösen.

  • Kommunikation von Container zu Container
  • Pod zu Pod Kommunikation
  • Pod zur Servicekommunikation
  • Externe Servicekommunikation

Lassen Sie mich Ihnen nun sagen, wie die oben genannten Probleme mit Kubernetes Networking gelöst werden.

Kubernetes Networking

Die Kommunikation zwischen Pods, Diensten und externen Diensten mit denen in einem Cluster bringt das Konzept der Kubernetes-Vernetzung mit sich.

Lassen Sie mich zum besseren Verständnis die Konzepte wie folgt unterteilen.

  • Pods & Container Kommunikation
  • Dienstleistungen
  • Externe Verbindung zu Diensten über Ingress Network

Pods & Container Kommunikation

Bevor ich Ihnen sage, wie Pods kommunizieren, möchte ich Ihnen vorstellen, was Pods sind.

Pods

Pods sind Grundeinheiten von Kubernetes-Anwendungen, die aus einem oder mehreren Containern bestehen, die auf demselben Host zugewiesen sind, um einen Netzwerkstapel und andere Ressourcen gemeinsam zu nutzen. Dies bedeutet also, dass alle Container in einem Pod andere auf einem lokalen Host erreichen können.

Lassen Sie mich Sie nun darüber informieren, wie diese Pods kommunizieren.

Es gibt zwei Arten der Kommunikation. Das Kommunikation zwischen Knoten und der Kommunikation innerhalb eines Knotens.

Beginnen wir also mit der Kommunikation innerhalb eines Knotens, aber vorher möchte ich Ihnen die Komponenten des Pod-Netzwerks vorstellen.

Knotenintern unter Netzwerk

Das knoteninterne Pod-Netzwerk ist im Grunde die Kommunikation zwischen zwei verschiedenen Knoten auf demselben Pod. Lassen Sie sich anhand eines Beispiels erklären.

Angenommen, ein Paket geht von pod1 nach pod2.

  • Das Paket verlässt das Netzwerk von Pod 1 um eth0 und gelangt um veth0 in das Root-Netzwerk
  • Anschließend wird das Paket an die Linux-Bridge (cbr0) weitergeleitet, die das Ziel mithilfe einer ARP-Anforderung ermittelt
  • Wenn also veth1 die IP hat, weiß die Bridge jetzt, wohin das Paket weitergeleitet werden soll.

Lassen Sie mich nun in ähnlicher Weise über die Pod-Kommunikation zwischen Knoten berichten.

Interessiert daran, Kubernetes zu lernen?
Interknoten unter dem Netzwerk

Stellen Sie sich zwei Knoten mit verschiedenen Netzwerk-Namespaces, Netzwerkschnittstellen und einer Linux-Bridge vor.

Angenommen, ein Paket wandert von Pod1 zu einem Pod4, der sich auf einem anderen Knoten befindet.

  • Das Paket verlässt das Pod 1-Netzwerk und tritt um veth0 in das Root-Netzwerk ein
  • Anschließend wird das Paket an die Linux-Bridge (cbr0) weitergeleitet, deren Aufgabe es ist, eine ARP-Anforderung zum Auffinden des Ziels zu stellen.
  • Nachdem die Bridge erkannt hat, dass dieser Pod nicht über die Zieladresse verfügt, kehrt das Paket zur Hauptnetzwerkschnittstelle eth0 zurück.
  • Das Paket verlässt nun den Knoten 1, um sein Ziel auf dem anderen Knoten zu finden, und gibt die Routentabelle ein, die das Paket an den Knoten weiterleitet, dessen CIDR-Block den Pod4 enthält.
  • Nun erreicht das Paket also Knoten2 und dann nimmt die Brücke das Paket, das eine ARP-Anfrage stellt, um herauszufinden, dass die IP zu veth0 gehört.
  • Schließlich kreuzt das Paket das Pipe-Paar und erreicht pod4.

So kommunizieren Pods miteinander. Lassen Sie uns nun fortfahren und sehen, wie Dienste bei der Kommunikation von Pods helfen.

Also, was denkst du, sind die Dienstleistungen?

Dienstleistungen

Grundsätzlich sind Dienste eine Art von Ressource, die einen Proxy konfiguriert, um die Anforderungen an eine Reihe von Pods weiterzuleiten, die Datenverkehr empfangen und vom Selektor festgelegt werden. Sobald der Dienst erstellt wurde, hat er eine zugewiesene IP-Adresse, die Anforderungen am Port akzeptiert.

Jetzt gibt es verschiedene Diensttypen, mit denen Sie einen Dienst außerhalb Ihrer Cluster-IP-Adresse verfügbar machen können.

Arten von Dienstleistungen

Es gibt hauptsächlich 4 Arten von Diensten.

ClusterIP: Dies ist der Standarddiensttyp, der den Dienst auf einer clusterinternen IP verfügbar macht, indem der Dienst nur innerhalb des Clusters erreichbar gemacht wird.

NodePort: Dadurch wird der Dienst auf der IP jedes Knotens an einem statischen Port verfügbar gemacht. Seit einem ClusterIP Der Dienst, an den der NodePort-Dienst weitergeleitet wird, wird automatisch erstellt. Wir können den NodePort-Dienst außerhalb des Clusters kontaktieren.

Lastenausgleicher: Dies ist der Diensttyp, der den Dienst mithilfe des Load Balancers eines Cloud-Anbieters extern verfügbar macht. Daher werden die NodePort- und ClusterIP-Dienste, an die der externe Load Balancer weitergeleitet wird, automatisch erstellt.

Externer Name : Dieser Diensttyp ordnet den Dienst dem Inhalt des zu externalName Feld durch Rückgabe von a CNAME Rekord mit seinem Wert.

Also, Leute, bei denen es nur um Dienstleistungen ging. Nun fragen Sie sich vielleicht, wie externe Dienste eine Verbindung zu diesen Netzwerken herstellen, oder?

Nun, das ist von niemand anderem als Ingress Network .

Ingress Network

Das Ingress-Netzwerk ist die leistungsstärkste Methode, um Dienste verfügbar zu machen, da es sich um eine Sammlung von Regeln handelt, die eingehende Verbindungen zulassen und so konfiguriert werden können, dass Dienste extern über erreichbare URLs bereitgestellt werden. Es fungiert also im Wesentlichen als Einstiegspunkt in den Kubernetes-Cluster, der den externen Zugriff auf die Dienste in einem Cluster verwaltet.

Lassen Sie mich Ihnen nun anhand eines Beispiels die Arbeitsweise von Ingress Network erläutern.

Wir haben 2 Knoten mit Pod- und Root-Netzwerk-Namespaces mit einer Linux-Bridge. Darüber hinaus haben wir ein neues virtuelles Ethernet-Gerät namens flannel0 (Netzwerk-Plugin) zum Root-Netzwerk hinzugefügt.

Jetzt möchten wir, dass das Paket von Pod1 zu Pod 4 fließt.

  • Das Paket verlässt also das Netzwerk von pod1 bei eth0 und gelangt bei veth0 in das Root-Netzwerk.
  • Dann wird es an cbr0 weitergeleitet, wodurch die ARP-Anforderung zum Finden des Ziels erfolgt und anschließend festgestellt wird, dass niemand auf diesem Knoten die Ziel-IP-Adresse hat.
  • Die Bridge sendet das Paket also an flannel0, da die Routentabelle des Knotens mit flannel0 konfiguriert ist.
  • Jetzt kommuniziert der Flanell-Daemon mit dem API-Server von Kubernetes, um alle Pod-IPs und ihre jeweiligen Knoten zu kennen und Zuordnungen für Pods-IPs zu Knoten-IPs zu erstellen.
  • Das Netzwerk-Plugin verpackt dieses Paket in ein UDP-Paket mit zusätzlichen Headern, die die Quell- und Ziel-IPs auf ihre jeweiligen Knoten ändern, und sendet dieses Paket über eth0.
  • Da die Routentabelle bereits weiß, wie der Verkehr zwischen Knoten weitergeleitet wird, sendet sie das Paket an den Zielknoten2.
  • Das Paket kommt bei eth0 von Knoten2 an und kehrt zur Entkapselung zu flannel0 zurück und sendet es zurück in den Namespace des Stammnetzwerks.
  • Das Paket wird erneut an die Linux-Bridge weitergeleitet, um eine ARP-Anfrage zu stellen und die IP zu ermitteln, die zu veth1 gehört.
  • Das Paket überquert schließlich das Root-Netzwerk und erreicht das Ziel Pod4.

Auf diese Weise werden externe Dienste mithilfe eines Ingress-Netzwerks verbunden. Nun, da ich über Netzwerk-Plugins gesprochen habe, möchte ich Ihnen die Liste der beliebtesten verfügbaren Netzwerk-Plugins vorstellen.

Nachdem ich Ihnen so viel über Kubernetes Networking erzählt habe, möchte ich Ihnen eine Fallstudie aus der Praxis zeigen.

Fallstudie: Wealth Wizard mit Kubernetes Networking

Wealth Wizards ist eine Online-Finanzplanungsplattform, die Finanzplanung und intelligente Softwaretechnologie kombiniert, um kompetente Beratung zu erschwinglichen Kosten zu bieten.

Herausforderungen

Jetzt war es für das Unternehmen äußerst wichtig, Code-Schwachstellen bei vollständiger Sichtbarkeit der Cloud-Umgebung schnell zu erkennen und zu beseitigen, wollte jedoch den Datenverkehr durch Zugriffsbeschränkungen kontrollieren.

Daher verwendeten sie die Kubernetes-Infrastruktur, um die Bereitstellung und den Rollout der Cluster mithilfe von Tools zur Verwaltung der Bereitstellung und Konfiguration von Microservices in den Kube-Clustern zu verwalten.

Sie verwendeten auch eine Netzwerkrichtlinienfunktion von Kubernetes, um den Datenverkehr über Zugriffsbeschränkungen zu steuern.

Das Problem war nun, dass diese Richtlinien anwendungsorientiert sind und sich nur mit den Anwendungen weiterentwickeln können. Es gab jedoch keine Komponente, um diese Richtlinien durchzusetzen.

Die einzige Lösung, die das Unternehmen dafür finden konnte, war die Verwendung eines Netzwerk-Plugins. Daher wurde Weave Net verwendet.

Lösung

Dieses Netzwerk-Plugin erstellt ein virtuelles Netzwerk mit einem Netzwerkrichtlinien-Controller zum Verwalten und Durchsetzen der Regeln in Kubernetes. Darüber hinaus werden Docker-Container über mehrere Hosts hinweg verbunden und ihre automatische Erkennung ermöglicht.

Angenommen, Sie haben eine Arbeitslast im Cluster und möchten verhindern, dass eine andere Arbeitslast im Cluster mit ihr spricht. Sie können dies erreichen, indem Sie eine Netzwerkrichtlinie erstellen, die den Zugriff einschränkt und den Zugriff nur über den Eingangscontroller an einem bestimmten Port zulässt.

Mit seiner Bereitstellung auf jedem Kubernetes-Knoten verwaltet das Plugin nun das Routing zwischen Pods und hat Zugriff auf die Manipulation der IPtables-Regeln. In einfachen Worten, jede Richtlinie wird in eine Sammlung von IPtables-Regeln konvertiert, die auf jedem Computer koordiniert und konfiguriert werden, um die Kubernetes-Tags zu übersetzen.

Okay, jetzt, da Sie so viel Theorie über Kubernetes Networking durchlaufen haben, möchte ich Ihnen zeigen, wie es praktisch gemacht wird.

Zum Anfassen

Unter der Annahme, dass Sie alle Kubernetes auf Ihren Systemen installiert haben, muss ich ein Szenario vorstellen.

Angenommen, Sie möchten den Produktnamen und die Produkt-ID speichern, dafür benötigen Sie eine Webanwendung. Grundsätzlich benötigen Sie einen Container für die Webanwendung und einen weiteren Container als MySQL für das Backend. Dieser MySQL-Container sollte mit dem Webanwendungscontainer verknüpft sein.

Wie wäre es, wenn ich das oben genannte Beispiel praktisch ausführen würde?

Lass uns anfangen!

Schritt 1: Erstellen Sie einen Ordner in Ihrem gewünschten Verzeichnis und ändern Sie den Arbeitsverzeichnispfad in diesen Ordner.

mkdir HandsOn cd HandsOn /

Schritt 2: Erstellen Sie nun YAML-Bereitstellungsdateien für die Webanwendung und die MySQL-Datenbank.

Schritt 3: Stellen Sie nach dem Erstellen der Bereitstellungsdateien beide Anwendungen bereit.

kubectl apply -f webapp.yml kubectl apply -f mysql.yml

Schritt 3.1: Überprüfen Sie beide Bereitstellungen.

kubectl erhalten Bereitstellung

Schritt 4: Jetzt müssen Sie Dienste für beide Anwendungen erstellen.

kubectl apply -f webservice.yml kubectl apply -f sqlservice.yml

Schritt 4.1: Stellen Sie die Dienste nach dem Erstellen der Dienste bereit.

Schritt 4.2: Überprüfen Sie, ob die Dienste erstellt wurden oder nicht.

kubectl bekommen Service

Schritt 5: Überprüfen Sie nun die Konfiguration der laufenden Pods.

Kubectl bekommen Schoten

Schritt 6: Gehen Sie in den Container im Webapp-Pod.

kubectl exec -it container_id bash nano var / www / html / index.php

Schritt 6.1 : Jetzt ändern Sie die $ Servername von localhost bis zum SQL-Dienstnamen „ webapp-sql1 ”In diesem Fall und $ Passwort von bis ' edureka ”. Füllen Sie außerdem alle erforderlichen Datenbankdetails aus und speichern Sie Ihre index.php-Datei mithilfe der Tastenkombination Strg + x und danach drücken Y. zum Speichern und drücken eingeben .

Schritt 7: Gehen Sie jetzt in den MySQL-Container, der im Pod vorhanden ist.

kubectl exec it container_id bash

Schritt 7.1: Erhalten Sie den Zugriff, um den MySQL-Container zu verwenden.

mysql -u root -p edureka

Dabei steht -u für den Benutzer und -p für das Kennwort Ihres Computers.

Schritt 7.2: Erstellen Sie eine Datenbank in MySQL, die zum Abrufen von Daten aus der Webanwendung verwendet wird.

CREATE DATABASE ProductDetails

Schritt 7.3: Verwenden Sie die erstellte Datenbank.

Produktdetails VERWENDEN

Schritt 7.4: Erstellen Sie in MySQL eine Tabelle in dieser Datenbank, mit der Daten aus der Webanwendung abgerufen werden.

CREATE TABLE-Produkte (Produktname VARCHAR (10), Produkt-ID VARCHAR (11))

Schritt 7.5: Beenden Sie nun auch den MySQL-Container mit dem Befehl Ausfahrt .

Schritt 8: Überprüfen Sie die Portnummer, an der Ihre Webanwendung arbeitet.

kubectl erhalten Dienstleistungen

Schritt 8.1: Öffnen Sie nun die Webanwendung unter der zugewiesenen Portnummer.

Schritt 9: Sobald Sie auf klicken Anfrage senden Gehen Sie zu dem Knoten, auf dem Ihr MySQL-Dienst ausgeführt wird, und gehen Sie dann in den Container.

Dies zeigt Ihnen die Ausgabe aller Listenprodukte, von denen Sie die Details eingegeben haben.

Interessiert daran, Kubernetes zu lernen?

Wenn Sie diesen Kubernetes Networking-Blog für relevant befunden haben, lesen Sie die von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt.