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 nutzen Sie die standardmäßige Kubernetes-Ingress-Ressource, um grundlegende Funktionen festzulegen, und NGINX Ingress-Ressourcen, um Ihre Konfiguration mit erweiterten Funktionen und mehr Benutzerfreundlichkeit zu optimieren.
Die benutzerdefinierten Ressourcendefinitionen (CRDs) für NGINX Ingress-Ressourcen – VirtualServer, VirtualServerRoute, TransportServer, GlobalConfiguration und Policy – erlauben Ihnen, die Kontrolle über verschiedene Teile der Systemkonfiguration einfach an unterschiedliche Teams (wie AppDev- und Sicherheitsteams) zu übergeben und sorgen gleichzeitig für mehr Sicherheit und Validierung bei der Konfiguration.
Die Tabelle vergleicht die Konfiguration der SSL-Terminierung und des pfad-basierten Routings auf Layer 7 im spec
-Feld der standardmäßigen Kubernetes Ingress-Ressource mit dem spec
-Feld der NGINX VirtualServer-Ressource. Syntax und Einrückung unterscheiden sich leicht, doch beide Ressourcen erfüllen die gleichen grundlegenden Ingress-Funktionen.
Kubernetes Ingress-Ressource | NGINX VirtualServer Resource |
---|---|
|
|
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 in unserem Blog unter Support für TCP-, UDP- und TLS-Passthrough-Dienste in NGINX Ingress-Ressourcen.
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 setzt viele dieser Anwendungsfälle mithilfe von Kubernetes-Annotations um. Wir verwenden allerdings viele dieser Annotations mit individuellen Lua-Erweiterungen, die auf sehr spezifische NGINX-Ingress-Ressourcendefinitionen zugeschnitten sind und sich daher nicht eignen, um erweiterte Funktionen in einer stabilen und unterstützten Produktionsumgebung umzusetzen.
In den folgenden Abschnitten zeigen wir Ihnen, wie Sie Community-Ingress-Controller-Annotationen in Ressourcen des NGINX Ingress Controllers umwandeln.
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 Felder in den NGINX VirtualServer- und VirtualServerRoute-Ressourcen, die den Annotationen des Community-Ingress-Controllers 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 zu Ratenbegrenzung, benutzerdefinierten HTTP-Fehlern, einem benutzerdefinierten Standard-Backend und URI-Umschreibungen entsprechen.
Community-Ingress-Controller | NGINX-Ingress-Controller |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Wie die Tabelle zeigt, enthalten die NGINX-Ingress-Ressourcen derzeit keine Felder, die die folgenden vier Community-Ingress-Controller-Anmerkungen direkt abbilden. Deshalb müssen Sie Snippets verwenden. Direkte Unterstützung der vier Anmerkungen über Policy-Ressourcen ist für künftige Versionen des NGINX Ingress Controllers 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
Das Manipulieren von HTTP-Headern hilft in vielen Fällen, da sie wichtige Zusatzinformationen für Systeme liefern, die an einer HTTP-Transaktion beteiligt sind. So ermöglicht der Community-Ingress-Controller beispielsweise das Aktivieren und Setzen von Cross-Origin Resource Sharing (CORS)-Headern. Diese nutzt man bei AJAX-Anwendungen, bei denen JavaScript im Browser mit einer Backend-App oder einem Webserver kommuniziert.
Die Tabelle zeigt die Felder in NGINX VirtualServer- und VirtualServerRoute-Ressourcen, die den Annotationen des Community Ingress Controllers 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 Angaben im upstream
-Feld der NGINX VirtualServer- und VirtualServerRoute-Ressourcen, die den Annotations des Ingress-Controllers aus der Community für benutzerdefinierten NGINX-Lastausgleich, Proxy-Timeouts, Proxy-Pufferung und die Anforderungsweiterleitung zu Cluster-IP-Adressen und Ports 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 der NGINX-Policy-Ressourcen, die den Annotationen des Community Ingress Controllers für Client-Zertifikatsauthentifizierung und Backend-Zertifikatsauthentifizierung entsprechen.
Community-Ingress-Controller | NGINX-Ingress-Controller |
---|---|
|
|
|
|
Die Tabelle zeigt Felder in NGINX Policy-Ressourcen, die nur im NGINX Ingress Controller auf Basis von NGINX Plus vorkommen und den Anmerkungen des Community-Ingress-Controllers zur Sitzungspersistenz (Affinität) entsprechen.
Community-Ingress-Controller | NGINX-Ingress-Controller |
---|---|
|
|
Die zweite Option für die Migration vom Community-Ingress-Controller zum NGINX Ingress Controller besteht darin, ausschließlich Annotationen und ConfigMaps im Standard-Kubernetes-Ingress-Objekt zu verwenden und möglicherweise auf eine Master-/Minion-Verarbeitung zu setzen. So halten Sie die gesamte Konfiguration im Ingress-Objekt.
Hinweis: Verändern Sie bei dieser Methode das spec
-Feld der Ingress-Ressource nicht.
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 auf den NGINX Ingress Controller umsteigen, indem Sie entweder benutzerdefinierte NGINX Ingress-Ressourcen oder die Standard-Kubernetes-Ingress-Ressource mit Annotationen und ConfigMaps nutzen. Die erste Variante bietet ein breiteres Spektrum an Netzwerkfunktionen und eignet sich daher besser für produktionsreife Kubernetes-Umgebungen.
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."