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.
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!
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.
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.
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.
Im folgenden Screenshot sind zwei Fenster zu sehen, die den bereitgestellten und funktionierenden NGINX Loadbalancer für Kubernetes zeigen:
nginx-ingress
)Notiz : In diesem Beispiel sind die Kubernetes-Arbeitsknoten 10.1.1.8 und 10.1.1.10
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."