Das Ausführen und Verwalten von Microservices-Anwendungen in Containern in großem Maßstab über einen Maschinencluster hinweg ist eine anspruchsvolle Aufgabe. Kubernetes unterstützt Sie bei der Bewältigung dieser Herausforderung, indem es Ihnen eine leistungsstarke Lösung zur Container-Orchestrierung bietet. Es umfasst mehrere wichtige Funktionen, wie Fehlertoleranz, automatische Skalierung, fortlaufende Updates, Speicherung, Diensterkennung und Lastausgleich.
In diesem Blogbeitrag erklären wir, wie man NGINX Open Source oder NGINX Plus mit Ingress verwendet, dem integrierten Kubernetes-Load-Balancing-Framework für HTTP-Verkehr. Mit Ingress können Sie Regeln konfigurieren, die die Weiterleitung des externen Datenverkehrs zu den Diensten in Ihrem Kubernetes-Cluster steuern. Sie können jeden Load Balancer auswählen, der einen Ingress-Controller bereitstellt. Dabei handelt es sich um eine Software, die Sie in Ihrem Cluster bereitstellen, um Kubernetes und den Load Balancer zu integrieren. Hier zeigen wir Ihnen, wie Sie den Lastenausgleich für eine Microservices-Anwendung mit Ingress und den Ingress-Controllern konfigurieren, die wir für NGINX Plus und NGINX bereitstellen.
[Editor – Die zuvor separaten Controller für NGINX und NGINX Plus wurden zu einem einzigen Ingress-Controller für beide zusammengeführt.]
In diesem Blogbeitrag untersuchen wir nur das HTTP-Lastausgleichssystem für Kubernetes mit Ingress. Weitere Informationen zu anderen Optionen zum Lastenausgleich finden Sie unter „Lastenausgleich für Kubernetes-Dienste mit NGINX Plus“ in unserem Blog.
Notiz: Vollständige Anweisungen für die in diesem Blogbeitrag beschriebenen Verfahren finden Sie in unserem GitHub-Repository . Dieser Beitrag führt nicht durch jeden notwendigen Schritt, sondern bietet stattdessen Links zu diesen Anweisungen.
Bevor wir die Beispielanwendung bereitstellen und den Lastenausgleich dafür konfigurieren, müssen wir einen Lastenausgleich auswählen und den entsprechenden Ingress-Controller bereitstellen.
Ein Ingress-Controller ist eine Software, die einen bestimmten Load Balancer in Kubernetes integriert. Wir haben einen Ingress-Controller sowohl für NGINX Open Source als auch für NGINX Plus entwickelt, der jetzt in unserem GitHub-Repository verfügbar ist. Es gibt auch andere Implementierungen, die von Drittanbietern erstellt wurden. Weitere Informationen finden Sie auf der Seite „Ingress Controllers“ im GitHub-Repository für Kubernetes.
Vollständige Anweisungen zum Bereitstellen des NGINX- oder NGINX Plus-Ingress-Controllers in Ihrem Cluster finden Sie in unserem GitHub-Repository .
Unsere Beispielanwendung ist eine typische Microservices- Webanwendung, die aus mehreren Diensten besteht, die jeweils separat bereitgestellt werden. Über die Anwendung mit dem Namen „Café “ können Sie entweder Tee über den Teeservice oder Kaffee über den Kaffeeservice bestellen. Deine Getränkepräferenz gibst du mit der URI deiner HTTP-Anfrage an: Mit URIs, die mit /tea enden, erhalten Sie Tee, und mit URIs, die mit /coffee enden, erhalten Sie Kaffee. Verbindungen zur Anwendung müssen mit SSL/TLS gesichert werden.
Das folgende Diagramm stellt die Anwendung konzeptionell dar, wobei der Load Balancer von NGINX Plus die wichtige Rolle spielt, Clientanforderungen an den entsprechenden Dienst weiterzuleiten und Clientverbindungen mit SSL/TLS zu sichern.
Um die Anwendung in Ihrem Cluster bereitzustellen, folgen Sie den Anweisungen in unserem GitHub-Repository .
Unsere Café- App erfordert vom Load Balancer zwei Funktionen:
Um den Lastenausgleich mit Ingress zu konfigurieren, definieren Sie Regeln in einer Ingress-Ressource . Die Regeln geben an, wie externer Datenverkehr an die Dienste in Ihrem Cluster weitergeleitet wird.
In der Ressource können Sie mehrere virtuelle Server definieren, jeweils für einen anderen Domänennamen. Ein virtueller Server entspricht normalerweise einer einzelnen, im Cluster bereitgestellten Microservices-Anwendung. Für jeden Server können Sie:
Eine ausführlichere Erklärung zu Ingress mit Beispielen finden Sie auf der Ingress-Dokumentationsseite .
Hier ist die Ingress-Ressource ( cafe‑ingress.yaml ) für die Café -App:
Bei zeilenweiser Betrachtung sehen wir:
In den Zeilen 6–9 richten wir die SSL/TLS-Terminierung ein:
In den Zeilen 13–21 definieren wir zwei pfadbasierte Regeln:
Vollständige Anweisungen zum Bereitstellen der Ingress- und Secret-Ressourcen im Cluster finden Sie in unserem GitHub-Repository .
Sobald wir den NGINX Plus-Ingress-Controller, unsere Anwendung, die Ingress-Ressource und die Secret-Ressource bereitgestellt haben, können wir die App testen.
Wenn wir eine TEA-Anfrage mit der URI /tea stellen, sehen wir im Browser eine vom TEA- Dienst generierte Seite.
Wir hoffen, dass Sie nicht allzu enttäuscht sind, dass Ihnen beim Tee- und Kaffeeservice keine tatsächlichen Getränke, sondern lediglich Informationen zu den Behältern, in denen diese abgefüllt werden, und Einzelheiten zu Ihrem Wunsch serviert werden. Dazu gehören der Hostname und die IP-Adresse des Containers, die Anforderungs-URI und die Client-IP-Adresse. Jedes Mal, wenn wir die Seite aktualisieren, erhalten wir eine Antwort von einem anderen Container.
Wir können uns auch mit dem Dashboard zur Live-Aktivitätsüberwachung von NGINX Plus verbinden und in Echtzeit Kennzahlen zum Lastenausgleich von NGINX Plus und jedem Container unserer Anwendung anzeigen.
Ingress stellt grundlegende HTTP-Lastausgleichsfunktionen bereit. Es kommt jedoch häufig vor, dass die Lastausgleichsanforderungen für Ihre Anwendungen komplexer sind und daher von Ingress nicht unterstützt werden. Um einige dieser Anforderungen zu erfüllen, haben wir dem Ingress-Controller eine Reihe von Erweiterungen hinzugefügt. Auf diese Weise können Sie weiterhin die Vorteile der Verwendung von Kubernetes-Ressourcen zum Konfigurieren des Lastenausgleichs nutzen (anstatt den Lastenausgleich direkt konfigurieren zu müssen), gleichzeitig aber die Möglichkeit nutzen, erweiterte Lastenausgleichsfunktionen zu verwenden.
Eine vollständige Liste der verfügbaren Erweiterungen finden Sie in unserem GitHub-Repository .
Darüber hinaus bieten wir einen Mechanismus zum Anpassen der NGINX-Konfiguration mittels Kubernetes-Ressourcen, über Config Maps-Ressourcen oder Anmerkungen. Sie können beispielsweise Werte der Anweisungen „proxy_connect_timeout“
oder „proxy_read_timeout“
anpassen.
Wenn Ihre Anforderungen an den Lastausgleich über die von Ingress und unseren Erweiterungen unterstützten Anforderungen hinausgehen, empfehlen wir einen anderen Ansatz zur Bereitstellung und Konfiguration von NGINX Plus, bei dem der Ingress-Controller nicht verwendet wird. Lesen Sie in unserem Blog den Artikel „Load Balancing Kubernetes Services mit NGINX Plus“, um mehr zu erfahren.
Mit NGINX Plus bietet der Ingress-Controller zusätzlich zu den Vorteilen von NGINX die folgenden:
Kubernetes bietet integriertes HTTP-Lastausgleich, um externen Datenverkehr mit Ingress an die Dienste im Cluster weiterzuleiten. NGINX und NGINX Plus lassen sich in den Kubernetes-Lastausgleich integrieren, bieten vollständige Unterstützung für Ingress-Funktionen und stellen außerdem Erweiterungen bereit, um erweiterte Lastausgleichsanforderungen zu unterstützen.
Um NGINX Plus und den Ingress-Controller auszuprobieren, starten Sie noch heute Ihre kostenlose 30-Tage-Testversion oder kontaktieren Sie uns, um Ihre Anwendungsfälle zu besprechen .
„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."