BLOG | NGINX

Automatisieren Sie den TCP-Load-Balancing für lokale Kubernetes-Dienste mit NGINX

NGINX-Teil-von-F5-horiz-schwarz-Typ-RGB
Chris Akker Miniaturbild
Chris Akker
Veröffentlicht am 22. August 2023

Sie sind ein moderner App-Entwickler. Sie verwenden eine Sammlung von Open Source und möglicherweise einige kommerzielle Tools, um neue Apps und Container zu schreiben, zu testen, bereitzustellen und zu verwalten. Sie haben Kubernetes ausgewählt, um diese Container und Pods in Entwicklungs-, Test-, Staging- und Produktionsumgebungen auszuführen. Sie haben sich mit den Architekturen und Konzepten von Microservices, der Cloud Native Computing Foundation und anderen modernen Industriestandards vertraut gemacht.

Auf dieser Reise haben Sie festgestellt, dass Kubernetes tatsächlich leistungsstark ist. Aber Sie waren wahrscheinlich auch überrascht, wie schwierig, unflexibel und frustrierend es sein kann. Das Implementieren und Koordinieren von Änderungen und Updates an Routern, Firewalls, Load Balancern und anderen Netzwerkgeräten kann überwältigend sein – insbesondere in Ihrem eigenen Rechenzentrum! Das ist genug, um einen Entwickler zu Tränen zu rühren.

Wie Sie diese Herausforderungen bewältigen, hängt stark davon ab, wo und wie Sie Kubernetes ausführen (als verwalteter Dienst oder vor Ort). In diesem Artikel geht es um den TCP-Lastausgleich, einen wichtigen Bereich, in dem sich die Bereitstellungsentscheidungen auf die Benutzerfreundlichkeit auswirken.

TCP-Lastausgleich mit verwaltetem Kubernetes (auch bekannt als die einfache Option)

Wenn Sie einen verwalteten Dienst wie einen öffentlichen Cloud-Anbieter für Kubernetes verwenden, wird ein Großteil der mühsamen Netzwerkaufgaben für Sie übernommen. Mit nur einem Befehl ( kubectl apply -f loadbalancer.yaml ) erhalten Sie vom Diensttyp LoadBalancer eine öffentliche IP, einen DNS-Eintrag und einen TCP-Load Balancer. Sie können beispielsweise Amazon Elastic Load Balancer so konfigurieren, dass der Datenverkehr auf Pods verteilt wird, die NGINX Ingress Controller enthalten, und müssen sich mit diesem Befehl keine Sorgen machen, wenn sich die Backends ändern. Es ist so einfach, wir wetten, Sie halten es für selbstverständlich!

TCP-Lastausgleich mit lokalem Kubernetes (auch bekannt als die schwierige Option)

Bei Clustern vor Ort ist das Szenario völlig anders. Sie oder Ihre Netzwerkkollegen müssen die Netzwerkkomponenten bereitstellen. Sie fragen sich vielleicht: „Warum ist es so schwierig, Benutzer für meine Kubernetes-Apps zu gewinnen?“ Die Antwort ist einfach, aber ein wenig schockierend: Der Servicetyp LoadBalancer, die Eingangstür zu Ihrem Cluster, existiert eigentlich nicht.

Um Ihre Apps und Dienste außerhalb des Clusters verfügbar zu machen, benötigt Ihr Netzwerkteam wahrscheinlich Tickets, Genehmigungen, Verfahren und vielleicht sogar Sicherheitsüberprüfungen – und das alles, bevor die Geräte neu konfiguriert werden. Oder Sie müssen möglicherweise alles selbst erledigen, wodurch die Anwendungsbereitstellung nahezu unmöglich wird. Schlimmer noch: Sie dürfen keine Änderungen an Kubernetes-Diensten vornehmen, denn wenn sich der NodePort ändert, könnte der Datenverkehr blockiert werden! Und wir alle wissen, wie sehr sich Benutzer über 500 Fehler freuen. Ihrem Chef gefällt das wahrscheinlich noch weniger.

Eine bessere Lösung für den TCP-Lastausgleich vor Ort: NGINX Loadbalancer für Kubernetes

Mit unserem neuen Projekt können Sie aus der „harten Variante“ die „einfache Variante“ machen: NGINX Loadbalancer für Kubernetes . Dieses kostenlose Projekt ist ein Kubernetes-Controller , der den NGINX Ingress Controller überwacht und automatisch eine externe NGINX Plus -Instanz aktualisiert, die für den Lastausgleich konfiguriert ist. Aufgrund des sehr geradlinigen Designs ist es einfach zu installieren und zu bedienen. Mit dieser Lösung können Sie TCP-Lastausgleich in lokalen Umgebungen implementieren und so sicherstellen, dass neue Apps und Dienste sofort erkannt werden und für den Datenverkehr verfügbar sind – ohne dass Sie manuell eingreifen müssen.

Architektur und Flow

NGINX Loadbalancer für Kubernetes befindet sich in einem Kubernetes-Cluster. Es ist bei Kubernetes registriert, um den Nginx-Ingress-Dienst (NGINX Ingress Controller) zu überwachen. Wenn es eine Änderung an den Backends gibt, sammelt NGINX Loadbalancer für Kubernetes die Worker-IPs und die NodePort-TCP-Portnummern und sendet die IP:Ports dann über die NGINX Plus-API an NGINX Plus. Die NGINX-Upstream-Server werden aktualisiert, ohne dass ein erneutes Laden erforderlich ist , und NGINX Plus verteilt den Datenverkehr auf die richtigen Upstream-Server und Kubernetes-NodePorts. Um eine hohe Verfügbarkeit zu erreichen, können zusätzliche NGINX Plus-Instanzen hinzugefügt werden.

Diagramm des NGINX Loadbalancer in Aktion

Ein Snapshot des NGINX Loadbalancer für Kubernetes in Aktion

Im folgenden Screenshot sind zwei Fenster zu sehen, die den bereitgestellten und funktionierenden NGINX Loadbalancer für Kubernetes zeigen:

  1. Diensttyp – LoadBalancer (für nginx-ingress )
  2. Externe IP – Verbindung zu den NGINX Plus-Servern
  3. Ports – NodePort wird mit den entsprechenden NGINX-Upstream-Servern auf 443:30158 abgebildet (wie im Echtzeit-Dashboard von NGINX Plus angezeigt)
  4. Protokolle – Zeigt an, dass NGINX Loadbalancer für Kubernetes erfolgreich Daten an NGINX Plus sendet.

Notiz : In diesem Beispiel sind die Kubernetes-Arbeitsknoten 10.1.1.8 und 10.1.1.10

Ein Screenshot von NGINX Loadbalancer für Kubernetes in Aktion

Legen Sie noch heute los

Wenn Sie die Netzwerkprobleme am Rand Ihres Kubernetes-Clusters ärgern, probieren Sie das Projekt aus und teilen Sie uns Ihre Meinung mit. Der Quellcode für NGINX Loadbalancer für Kubernetes ist Open Source (unter der Apache 2.0-Lizenz) und alle Installationsanweisungen sind auf GitHub verfügbar .  

Um Feedback zu geben, hinterlassen Sie uns einen Kommentar im Repo oder senden Sie uns eine Nachricht im NGINX Community Slack .


„Dieser Blogbeitrag kann auf Produkte verweisen, die nicht mehr verfügbar und/oder nicht mehr unterstützt werden. Die aktuellsten Informationen zu verfügbaren F5 NGINX-Produkten und -Lösungen finden Sie in unserer NGINX-Produktfamilie . NGINX ist jetzt Teil von F5. Alle vorherigen NGINX.com-Links werden auf ähnliche NGINX-Inhalte auf F5.com umgeleitet."