Umstellung von Ingress – NGINX auf Traefik am IBM Cloud

IBM Cloud Kubernetes Service wird von Ingress- NGINX abgewichen, da das Upstream-Projekt eingestellt wurde. Traefik ist der Ingress-Controller, den IBM künftig unterstützt.

Während der Übergangsphase stehen beide Ingress-Controller zur Verfügung, sodass Sie Traefik in aller Ruhe testen und die Umstellung in Ihrem eigenen Tempo vornehmen können.

In diesem Beitrag werden die wichtigsten Unterschiede bei der Konfiguration von Ingress- NGINX, und Traefik verglichen und es werden Hinweise für Ihre Umstellung gegeben.

Vergleich von Ingress- NGINX mit Traefik auf IBM Cloud

Die folgende Tabelle vergleicht die grundlegenden Unterschiede zwischen Ingress- NGINX und Traefik.

Allgemeiner Vergleich der Eigenschaften von Ingress, NGINX und Traefik
Diese Vergleichstabelle enthält Zeilen- und Spaltenüberschriften. Die Zeilenüberschriften geben die zu vergleichenden Eigenschaften an, und die Spaltenüberschriften beziehen sich auf Ingress- NGINX und Traefik. Verwenden Sie die Tabelle, um die grundlegenden Unterschiede zwischen den beiden Ingress-Controllern zu vergleichen.
Ingress- NGINX Traefik
IBM-vorgegebene Ingress-Klassen public-iks-k8s-nginx für öffentliche und private-iks-k8s-nginx für private. public-iks-traefik für öffentliche und private-iks-traefik für private.
Versionsschema 0.X.X_XXXX_iks und 1.X.X_XXXX_iks Ab Traefik Version 3: 3.X.X_XXXX_iks
Verarbeitete Ressourcen Nur Ingress Ingress mit optionaler Kompatibilität mit Ingress- NGINX und Traefik-CRDs
IBM-Name des bereitgestellten Dienstkontos ibm-k8s-ingress ibm-traefik-ingress

In der folgenden Tabelle wird verglichen, wie Sie gängige Funktionen in Ingress- NGINX und Traefik konfigurieren.

Vergleich der Konfigurationsfunktionen von Ingress- NGINX und Traefik
Diese Tabelle enthält Zeilen- und Spaltenüberschriften. Die Zeilenüberschriften bezeichnen eine Konfigurationsfunktion, und die Spaltenüberschriften beschreiben, wie diese Funktion in Ingress- NGINX und Traefik konfiguriert wird.
Konfiguration Ingress- NGINX Traefik
App ID-Authentifizierung Fügen Sie der Ingress-Ressource „ nginx.ingress.kubernetes.io/auth-url “ und die zugehörigen Snippet-Anmerkungen hinzu. Siehe die Dokumentation zu Ingress unter NGINX. Erstellen Sie eine Traefik- ForwardAuth-Middleware-CRD und wenden Sie diese über die Annotation „ traefik.ingress.kubernetes.io/router.middlewares “ an. Siehe die Traefik-Dokumentation.
Maximale Größe des Client-Anfrage-Hauptteils Verwenden Sie die Annotation „ nginx.ingress.kubernetes.io/proxy-body-size “. Siehe die Dokumentation zu Ingress unter NGINX. Erstellen Sie ein Traefik- Buffering-Middleware-CRD und wenden Sie es auf die Ingress-Ressource an. Siehe die Traefik-Dokumentation.
Puffern von Clientantwortdaten Verwenden Sie die Annotation „ nginx.ingress.kubernetes.io/proxy-buffering “. Siehe die Dokumentation zu Ingress unter NGINX. Erstellen Sie ein Traefik- Buffering-Middleware-CRD und wenden Sie es auf die Ingress-Ressource an. Siehe die Traefik-Dokumentation.
Zeitüberschreitungen bei der Verbindung und beim Lesen Verwenden Sie die Annotationen „ nginx.ingress.kubernetes.io/proxy-connect-timeout “ und „ proxy-read-timeout “. Siehe die Dokumentation zu Ingress unter NGINX. Konfigurieren Sie die Timeouts für Lese-, Schreib- und Leerlaufvorgänge im „ ibm-ingress-deploy-config “ ( ConfigMap, ) und verwenden Sie ein CRD namens „ ServersTransport “ für die Timeouts bei der Weiterleitung im Backend. Siehe die Traefik-Dokumentation.
Angepasste Fehleraktionen Legen Sie das Feld „ custom-http-errors “ in der Datei „ ibm-k8s-controller-config “ fest: ConfigMap. Siehe die Dokumentation zu Ingress unter NGINX. Erstellen Sie ein Traefik- Errors-Middleware-CRD und wenden Sie es auf die Ingress-Ressource an. Siehe die Traefik-Dokumentation.
Anpassung von Anfrage-Headern Legen Sie das Feld „ proxy-set-headers “ in der Datei „ ibm-k8s-controller-config “ fest: ConfigMap. Siehe die Dokumentation zu Ingress unter NGINX. Erstellen Sie ein Traefik- Headers-Middleware-CRD und wenden Sie es auf die Ingress-Ressource an. Siehe die Traefik-Dokumentation.
Anpassen von Antwort-Headern Verwenden Sie die Annotation „ nginx.ingress.kubernetes.io/configuration-snippet “. Siehe die Dokumentation zu Ingress unter NGINX. Erstellen Sie ein Traefik- Headers-Middleware-CRD und wenden Sie es auf die Ingress-Ressource an. Siehe die Traefik-Dokumentation.
HTTP Weiterleitung zu „ HTTPS “ Legen Sie „ ssl-redirect “ in der Datei „ ibm-k8s-controller-config “ ( ConfigMap ) fest oder verwenden Sie die Annotation „ nginx.ingress.kubernetes.io/ssl-redirect “. Siehe die Dokumentation zu Ingress unter NGINX. Legen Sie das Feld „ httpsRedirect “ in der Datei „ ibm-ingress-deploy-config “ fest: ConfigMap. Siehe die Traefik-Dokumentation.
HTTP Strict Transport Security (hsts) Legen Sie das Feld „ hsts “ in der Datei „ ibm-k8s-controller-config “ fest: ConfigMap. Siehe die Dokumentation zu Ingress unter NGINX. Erstellen Sie eine Traefik- Headers-Middleware-CRD mit dem „ stsSeconds “ und den zugehörigen Feldern und wenden Sie diese auf die Ingress-Ressource an. Siehe die Traefik-Dokumentation.
URI-Pfadabgleich (regulärer Ausdruck) Verwenden Sie die Annotation „ nginx.ingress.kubernetes.io/use-regex “. Siehe die Dokumentation zu Ingress unter NGINX. Verwenden Sie die Annotation „ traefik.ingress.kubernetes.io/router.pathmatcher “. Siehe die Traefik-Dokumentation.
Gegenseitige TLS-Authentifizierung Verwenden Sie „ nginx.ingress.kubernetes.io/auth-tls-* “-Annotationen für die Ingress-Ressource. Siehe die Dokumentation zu Ingress unter NGINX. Erstellen Sie ein Traefik-TLSOption-CRD und wenden Sie es über die Annotation „ traefik.ingress.kubernetes.io/router.tls.options “ an. Siehe die Traefik-Dokumentation.
Erneut versuchen / nächster Upstream Verwenden Sie „ nginx.ingress.kubernetes.io/proxy-next-upstream “ und die dazugehörigen Anmerkungen. Siehe die Dokumentation zu Ingress unter NGINX. Erstellen Sie ein Traefik- Retry-Middleware-CRD und wenden Sie es auf die Ingress-Ressource an. Siehe die Traefik-Dokumentation.
Ratenbegrenzung Verwenden Sie „ nginx.ingress.kubernetes.io/limit-* “-Annotationen für die Ingress-Ressource. Siehe die Dokumentation zu Ingress unter NGINX. Erstellen Sie ein Traefik- RateLimit-Middleware-CRD und wenden Sie es auf die Ingress-Ressource an. Siehe die Traefik-Dokumentation.
Pfadumschreibung Verwenden Sie die Annotation „ nginx.ingress.kubernetes.io/rewrite-target “. Siehe die Dokumentation zu Ingress unter NGINX. Erstellen Sie ein Traefik- ReplacePath- oder ReplacePathRegex-Middleware-CRD und wenden Sie es auf die Ingress-Ressource an. Siehe die Traefik-Dokumentation.
Sitzungsbindung (Sticky Cookies) Verwenden Sie „ nginx.ingress.kubernetes.io/affinity “ und die dazugehörigen Anmerkungen. Siehe die Dokumentation zu Ingress unter NGINX. Verwenden Sie die Traefik-Annotationen „Service sticky cookie “ direkt in der Ingress-Ressource. Siehe die Traefik-Dokumentation.
Upstream- TLS ( SSL-Dienste) Verwenden Sie die Annotationen „ nginx.ingress.kubernetes.io/backend-protocol “ und „ proxy-ssl-* “. Siehe die Dokumentation zu Ingress unter NGINX. Erstellen Sie eine Traefik- ServersTransport-CRD mit dem Feld „ rootCAs “ und wenden Sie diese auf den Backend-Service an. Siehe die Traefik-Dokumentation.
SSL Protokolle und Verschlüsselungsverfahren Legen Sie die Felder „ ssl-protocols “ und „ ssl-ciphers “ in der Datei „ ibm-k8s-controller-config “ fest: ConfigMap. Siehe die Dokumentation zu Ingress unter NGINX. Erstellen Sie ein Traefik-TLSOption-CRD mit den Feldern „ minVersion “, „ maxVersion “ und „ cipherSuites “. Siehe die Traefik-Dokumentation.

Wenn eine Funktion von Traefik-CRDs abhängt, wie beispielsweise Middleware, TLSOption oder ServersTransport, stellen Sie sicher, dass die CRD-Verarbeitung aktiviert ist. Die CRD-Verarbeitung ist standardmäßig aktiviert. Informationen zur Konfiguration der CRD-Verarbeitung finden Sie im Abschnitt „ processTraefikCRDs “ im Dokument „ ibm-ingress-deploy-config “ ( ConfigMap ) unter „Erstellen benutzerdefinierter Einstellungen im Ingress“(ConfigMap ).

In der folgenden Tabelle sind die anpassbaren Bereitstellungsparameter aufgeführt, die von Ingress- NGINX und Traefik unterstützt werden.

Von Ingress unterstützte, anpassbare Bereitstellungsparameter – NGINX und Traefik
Diese Tabelle enthält Zeilen- und Spaltenüberschriften. Die Zeilenüberschriften bezeichnen einen Bereitstellungsparameter, und die Spaltenüberschriften geben an, ob Ingress- NGINX und Traefik diesen Parameter unterstützen oder eine Alternative dazu bieten.
Ingress- NGINX Traefik
replicas Unterstützt Unterstützt
ingressClass Unterstützt Unterstützt
httpPort, httpsPort Unterstützt Unterstützt
tcpServicesConfig Unterstützt Nicht zutreffend. Verwenden Sie das CRD „ IngressRouteTCP “.
enableSslPassthrough Unterstützt Nicht zutreffend. Sie müssen diese Einstellung nicht ausdrücklich aktivieren.
defaultCertificate Unterstützt Nicht zutreffend. Verwenden Sie die TLSStore-CRD mit „ defaultCertificate “.
defaultBackendService Unterstützt Nicht zutreffend. Verwenden Sie den globalen Standard-Ingress für das Backend.
deepInspect Unterstützt Nicht zutreffend
defaultConfig Unterstützt Nicht zutreffend
enableAnnotationValidation Unterstützt Nicht zutreffend. Traefik ist nicht anfällig für Konfigurationsinjektionen durch Annotationen.
enableIngressValidation Unterstützt Nicht zutreffend
logLevel Als Zahl zwischen 0 und 5 für den Ausführlichkeitsgrad. Wird als Zeichenfolge mit den folgenden Werten unterstützt: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, PANIC.
ingressProvider Nicht zutreffend Unterstützt
processTraefikCRDs Nicht zutreffend Unterstützt
traefikIngressNginxAllowExternalNameServices Nicht zutreffend Unterstützt
traefikCRDAllowCrossNamespace Nicht zutreffend Unterstützt
traefikCRDAllowExternalNameServices Nicht zutreffend Unterstützt
httpReadTimeout, httpsReadTimeout Nicht zutreffend. Konfigurieren Sie dies über die ibm-k8s-controller-config ConfigMap. Unterstützt
httpWriteTimeout, httpsWriteTimeout Nicht zutreffend. Konfigurieren Sie dies über die ibm-k8s-controller-config ConfigMap. Unterstützt
httpIdleTimeout, httpsIdleTimeout Nicht zutreffend. Konfigurieren Sie dies über die ibm-k8s-controller-config ConfigMap. Unterstützt
httpsRedirect Nicht zutreffend. Die Konfiguration erfolgt über die Anmerkung „ ibm-k8s-controller-config “ ConfigMap oder eine entsprechende Anmerkung. Unterstützt
tolerations Unterstützt Unterstützt

Bei der Migration zu berücksichtigende Verhaltensweisen

Die folgenden Mechanismen von „ IBM Cloud “ tragen dazu bei, Dienstunterbrechungen in bestimmten Szenarien zu verhindern.

DNS-Verwaltung auf klassischen Clustern

Bei klassischen Clustern werden die IP-Adressen der öffentlichen ALB-Instanzen automatisch zur Standarddomäne des Clusters hinzugefügt, wenn diese ALB-Instanzen aktiviert oder deaktiviert werden.

Wenn Sie verschiedene Arten von ALBs aktivieren (Kombination von Traefik mit Ingress – NGINX ), werden keine DNS-Einträge hinzugefügt. Dadurch wird die unerwünschte Situation vermieden, dass hinter einer einzigen Domäne verschiedene ALB-Typen gemischt werden, was zu schwer zu behebenden Problemen führen könnte. Solange dieser gemischte Zustand andauert, werden keine neuen IP-Adressen registriert. Das Löschen von IP-Adressen funktioniert weiterhin wie bisher.

Wenn die letzte Instanz des anderen Typs deaktiviert wird (entweder Traefik oder Ingress- NGINX ), werden die verbleibenden ALBs automatisch neu registriert, um den gewünschten Zustand wiederherzustellen, in dem alle öffentlichen ALB-Instanzen hinter der Standard-Subdomain des Clusters registriert sind.

Standardmäßige Behandlung von Ingress-Klassen

Die Standard-Ingress-Klasse wird bei jedem Aktivierungs- oder Deaktivierungsvorgang des ALB abgeglichen. Wenn die Standard-Ingress-Klasse auf der Standardeinstellung „ IBM “ belassen und nicht konfiguriert wird, wird sie automatisch aktualisiert.

Wenn im Cluster ausschließlich Traefik-basierte ALBs aktiviert sind, wird public-iks-traefik oder private-iks-traefik als Standard festgelegt, je nachdem, ob zuvor public-iks-k8s-nginx oder private-iks-k8s-nginx als Standard festgelegt war. Ebenso wird, falls auf dem Cluster nur ALBs auf Basis von Ingress- NGINX aktiviert sind, die Standard-Ingress-Klasse wieder auf die von Ingress- NGINX zurückgesetzt.

Benutzerdefinierte Ingress-Klassen werden niemals automatisch als Standard festgelegt.

Weitere Informationen zur Konfiguration und Anpassung von Traefik finden Sie unter „ Über Ingress mit Traefik “.