Herausgeber – Dieser Beitrag ist ein Auszug aus unserem umfassenden E-Book „ Verwaltung des Kubernetes-Verkehrs mit F5 NGINX“: Ein praktischer Leitfaden . Laden Sie es noch heute kostenlos herunter .
Viele Organisationen, die Kubernetes zum ersten Mal einrichten, beginnen mit dem NGINX Ingress-Controller, der von der Kubernetes-Community entwickelt und gepflegt wird ( kubernetes/ingress-nginx ). Mit zunehmender Weiterentwicklung der Kubernetes-Bereitstellungen stellen manche Organisationen jedoch fest, dass sie erweiterte Funktionen benötigen oder kommerziellen Support wünschen, während sie NGINX als Datenebene beibehalten möchten.
Eine Möglichkeit besteht darin, zum NGINX Ingress Controller zu migrieren, der von F5 NGINX entwickelt und gepflegt wird ( nginxinc/kubernetes-ingress ). Hier stellen wir vollständige Anweisungen bereit, damit Sie einige Komplikationen vermeiden können, die sich aus den Unterschieden zwischen den beiden Projekten ergeben.
Sie sind sich nicht sicher, worin sich diese Optionen unterscheiden? Lesen Sie „Leitfaden zur Auswahl eines Ingress-Controllers, Teil 4“: NGINX-Ingress-Controller-Optionen auf unserem Blog.
Um im weiteren Verlauf dieses Beitrags zwischen den beiden Projekten zu unterscheiden, bezeichnen wir den von der Kubernetes-Community verwalteten NGINX Ingress Controller ( kubernetes/ingress-nginx ) als „Community Ingress Controller“ und den von F5 NGINX verwalteten ( nginxinc/kubernetes-ingress ) als „NGINX Ingress Controller“.
Es gibt zwei Möglichkeiten, vom Community-Ingress-Controller zum NGINX-Ingress-Controller zu migrieren:
Mit dieser Migrationsoption verwenden Sie die standardmäßige Kubernetes-Ingress-Ressource, um Root-Funktionen festzulegen, und NGINX-Ingress-Ressourcen, um Ihre Konfiguration mit erweiterten Funktionen und Benutzerfreundlichkeit zu verbessern.
Die benutzerdefinierten Ressourcendefinitionen (CRDs) für NGINX-Ingress-Ressourcen – VirtualServer, VirtualServerRoute , TransportServer , GlobalConfiguration und Policy – ermöglichen Ihnen die einfache Delegierung der Kontrolle über verschiedene Teile der Konfiguration an unterschiedliche Teams (wie etwa AppDev- und Sicherheitsteams) und bieten außerdem mehr Konfigurationssicherheit und -validierung.
Die Tabelle ordnet die Konfiguration der SSL-Terminierung und des pfadbasierten Layer-7-Routings im Spezifikationsfeld
der Standard-Kubernetes-Ingress-Ressource dem Spezifikationsfeld
in der NGINX- VirtualServer -Ressource zu. Syntax und Einrückung unterscheiden sich bei den beiden Ressourcen leicht, sie erfüllen jedoch dieselben grundlegenden Ingress-Funktionen.
Kubernetes Ingress-Ressource | NGINX VirtualServer-Ressource |
---|---|
|
|
Mit dem Community-Ingress-Controller ist ein Kubernetes ConfigMap API-Objekt die einzige Möglichkeit, TCP- und UDP-Dienste verfügbar zu machen .
Mit NGINX Ingress Controller definieren TransportServer- Ressourcen eine breite Palette an Optionen für TCP/UDP- und TLS-Passthrough-Lastausgleich. TransportServer-Ressourcen werden in Verbindung mit GlobalConfiguration -Ressourcen verwendet, um eingehende und ausgehende Verbindungen zu steuern.
Weitere Informationen finden Sie unter „Support für TCP-, UDP- und TLS-Passthrough-Dienste in NGINX-Ingress-Ressourcen“ in unserem Blog.
Bei produktionsreifen Kubernetes-Bereitstellungen müssen häufig grundlegende Ingress-Regeln erweitert werden, um erweiterte Anwendungsfälle zu implementieren, darunter Canary- und Blue-Green-Bereitstellungen, Verkehrsdrosselung, Manipulation des Ingress-Egress-Verkehrs und mehr.
Der Community-Ingress-Controller implementiert viele dieser Anwendungsfälle mit Kubernetes -Annotationen . Viele dieser Anmerkungen werden jedoch mit benutzerdefinierten Lua-Erweiterungen erstellt, die sich auf sehr spezifische NGINX-Ingress-Ressourcendefinitionen beziehen und daher nicht für die Implementierung erweiterter Funktionen in einer stabilen und unterstützten Produktionsumgebung geeignet sind.
In den folgenden Abschnitten zeigen wir, wie Community-Ingress-Controller-Annotationen in NGINX-Ingress-Controller-Ressourcen konvertiert werden.
Auch wenn Sie häufige Codeänderungen an den Workloads Ihrer Produktionscontainer vornehmen, müssen Sie die Dienste Ihrer vorhandenen Benutzer weiterhin in Anspruch nehmen. Dies ist mit Canary- und Blue-Green-Bereitstellungen möglich und Sie können sie auf der Datenebene des NGINX Ingress Controllers ausführen, um stabile und vorhersehbare Updates in Kubernetes-Umgebungen auf Produktionsniveau zu erreichen.
Die Tabelle zeigt die Felder in den NGINX VirtualServer- und VirtualServerRoute- Ressourcen, die den Community-Ingress-Controller-Anmerkungen für Canary-Bereitstellungen entsprechen.
Der Community-Ingress-Controller wertet Canary-Annotationen in dieser Rangfolge aus:
nginx.ingress.kubernetes.io/canary-by-header
nginx.ingress.kubernetes.io/canary-by-cookie
nginx.ingress.kubernetes.io/canary-by-weight
Damit der NGINX Ingress Controller sie auf die gleiche Weise auswerten kann, müssen sie in dieser Reihenfolge im Manifest des NGINX VirtualServer oder VirtualServerRoute erscheinen.
Community-Ingress-Controller | NGINX-Ingress-Controller |
---|---|
|
|
|
|
|
|
|
|
In Microservices-Umgebungen, in denen Anwendungen von Natur aus flüchtig sind und daher eher Fehlermeldungen zurückgeben, machen DevOps-Teams in großem Umfang Gebrauch von Richtlinien zur Verkehrssteuerung – wie z. B. Unterbrechung der Stromkreise oder Begrenzung der Geschwindigkeit und Verbindung –, um Fehlerzustände zu verhindern, wenn Anwendungen nicht in einwandfreiem Zustand sind oder nicht wie erwartet funktionieren.
Die Tabelle zeigt die Felder in den NGINX VirtualServer- und VirtualServerRoute- Ressourcen, die den Ingress-Controller-Anmerkungen der Community für Ratenbegrenzung , benutzerdefinierte HTTP-Fehler , ein benutzerdefiniertes Standard-Backend und URI-Umschreiben entsprechen.
Community-Ingress-Controller | NGINX-Ingress-Controller |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Wie in der Tabelle angegeben, enthalten die NGINX-Ingress-Ressourcen zum Zeitpunkt des Schreibens dieses Artikels keine Felder, die die folgenden vier Community-Ingress-Controller-Anmerkungen direkt übersetzen, und Sie müssen Snippets verwenden. Für zukünftige Versionen von NGINX Ingress Controller ist eine direkte Unterstützung der vier Anmerkungen mithilfe von Policy- Ressourcen geplant.
nginx.ingress.kubernetes.io/limit-connections
nginx.ingress.kubernetes.io/limit-rate
nginx.ingress.kubernetes.io/limit-rate-after
nginx.ingress.kubernetes.io/limit-whitelist
Die Manipulation von HTTP-Headern ist in vielen Anwendungsfällen nützlich, da sie zusätzliche Informationen enthalten, die für die an einer HTTP-Transaktion beteiligten Systeme wichtig und relevant sind. Beispielsweise unterstützt der Community-Ingress-Controller das Aktivieren und Festlegen von CORS-Headern ( Cross-Origin Resource Sharing ), die mit AJAX-Anwendungen verwendet werden, bei denen Front-End-JavaScript-Code aus einem Browser eine Verbindung zu einer Back-End-App oder einem Webserver herstellt.
Die Tabelle zeigt die Felder in den NGINX VirtualServer- und VirtualServerRoute- Ressourcen, die den Community-Ingress-Controller-Annotationen zur Header-Manipulation entsprechen.
Community-Ingress-Controller | NGINX-Ingress-Controller |
---|---|
|
|
Je nach konkretem Anwendungsfall möchten Sie möglicherweise weitere Proxy- und Lastausgleichsfunktionen im NGINX Ingress Controller konfigurieren. Zu diesen Funktionen gehören das Festlegen des Lastausgleichsalgorithmus sowie Timeout- und Puffereinstellungen für Proxyverbindungen.
Die Tabelle zeigt die Anweisungen im Upstream-
Feld der NGINX VirtualServer- und VirtualServerRoute-Ressourcen, die den Community-Ingress-Controller-Annotationen für benutzerdefinierten NGINX-Lastausgleich , Proxy-Timeouts , Proxy-Pufferung und Routing-Verbindungen zur Cluster-IP-Adresse und zum Port eines Dienstes entsprechen .
Community-Ingress-Controller | NGINX-Ingress-Controller |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ein Service Mesh ist besonders in einer strikten Zero-Trust-Umgebung nützlich, in der verteilte Anwendungen innerhalb eines Clusters durch gegenseitige Authentifizierung sicher kommunizieren. Was wäre, wenn wir für den ein- und ausgehenden Datenverkehr des Clusters (Nord-Süd-Verkehr) dasselbe Sicherheitsniveau einführen müssten?
Wir können die mTLS-Authentifizierung auf der Ingress Controller-Ebene so konfigurieren, dass sich die Endsysteme externer Verbindungen gegenseitig durch Vorlage eines gültigen Zertifikats authentifizieren.
Die Tabelle zeigt die Felder in den NGINX- Richtlinienressourcen , die den Community-Ingress-Controller-Annotationen für die Client-Zertifikatauthentifizierung und die Back-End-Zertifikatauthentifizierung entsprechen.
Community-Ingress-Controller | NGINX-Ingress-Controller |
---|---|
|
|
|
|
Die Tabelle zeigt die Felder in den NGINX- Richtlinienressourcen , die exklusiv für den auf NGINX Plus basierenden NGINX-Ingress-Controller gelten und den Community-Ingress-Controller-Anmerkungen für die Sitzungspersistenz (Affinität) entsprechen.
Community-Ingress-Controller | NGINX-Ingress-Controller |
---|---|
|
|
Die zweite Möglichkeit zur Migration vom Community-Ingress-Controller zum NGINX-Ingress-Controller besteht darin, nur Anmerkungen und ConfigMaps in der Standard-Kubernetes-Ingress-Ressource zu verwenden und sich möglicherweise auf die Verarbeitung im „Master/Minion “-Stil zu verlassen. Dadurch bleibt die gesamte Konfiguration im Ingress-Objekt erhalten.
Notiz: Ändern Sie mit dieser Methode nicht das Spezifikationsfeld
der Ingress-Ressource.
In der folgenden Tabelle sind die Ingress-Controller-Annotationen der Community aufgeführt, die direkt den vom NGINX Ingress Controller unterstützten Annotationen entsprechen.
1Der Community-Ingress-Controller verwendet Lua, um einige seiner Lastausgleichsalgorithmen zu implementieren. NGINX Ingress Controller hat nicht für alle ein Äquivalent.
2Leitet HTTP-Verkehr auf HTTPS um. Der Community-Ingress-Controller implementiert dies mit Lua-Code, während der NGINX-Ingress-Controller native NGINX- If
-Bedingungen verwendet.
In der folgenden Tabelle sind die Annotationen des Community-Ingress-Controllers aufgeführt, die direkt den Annotationen entsprechen, die vom NGINX Ingress Controller basierend auf NGINX Plus unterstützt werden.
Community-Ingress-Controller | NGINX Ingress Controller basierend auf NGINX Plus |
---|---|
|
|
Notiz: Der auf NGINX Plus basierende NGINX Ingress Controller verfügt über zusätzliche Anmerkungen für Funktionen, die der Community-Ingress-Controller überhaupt nicht unterstützt, darunter aktive Integritätsprüfungen und Authentifizierung mit JSON Web Tokens (JWTs).
Die folgende Tabelle ordnet die ConfigMap-Schlüssel des Community-Ingress-Controllers den direkt entsprechenden ConfigMap-Schlüsseln des NGINX-Ingress-Controllers zu. Beachten Sie, dass einige ConfigMap-Schlüsselnamen identisch sind. Darüber hinaus verfügen sowohl der Community-Ingress-Controller als auch der NGINX-Ingress-Controller über ConfigMaps-Schlüssel, die der andere nicht hat (nicht in der Tabelle angezeigt).
Sie können vom Community-Ingress-Controller zum NGINX-Ingress-Controller migrieren, indem Sie entweder benutzerdefinierte NGINX-Ingress-Ressourcen oder die standardmäßige Kubernetes-Ingress-Ressource mit Anmerkungen und ConfigMaps verwenden. Die erste Option unterstützt ein breiteres Spektrum an Netzwerkfunktionen und ist daher besser für Kubernetes-Umgebungen auf Produktionsniveau geeignet.
Dieser Beitrag ist ein Auszug aus unserem umfassenden E-Book „ Verwaltung des Kubernetes-Verkehrs mit F5 NGINX“: Ein praktischer Leitfaden . Laden Sie es noch heute kostenlos herunter .
Testen Sie den auf NGINX Plus basierenden NGINX Ingress Controller noch heute selbst in einer kostenlosen 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."