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.
| 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.
| 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.
| 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 “.