Passaggio da Ingress ( NGINX ) a Traefik su IBM Cloud
IBM Cloud Kubernetes Service sta abbandonando Ingress- NGINX poiché il progetto a monte è stato dismesso. Traefik è il controller Ingress che IBM supporterà d'ora in poi.
Durante il periodo di transizione, entrambi i controller di Ingress saranno disponibili, offrendoti la flessibilità necessaria per testare Traefik ed effettuare la migrazione secondo i tuoi tempi.
Questo articolo mette a confronto le principali differenze di configurazione tra Ingress- NGINX e Traefik e fornisce indicazioni utili per la transizione.
Confronto tra Ingress- NGINX e Traefik su IBM Cloud
La tabella seguente mette a confronto le principali differenze tra Ingress- NGINX e Traefik.
| Ingress- NGINX | Traefik | |
|---|---|---|
| IBM- classi Ingress predefinite fornite | public-iks-k8s-nginx per il pubblico e private-iks-k8s-nginx per il settore privato. |
public-iks-traefik per il pubblico e private-iks-traefik per il settore privato. |
| Schema delle versioni | 0.X.X_XXXX_iks e 1.X.X_XXXX_iks |
A partire dalla versione 3 di Traefik: 3.X.X_XXXX_iks |
| Risorse elaborate | Solo Ingress | Ingress con " Ingress - Compatibilità conNGINX " opzionale e CRD di Traefik |
| IBM-nome dell'account di servizio distribuito | ibm-k8s-ingress |
ibm-traefik-ingress |
La tabella seguente mette a confronto le modalità di configurazione delle funzionalità più comuni in Ingress, NGINX e Traefik.
| Configurazione | Ingress- NGINX | Traefik |
|---|---|---|
| App ID autenticazione | Aggiungi " nginx.ingress.kubernetes.io/auth-url " e le relative annotazioni di snippet alla risorsa Ingress. Vedi la documentazione di Ingress: NGINX. |
Creare un CRD ( ForwardAuth ) per il middleware Traefik e applicarlo tramite l'annotazione traefik.ingress.kubernetes.io/router.middlewares . Consulta la documentazione di Traefik. |
| Dimensione massima del corpo della richiesta del client | Utilizza l'annotazione nginx.ingress.kubernetes.io/proxy-body-size . Vedi la documentazione di Ingress: NGINX. |
Creare un CRD ( Buffering ) per il middleware Traefik e applicarlo alla risorsa Ingress. Consulta la documentazione di Traefik. |
| Bufferizzazione dei dati relativi alle risposte dei clienti | Utilizza l'annotazione nginx.ingress.kubernetes.io/proxy-buffering . Vedi la documentazione di Ingress: NGINX. |
Creare un CRD ( Buffering ) per il middleware Traefik e applicarlo alla risorsa Ingress. Consulta la documentazione di Traefik. |
| Timeout di connessione e di lettura | Utilizza le annotazioni nginx.ingress.kubernetes.io/proxy-connect-timeout e proxy-read-timeout. Vedi la documentazione di Ingress: NGINX. |
Configurare i timeout di lettura/scrittura/inattività in ibm-ingress-deploy-config ConfigMap, e utilizzare un CRD ServersTransport per i timeout di inoltro del backend. Consulta la documentazione di Traefik. |
| Azioni personalizzate in caso di errore | Imposta il campo " custom-http-errors " in ibm-k8s-controller-config ConfigMap. Vedi la documentazione di Ingress: NGINX. |
Creare un CRD ( Errors ) per il middleware Traefik e applicarlo alla risorsa Ingress. Consulta la documentazione di Traefik. |
| Personalizzazione delle intestazioni delle richieste | Imposta il campo " proxy-set-headers " in ibm-k8s-controller-config ConfigMap. Vedi la documentazione di Ingress: NGINX. |
Creare un CRD ( Headers ) per il middleware Traefik e applicarlo alla risorsa Ingress. Consulta la documentazione di Traefik. |
| Personalizzazione delle intestazioni di risposta | Utilizza l'annotazione nginx.ingress.kubernetes.io/configuration-snippet . Vedi la documentazione di Ingress: NGINX. |
Creare un CRD ( Headers ) per il middleware Traefik e applicarlo alla risorsa Ingress. Consulta la documentazione di Traefik. |
| HTTP reindirizzamento a HTTPS | Imposta ssl-redirect nel file ibm-k8s-controller-config ConfigMap oppure utilizza l'annotazione nginx.ingress.kubernetes.io/ssl-redirect . Vedi la documentazione di Ingress: NGINX. |
Imposta il campo " httpsRedirect " in ibm-ingress-deploy-config ConfigMap. Consulta la documentazione di Traefik. |
| HSTS (HTTP Strict Transport Security) | Imposta il campo " hsts " in ibm-k8s-controller-config ConfigMap. Vedi la documentazione di Ingress: NGINX. |
Creare un CRD ( Headers ) per il middleware Traefik contenente il campo " stsSeconds " e i campi correlati, quindi applicarlo alla risorsa Ingress. Consulta la documentazione di Traefik. |
| Corrispondenza del percorso URI (espressioni regolari) | Utilizza l'annotazione nginx.ingress.kubernetes.io/use-regex . Vedi la documentazione di Ingress: NGINX. |
Utilizza l'annotazione traefik.ingress.kubernetes.io/router.pathmatcher . Consulta la documentazione di Traefik. |
| Autenticazione reciproca TLS | Utilizza le annotazioni " nginx.ingress.kubernetes.io/auth-tls-* " sulla risorsa Ingress. Vedi la documentazione di Ingress: NGINX. |
Creare un CRD TLSOption per Traefik e applicarlo tramite l'annotazione traefik.ingress.kubernetes.io/router.tls.options . Consulta la documentazione di Traefik. |
| Riprova / successivo a monte | Utilizza nginx.ingress.kubernetes.io/proxy-next-upstream e le relative annotazioni. Vedi la documentazione di Ingress: NGINX. |
Creare un CRD ( Retry ) per il middleware Traefik e applicarlo alla risorsa Ingress. Consulta la documentazione di Traefik. |
| Limitazione della frequenza | Utilizza le annotazioni " nginx.ingress.kubernetes.io/limit-* " sulla risorsa Ingress. Vedi la documentazione di Ingress: NGINX. |
Creare un CRD ( RateLimit ) per il middleware Traefik e applicarlo alla risorsa Ingress. Consulta la documentazione di Traefik. |
| Riscrittura dei percorsi | Utilizza l'annotazione nginx.ingress.kubernetes.io/rewrite-target . Vedi la documentazione di Ingress: NGINX. |
Creare un CRD ( ReplacePath ) o un CRD di middleware ( ReplacePathRegex ) per Traefik e applicarlo alla risorsa Ingress. Consulta la documentazione di Traefik. |
| Affinità di sessione (cookie persistenti) | Utilizza nginx.ingress.kubernetes.io/affinity e le relative annotazioni. Vedi la documentazione di Ingress: NGINX. |
Utilizza le annotazioni " sticky cookie " del servizio Traefik direttamente sulla risorsa Ingress. Consulta la documentazione di Traefik. |
| TLS a monte (servizi SSL ) | Utilizza le annotazioni nginx.ingress.kubernetes.io/backend-protocol e proxy-ssl-*. Vedi la documentazione di Ingress: NGINX. |
Crea un CRD " ServersTransport " di Traefik con il campo " rootCAs " e applicalo al servizio backend. Consulta la documentazione di Traefik. |
| SSL protocolli e algoritmi di cifratura | Imposta i campi “ ssl-protocols ” e “ ssl-ciphers ” nella pagina ibm-k8s-controller-config ConfigMap. Vedi la documentazione di Ingress: NGINX. |
Creare un CRD TLSOption di Traefik con i campi minVersion, maxVersion e cipherSuites. Consulta la documentazione di Traefik. |
Se una funzionalità dipende dai CRD di Traefik, come Middleware, TLSOption o ServersTransport, assicurarsi che l'elaborazione dei CRD sia abilitata. L'elaborazione CRD è abilitata per impostazione predefinita.
Per configurare l'elaborazione dei CRD, consultare il campo " processTraefikCRDs " nella sezione " ibm-ingress-deploy-config " ConfigMap nella guida "Creazione di impostazioni personalizzate" su Ingress ConfigMap.
La tabella seguente elenca i parametri di distribuzione personalizzabili supportati da Ingress- NGINX e Traefik.
| Ingress- NGINX | Traefik | |
|---|---|---|
replicas |
Supportato | Supportato |
ingressClass |
Supportato | Supportato |
httpPort, httpsPort |
Supportato | Supportato |
tcpServicesConfig |
Supportato | Non applicabile. Utilizza il CRD " IngressRouteTCP ". |
enableSslPassthrough |
Supportato | Non applicabile. Non è necessario attivare questa impostazione in modo esplicito. |
defaultCertificate |
Supportato | Non applicabile. Utilizza il CRD TLSStore con defaultCertificate. |
defaultBackendService |
Supportato | Non applicabile. Utilizza l'Ingress predefinito globale. |
deepInspect |
Supportato | Non applicabile |
defaultConfig |
Supportato | Non applicabile |
enableAnnotationValidation |
Supportato | Non applicabile. Traefik non è soggetto all'iniezione di configurazione tramite annotazioni. |
enableIngressValidation |
Supportato | Non applicabile |
logLevel |
È supportato come numero compreso tra 0 e 5 per il livello di verbosità. | Supportato come stringa con i seguenti valori: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, PANIC. |
ingressProvider |
Non applicabile | Supportato |
processTraefikCRDs |
Non applicabile | Supportato |
traefikIngressNginxAllowExternalNameServices |
Non applicabile | Supportato |
traefikCRDAllowCrossNamespace |
Non applicabile | Supportato |
traefikCRDAllowExternalNameServices |
Non applicabile | Supportato |
httpReadTimeout, httpsReadTimeout |
Non applicabile. Configurare tramite il ibm-k8s-controller-config ConfigMap. |
Supportato |
httpWriteTimeout, httpsWriteTimeout |
Non applicabile. Configurare tramite il ibm-k8s-controller-config ConfigMap. |
Supportato |
httpIdleTimeout, httpsIdleTimeout |
Non applicabile. Configurare tramite il ibm-k8s-controller-config ConfigMap. |
Supportato |
httpsRedirect |
Non applicabile. Configurare tramite l' ibm-k8s-controller-config, ConfigMap o un'annotazione. |
Supportato |
tolerations |
Supportato | Supportato |
Aspetti da tenere in considerazione durante la migrazione
I seguenti meccanismi di IBM Cloud contribuiscono a prevenire l'interruzione del servizio in determinati scenari.
Gestione del DNS nei cluster classici
Nei cluster classici, l'attivazione o la disattivazione delle istanze ALB pubbliche comporta l'aggiunta automatica degli indirizzi IP di tali ALB al dominio predefinito del cluster.
Quando si abilitano diversi tipi di ALB (combinando Traefik con Ingress - NGINX ), i record DNS non vengono aggiunti. Ciò evita la situazione indesiderata in cui tipi diversi di ALB siano mescolati dietro un unico dominio, il che potrebbe causare problemi difficili da risolvere. Finché persiste questa situazione mista, non vengono registrati nuovi indirizzi IP. La rimozione dell'indirizzo IP funziona ancora come prima.
Quando l'ultima istanza del tipo diverso viene disabilitata (sia Traefik che Ingress- NGINX ), gli ALB rimanenti vengono automaticamente registrati nuovamente per ripristinare lo stato desiderato, in cui tutte le istanze ALB pubbliche sono registrate dietro il sottodominio predefinito del cluster.
Gestione predefinita delle classi di Ingress
La classe Ingress predefinita viene riconciliata ad ogni evento di attivazione o disattivazione dell'ALB. Se la classe Ingress predefinita viene lasciata sull'impostazione predefinita " IBM " e non viene configurata, viene aggiornata automaticamente.
Se nel cluster sono abilitati solo ALB basati su Traefik, public-iks-traefik o private-iks-traefik viene impostato come predefinito, a seconda che il valore predefinito precedente fosse public-iks-k8s-nginx o private-iks-k8s-nginx. Allo stesso modo, se sul cluster sono abilitati solo ALB basati su Ingress- NGINX, la classe Ingress predefinita viene riportata a quella di Ingress- NGINX.
Le classi personalizzate di Ingress non vengono mai impostate automaticamente come predefinite.
Per ulteriori informazioni sulla configurazione e la personalizzazione di Traefik, consulta la sezione "Informazioni su Ingress con Traefik".