Redaktion – Dieser Beitrag ist ein Auszug aus unserem umfassenden E-Book „Kubernetes-Datenverkehr mit F5 NGINX verwalten: Ein Praxisleitfaden“. Laden Sie es noch heute kostenlos herunter.
Viele Unternehmen, die Kubernetes zum ersten Mal einrichten, beginnen mit dem von der Kubernetes-Community entwickelten und gepflegten NGINX Ingress Controller (kubernetes/ingress-nginx). Mit zunehmender Reife ihrer Kubernetes-Bereitstellungen stellen einige Unternehmen jedoch fest, dass sie erweiterte Funktionen oder kommerziellen Support benötigen, NGINX aber weiterhin als Datenebene nutzen möchten.
Eine Möglichkeit besteht darin, zum von F5 NGINX entwickelten und gepflegten NGINX Ingress Controller (nginxinc/kubernetes-ingress) zu migrieren. Hier finden Sie eine vollständige Anleitung, mit der Sie 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: Optionen für NGINX Ingress Controller in unserem Blog.
Um die beiden Projekte im weiteren Verlauf dieses Beitrags voneinander zu unterscheiden, bezeichnen wir den von der Kubernetes-Community gepflegten NGINX Ingress Controller (kubernetes/ingress-nginx) als „Community-Ingress-Controller“ und den von F5 NGINX gepflegten (nginxinc/kubernetes-ingress) als „NGINX Ingress Controller“.
Für die Migration vom Community-Ingress-Controller zum NGINX Ingress Controller gibt es zwei Möglichkeiten:
- Option 1: Migration mithilfe von NGINX Ingress-Ressourcen
Dies ist die optimale Lösung, da NGINX Ingress-Ressourcen die umfassenderen Ingress-Netzwerkfunktionen unterstützen, die für produktionsreife Kubernetes-Umgebungen erforderlich sind. Weitere Informationen zu NGINX Ingress-Ressourcen erhalten Sie in unserem Webinar „Fortgeschrittene Kubernetes-Bereitstellungen mit dem NGINX Ingress Controller“. - Option 2: Migration mithilfe der Kubernetes-Ingress-Ressource
Diese Option wird empfohlen, wenn Sie die standardmäßige Kubernetes-Ingress-Ressource zur Definition von Ingress-Lastverteilungsregeln verwenden möchten.
Option 1: Migration mithilfe von NGINX-Ingress-Ressourcen
Bei dieser Migrationsoption verwenden Sie die standardmäßige Kubernetes-Ingress-Ressource, um grundlegende Funktionen festzulegen, und NGINX-Ingress-Ressourcen, um Ihre Konfiguration um zusätzliche Funktionen zu erweitern und die Bedienung zu vereinfachen.
Die benutzerdefinierten Ressourcendefinitionen (Custom Resource Definitions, CRDs) für NGINX-Ingress-Ressourcen – VirtualServer, VirtualServerRoute, TransportServer, GlobalConfiguration, und Policy – ermöglichen es Ihnen, die Kontrolle über verschiedene Teile der Konfiguration einfach an unterschiedliche Teams (z. B. AppDev- und Sicherheitsteams) zu delegieren, und bieten zugleich mehr Konfigurationssicherheit und eine zuverlässigere Validierung.
Konfigurieren der SSL-Terminierung und des HTTP-Pfad-basierten Routings
Die Tabelle stellt die Konfiguration der SSL-Terminierung und des pfadbasierten Routings auf Layer 7 im Feld spec der standardmäßigen Kubernetes-Ingress-Ressource der Konfiguration im Feld spec der NGINX-Ressource VirtualServer gegenüber. Syntax und Einrückung unterscheiden sich in den beiden Ressourcen geringfügig, sie erfüllen jedoch dieselben grundlegenden Ingress-Funktionen.
| Kubernetes-Ingress-Ressource | NGINX-VirtualServer-Ressource |
|---|---|
|
|
TCP/UDP-Lastverteilung und TLS-Passthrough konfigurieren
Beim Community-Ingress-Controller ist ein Kubernetes-ConfigMap-API-Objekt die einzige Möglichkeit, TCP- und UDP-Dienste bereitzustellen.
Mit dem NGINX Ingress Controller definieren TransportServer-Ressourcen eine Vielzahl von Optionen für den TCP/UDP-Lastenausgleich und den Lastenausgleich mit TLS-Passthrough. TransportServer-Ressourcen werden zusammen mit GlobalConfiguration-Ressourcen verwendet, um eingehende und ausgehende Verbindungen zu steuern.
Weitere Informationen finden Sie im Beitrag „Unterstützung für TCP-, UDP- und TLS-Passthrough-Dienste in NGINX-Ingress-Ressourcen“ in unserem Blog.
Annotationen des Community Ingress Controllers in NGINX Ingress Resources konvertieren
Kubernetes-Bereitstellungen für den Produktionseinsatz müssen grundlegende Ingress-Regeln häufig erweitern, um fortgeschrittene Anwendungsfälle wie Canary- und Blue-Green-Bereitstellungen, Traffic-Drosselung, die Manipulation des Ingress- und Egress-Traffics und vieles mehr umzusetzen.
Der Community-Ingress-Controller implementiert viele dieser Anwendungsfälle mithilfe von Kubernetes-Annotationen. Viele dieser Annotationen basieren jedoch auf benutzerdefinierten Lua-Erweiterungen, die auf sehr spezifische Definitionen von NGINX-Ingress-Ressourcen zugeschnitten sind. Daher eignen sie sich nicht für die Implementierung erweiterter Funktionen in einer stabilen und unterstützten Produktionsumgebung.
In den folgenden Abschnitten zeigen wir, wie Sie Annotationen des Community Ingress Controllers in Ressourcen des NGINX Ingress Controllers konvertieren.
- Canary-Bereitstellungen
- Datenverkehrssteuerung
- Header-Manipulation
- Proxying und Lastverteilung
- mTLS-Authentifizierung
- Sitzungspersistenz (exklusiv für NGINX Plus)
Canary-Bereitstellungen
Auch wenn Sie häufig Codeänderungen an Ihren produktiven Container-Workloads bereitstellen, müssen Sie Ihre bestehenden Benutzer weiterhin bedienen. Canary- und Blue-Green-Deployments ermöglichen Ihnen dies. Sie können sie auf der Datenebene des NGINX Ingress Controllers durchführen, um stabile und vorhersehbare Aktualisierungen in Kubernetes-Produktivumgebungen zu gewährleisten.
Die Tabelle zeigt die Felder in den NGINX-Ressourcen „VirtualServer und VirtualServerRoute“, die den Annotationen des Community-Ingress-Controllers für Canary-Bereitstellungen entsprechen.
Der Community-Ingress-Controller wertet Canary-Annotationen in der folgenden Prioritätsreihenfolge aus:
nginx.ingress.kubernetes.io/canary-by-headernginx.ingress.kubernetes.io/canary-by-cookienginx.ingress.kubernetes.io/canary-by-weight
Damit der NGINX Ingress Controller sie auf dieselbe Weise auswertet, müssen sie im NGINX-VirtualServer- oder VirtualServerRoute-Manifest in dieser Reihenfolge aufgeführt sein.
| Community Ingress Controller | NGINX Ingress Controller |
|---|---|
|
|
|
|
|
|
|
|
Datenverkehrssteuerung
In Microservices-Umgebungen, in denen Anwendungen naturgemäß kurzlebig sind und daher häufiger Fehlermeldungen zurückgeben, setzen DevOps-Teams umfassend Richtlinien zur Datenverkehrssteuerung ein – etwa Circuit Breaking sowie die Begrenzung von Anfrageraten und Verbindungen –, um Fehlerzustände zu verhindern, wenn Anwendungen beeinträchtigt sind oder nicht wie erwartet funktionieren.
Die Tabelle zeigt die Felder in NGINX-VirtualServer- und VirtualServerRoute-Ressourcen, die den Annotationen des Community-Ingress-Controllers für Ratenbegrenzung, benutzerdefinierte HTTP-Fehler, ein benutzerdefiniertes Standard-Backend und URI-Umschreibung entsprechen.
| Community Ingress Controller | NGINX Ingress Controller |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Wie in der Tabelle angegeben, enthalten NGINX-Ingress-Ressourcen zum Zeitpunkt der Erstellung dieses Dokuments keine Felder, mit denen sich die folgenden vier Annotationen des Community-Ingress-Controllers direkt übertragen lassen. Daher müssen Sie Snippets verwenden. Eine direkte Unterstützung der vier Annotationen mithilfe von Policy-Ressourcen ist für zukünftige Versionen des NGINX Ingress Controllers geplant.
nginx.ingress.kubernetes.io/limit-connectionsnginx.ingress.kubernetes.io/limit-ratenginx.ingress.kubernetes.io/limit-rate-afternginx.ingress.kubernetes.io/limit-whitelist
Header-Manipulation
Die Bearbeitung 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. Der Community-Ingress-Controller unterstützt beispielsweise das Aktivieren und Festlegen von Cross-Origin Resource Sharing-Headern (CORS), die bei AJAX-Anwendungen verwendet werden, bei denen sich Frontend-JavaScript-Code aus einem Browser mit einer Backend-Anwendung oder einem Webserver verbindet.
Die Tabelle zeigt die Felder in den NGINX-Ressourcen „VirtualServer und VirtualServerRoute“, die den Annotationen des Community-Ingress-Controllers für die Header-Manipulation entsprechen.
| Community Ingress Controller | NGINX Ingress Controller |
|---|---|
|
|
Proxying und Lastverteilung
Je nach konkretem Anwendungsfall können Sie im NGINX Ingress Controller weitere Proxy- und Lastverteilungsfunktionen konfigurieren. Dazu gehören die Festlegung des Lastverteilungsalgorithmus sowie Einstellungen für Zeitüberschreitungen und die Pufferung von Proxy-Verbindungen.
Die Tabelle zeigt die Anweisungen im Feld „upstream“ der NGINX-Ressourcen VirtualServer und VirtualServerRoute, die den Annotationen des Community-Ingress-Controllers für benutzerdefinierten NGINX-Lastenausgleich, Proxy-Zeitüberschreitungen, Proxy-Pufferung und das Weiterleiten von Verbindungen an die Cluster-IP-Adresse und den Port eines Dienstes entsprechen.
| Community Ingress Controller | NGINX Ingress Controller |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mTLS-Authentifizierung
Ein Service Mesh ist besonders in einer strikten Zero-Trust-Umgebung nützlich, in der verteilte Anwendungen innerhalb eines Clusters durch gegenseitige Authentifizierung sicher miteinander kommunizieren. Was aber, wenn wir dasselbe Sicherheitsniveau auch für den Datenverkehr durchsetzen müssen, der in den Cluster hinein- und aus ihm herausfließt (Nord-Süd-Datenverkehr)?
Wir können die mTLS-Authentifizierung auf der Ebene des Ingress Controllers konfigurieren, sodass sich die Endsysteme externer Verbindungen gegenseitig authentifizieren, indem sie ein gültiges Zertifikat vorlegen.
Die Tabelle zeigt die Felder in NGINX-Policy-Ressourcen, die den Annotationen des Community-Ingress-Controllers für die Clientzertifikatauthentifizierung und die Backend-Zertifikatauthentifizierung entsprechen.
| Community Ingress Controller | NGINX Ingress Controller |
|---|---|
|
|
|
|
Sitzungspersistenz (exklusiv für NGINX Plus)
Die Tabelle zeigt die Felder in NGINX-Policy-Ressourcen, die ausschließlich im auf NGINX Plus basierenden NGINX Ingress Controller verfügbar sind und den Annotationen des Community-Ingress-Controllers für Sitzungspersistenz (Affinität) entsprechen.
| Community Ingress Controller | NGINX Ingress Controller |
|---|---|
|
|
Option 2: Migration mithilfe der Kubernetes-Ingress-Ressource
Die zweite Möglichkeit für die Migration vom Community-Ingress-Controller zum NGINX Ingress Controller besteht darin, ausschließlich Annotationen und ConfigMaps in der standardmäßigen Kubernetes-Ingress-Ressource zu verwenden und gegebenenfalls auf eine Verarbeitung nach dem „Master/Minion“-Prinzip zu setzen. Dadurch verbleibt die gesamte Konfiguration im Ingress-Objekt.
Hinweis: Ändern Sie bei dieser Methode nicht das Feld „spec“ der Ingress-Ressource.
Erweiterte Konfiguration mit Annotationen
Die folgende Tabelle enthält eine Übersicht über die Annotationen des Community-Ingress-Controllers, die direkt den vom NGINX Ingress Controller unterstützten Annotationen entsprechen.
| Community Ingress Controller | NGINX Ingress Controller | NGINX Directive |
|---|---|---|
| N/A | ||
| Default:
|
||
|
||
|
||
|
||
|
||
|
||
|
||
| N/A | ||
|
|
N/A2 |
1Der Community Ingress Controller verwendet Lua, um einige seiner Lastverteilungsalgorithmen zu implementieren. Der NGINX Ingress Controller bietet nicht für alle davon eine Entsprechung.
2Leitet HTTP-Datenverkehr an HTTPS weiter. Der Community-Ingress-Controller implementiert dies mit Lua-Code, während der NGINX Ingress Controller native NGINX-if-Bedingungen verwendet.
Die folgende Tabelle enthält eine Übersicht über die Annotationen des Community-Ingress-Controllers, die direkt den vom NGINX Ingress Controller auf Basis von NGINX Plus unterstützten Annotationen entsprechen.
| Community Ingress Controller | NGINX Ingress Controller auf Basis von NGINX Plus |
|---|---|
|
|
Hinweis: Der auf NGINX Plus basierende NGINX Ingress Controller bietet zusätzliche Annotationen für Funktionen, die vom Community Ingress Controller überhaupt nicht unterstützt werden, darunter aktive Zustandsprüfungen und die Authentifizierung mit JSON Web Tokens (JWTs).
Globale Konfiguration mit ConfigMaps
Die folgende Tabelle ordnet die ConfigMap-Schlüssel des Community-Ingress-Controllers den jeweils 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 ConfigMap-Schlüssel, die beim jeweils anderen nicht vorhanden sind (in der Tabelle nicht aufgeführt).
Zusammenfassung
Sie können vom Community-Ingress-Controller zum NGINX Ingress Controller migrieren und dabei entweder benutzerdefinierte NGINX-Ingress-Ressourcen oder die standardmäßige Kubernetes-Ingress-Ressource mit Annotationen und ConfigMaps verwenden. Die erste Option unterstützt ein breiteres Spektrum an Netzwerkfunktionen und eignet sich daher besser für Kubernetes-Umgebungen mit Produktionsanforderungen.
Dieser Beitrag ist ein Auszug aus unserem umfassenden E-Book „Kubernetes-Datenverkehr mit F5 NGINX verwalten: Ein Praxisleitfaden“. Laden Sie es noch heute kostenlos herunter.
Testen Sie den auf NGINX Plus basierenden NGINX Ingress Controller selbst im Rahmen einer kostenlosen 30-Tage-Testversion oder kontaktieren Sie uns, um Ihre Anwendungsfälle zu besprechen.
Über den Autor

Ähnliche Blogbeiträge
Die Zukunft von NGINX: Zurück zu unseren Open-Source-Wurzeln
Beim NGINX Sprint 2022 besinnen wir uns auf unsere Open-Source-Wurzeln. Erfahren Sie mehr über die Initiativen, die wir im kommenden Jahr verfolgen, und teilen Sie uns mit, was Sie sich wünschen.

Ein Leitfaden zur Auswahl eines Ingress-Controllers, Teil 1: Ermitteln Sie Ihre Anforderungen
Ein Ingress-Controller kann eines der leistungsstärksten Tools in Ihrem Kubernetes-Stack sein. Erfahren Sie, wie Sie Ihre Ingress-Anforderungen ermitteln, um die beste Option auszuwählen.
Bereitstellung des NGINX Ingress Controllers auf Amazon EKS: So haben wir getestet
Wir haben kürzlich den Lösungsleitfaden zum NGINX Ingress Controller um Empfehlungen zur Dimensionierung für Amazon Elastic Kubernetes Service (EKS) ergänzt. In diesem Blogbeitrag erläutern wir, wie wir diese Empfehlungen erarbeitet haben, und stellen Ihnen alle Informationen zur Verfügung, die Sie benötigen, um selbst ähnliche Tests durchzuführen.

Protokollierung des Datenverkehrs zwischen NGINX und Upstream-Servern bei CDN77
Bei der Fehlersuche bei Datenverkehrsproblemen zwischen NGINX und Upstream-Servern konnte CDN77 die benötigten Daten nur aus dem Fehlerprotokoll mit aktivierter Debug-Ausgabe beziehen, was die Leistung beeinträchtigt und riesige Dateien erzeugt. Daher entwickelte das Team ein neues benutzerdefiniertes Modul, das ausschließlich die benötigten Daten protokolliert.
Ankündigung von NGINX Plus R16
NGINX Plus R16 ist eine einheitliche, elastische Ingress- und Egress-Schicht für Anwendungen, die die Funktionen eines Load Balancers, API-Gateways und einer WAF vereint und neue Features wie clusterfähige Ratenbegrenzung, Schlüssel-Wert-Speicher, „Random with Two Choices“, verbessertes UDP-Load-Balancing und vieles mehr bietet.
5 Gründe für den Umstieg auf softwarebasiertes Load Balancing
Entdecken Sie fünf Gründe für den Wechsel zu einem softwarebasierten Load Balancer wie NGINX Plus, darunter Kosteneinsparungen, die Einführung von DevOps und eine einheitliche Lösung für alle Umgebungen.