Kubernetes

Kubernetes-Ingress

Kubernetes-Ingress
Kubernetes hat viele bewegliche Teile. Dies ist von jedem Modell zu erwarten, das für verteiltes Rechnen gedacht ist. Um herauszufinden, was Kubernetes Ingress uns hilft, lassen Sie uns zunächst einige relevante Details zu einem typischen Kubernetes-Cluster zusammenfassen:

  1. Eine auf einem Kubernetes-Cluster bereitgestellte Anwendung wird als Sammlungs-Pod ausgeführt runs.
  2. Die Pods sind im Wesentlichen Container, die auf mehreren Knoten geplant sind multiple.
  3. Knoten können physische Server oder VMs sein, die von Ihrem Hosting-Provider angeboten werden. Natürlich können Sie Kubernetes auch auf einem On-Premise-Server verwenden, wenn Sie dies wünschen.
  4. Jeder Pod hat eine eindeutige IP-Adresse.
  5. Ihre Anwendung ist in viele Unterkomponenten unterteilt, die oft als Microservices bezeichnet werden.
  6. Für jeden Microservice Ihrer Anwendung gibt es einen entsprechenden Service in Kubernetes.
  7. Im Kontext von Kubernetes, a Bedienung stellt dem Rest des Clusters eine Sammlung von Pods als einzelne Abstraktion zur Verfügung. Eine einzige virtuelle IP.
  8. Dies hilft einem Dienst Ihrer Anwendung, mit einem anderen Dienst zu kommunizieren. Es ist eine Abstraktion, die es Ihnen ermöglicht, eine Sammlung von Pods zu adressieren, anstatt die IP-Adresse eines Pods anzugeben, wenn Sie mit ihm sprechen möchten.
  9. Ein Kubernetes-Dienst fungiert auch als Load Balancer für alle Pods, die er repräsentiert it. Der Verkehr wird gleichmäßig auf alle Knoten verteilt.

So weit, ist es gut. Jeder Dienst kann mit einem anderen Dienst kommunizieren. Diese Kommunikation ist im gesamten Kubernetes-Cluster möglich

Dienstleistungen freilegen

Wenn ein Baum in einem Wald umfällt und niemand in der Nähe ist, um ihn zu hören, macht er ein Geräusch??

Wenn Ihre Anwendung außerhalb des Kubernetes-Clusters keinen Zweck erfüllt, spielt es dann eine Rolle, ob Ihr Cluster gut aufgebaut ist oder nicht?? Wahrscheinlich nicht.

Um Ihnen ein konkretes Beispiel zu geben, nehmen wir an, wir haben eine klassische Webanwendung, die aus einem in Nodejs geschriebenen Frontend und einem in Python geschriebenen Backend besteht, das eine MySQL-Datenbank verwendet uses. Sie stellen zwei entsprechende Dienste in Ihrem Kubernetes-Cluster bereit.

Sie erstellen ein Dockerfile, das angibt, wie die Frontend-Software in einen Container gepackt wird, und auf ähnliche Weise verpacken Sie Ihr Backend. Als Nächstes stellen Sie in Ihrem Kubernetes-Cluster zwei Dienste bereit, die jeweils eine Reihe von Pods dahinter ausführen. Der Webservice kann mit dem Datenbankcluster kommunizieren und umgekehrt.

Kubernetes stellt jedoch keinen dieser Dienste (die einen wesentlichen HTTP-Endpunkt darstellen) dem Rest der Welt zur Verfügung. Wie in den offiziellen Dokumenten angegeben:

Es wird davon ausgegangen, dass Dienste über virtuelle IPs verfügen, die nur innerhalb des Clusternetzwerks geroutet werden können

Dies ist vom Sicherheitsstandpunkt aus absolut vernünftig, Ihre Dienste können miteinander kommunizieren, aber der Cluster lässt nicht zu, dass externe Einheiten direkt mit den Diensten kommunizieren talk. Zum Beispiel kann nur Ihr Web-Frontend mit dem Datenbankdienst kommunizieren und niemand sonst kann auch nur Anfragen an den Datenbankdienst senden.

Das Problem entsteht, wenn wir den Anwendungsfall eines Frontend-Dienstes betrachten. Es muss dem Rest der Öffentlichkeit zugänglich gemacht werden, damit Endbenutzer Ihre Anwendung verwenden können. Wir stellen solche Dienste mit Kubernetes Ingress bereit.

Kubernetes-Ingress

Ingress macht HTTP- und HTTPS-Routen von außerhalb des Clusters für Dienste innerhalb des Clusters verfügbar. Sie können die Routingregeln steuern, indem Sie die Kubernetes-Ingress-Ressource definieren. Aber es tut noch viel mehr. Die Bereitstellung eines einzelnen Dienstes kann mit verschiedenen anderen Alternativen wie NodePort oder Load Balancer erreicht werden, aber diese Einrichtungen verfügen nicht über Funktionen, die für eine moderne Web-App ausgereift genug sind.

Funktionen wie das Freigeben mehrerer Apps auf einer einzigen IP, das Definieren von Routen usw.

Lassen Sie uns diese Funktionen für den Rest des Artikels verstehen:

Einzelner Service-Ingress

Dies ist die einfachste Version, um einen einzelnen Dienst wie ein Web-Frontend mit einer IP (oder einem Domänennamen) und standardmäßigen HTTP- und HTTPS-Ports (i.e, 80 und 443).

Einzel-Fanout

Dies ist ein Ingress-Setup, mit dem Sie eingehenden Datenverkehr an eine einzelne IP zulassen und an mehrere Dienste weiterleiten können.

Es besteht aus:

Single Fanout ist der Fall, in dem eine einzelne IP für mehrere Dienste verwendet wird. Die Dienste können sich auf verschiedenen Pfaden in der URI befinden wie foo.Bar.com/admin kann ein Dienst für Administratoren und foo . sein.Bar.com/home kann der Dienst sein, der die Homepage jedes Benutzers generiert.

Der Ingress-Port ist immer 80 oder 443, aber der Port, auf dem die Dienste ausgeführt werden (innerhalb des Clusters), kann sich ziemlich unterscheiden.

Diese Art von Ingress hilft uns, die Anzahl der Load Balancer im Cluster zu minimieren, da sie im Wesentlichen wie einer agiert.

Namensbasiertes virtuelles Hosting

Öffentliche IP-Adressen sind endlich. Sie sind auch ziemlich teuer. Die Idee des namensbasierten virtuellen Hostings ist älter als Kubernetes. Der Kern davon ist, dass Sie die DNS-Einträge für verschiedene Websites wie ww1 zeigen.Beispiel.com und ww2.Beispiel.com an dieselbe IP-Adresse. Der Server, der unter dieser IP-Adresse läuft, sieht die eingehende Anfrage, und wenn der in der Anfrage erwähnte Hostname für ww1 ist.Beispiel.com, dann bedient es diese Website für Sie, und wenn ww2.Beispiel.com angefordert wird, dann wird das serviert.

Im Kontext von Kubernetes können wir zwei Dienste ausführen, die beispielsweise auf Port 80 laufen, und beide auf einer einzigen IP-Adresse mit einem Ingress auch von Port 80 verfügbar machen. Am Eintrittspunkt der Verkehr von ww1.Beispiel.com wird für ww2 vom Verkehr getrennt.Beispiel.com. Daher der Begriff namensbasiertes virtuelles Hosting.

Fazit

Ingress in Kubernetes ist ziemlich anspruchsvoll, um in einem einzigen Beitrag behandelt zu werden. Es gibt eine Vielzahl von Anwendungsfällen dafür und eine Vielzahl von Ingress-Controllern, die Ihrem Cluster die Ingress-Funktionalität hinzufügen. Ich würde empfehlen, mit Nginx Ingress Controller zu beginnen.

Für weitere Details und Spezifikationen können Sie auch der offiziellen Dokumentation folgen.

OpenTTD-Tutorial
OpenTTD ist eines der beliebtesten Wirtschaftssimulationsspiele auf dem Markt. In diesem Spiel musst du ein wunderbares Transportunternehmen aufbauen....
SuperTuxKart für Linux
SuperTuxKart ist ein großartiger Titel, der entwickelt wurde, um Ihnen das Mario Kart-Erlebnis kostenlos auf Ihrem Linux-System zu bieten. Es ist ziem...
Battle for Wesnoth-Tutorial
The Battle for Wesnoth ist eines der beliebtesten Open-Source-Strategiespiele, die Sie derzeit spielen können. Dieses Spiel befindet sich nicht nur se...