Migrazione dal controller Ingress ( NGINX ) al controller Ingress Traefik

Esegui la migrazione della tua configurazione Ingress in modo da utilizzare il controller Traefik al posto del controller Ingress- NGINX.

Prima di iniziare

Verificare questi prerequisiti prima di procedere alla migrazione.

  1. Assicurati di disporre delle autorizzazioni necessarie.

    • Ruolo di accesso alla piattaforma di amministrazione per il cluster
    • Ruolo di accesso al servizio “Manager” in tutti gli spazi dei nomi
  2. Esaminare le risorse Ingress esistenti per verificare la presenza di annotazioni o configurazioni specifiche relative a Ingress- NGINX. Consulta la documentazione sulle principali differenze tra i due controller di Ingress.

  3. Pianificate la vostra strategia di migrazione in base ai requisiti del carico di lavoro, alla tolleranza ai tempi di inattività e alla disponibilità delle risorse. Entrambi i controller possono funzionare contemporaneamente durante la migrazione.

  4. Assicurati che il tuo cluster disponga di almeno due nodi di lavoro per ogni zona, al fine di garantire l'alta disponibilità.

  5. Esegui il backup delle tue attuali configurazioni di Ingress prima di apportare modifiche.

Strategia 1: Configurazione separata di Ingress con un dominio diverso

Prova Traefik con una configurazione separata, mantenendo l'ambiente di produzione su Ingress: NGINX. Questa strategia garantisce il massimo isolamento e la massima sicurezza.

Utilizza questa strategia quando:

  • È opportuno testare accuratamente Traefik prima di migrare i carichi di lavoro di produzione.
  • È possibile distribuire un diverso insieme di applicazioni a scopo di test.
  • Hai le risorse necessarie per gestire ulteriori ALB.
  • Vuoi che durante i test non vi sia alcun rischio per il tuo ambiente di produzione.

Passi

  1. Scarica le versioni disponibili di Traefik.
    ibmcloud ks ingress alb versions
    
  2. Crea un nuovo ALB con Traefik.

Gruppi classici sh {: pre} ibmcloud ks ingress alb create classic --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --vlan VLAN_ID --version TRAEFIK_VERSION Cluster VPC sh {: pre} ibmcloud ks ingress alb create vpc-gen2 --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --version TRAEFIK_VERSION

  1. Per i cluster VPC, distribuire manualmente un servizio LoadBalancer aggiuntivo a scopo di test. Impostare " spec.selector " in modo che includa " app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik " (oppure " private-cr<cluster_id>-traefik " per gli ALB privati). Nei cluster Classic, viene creato automaticamente un nuovo bilanciatore di carico e non è necessaria alcuna configurazione aggiuntiva.

  2. Crea un dominio personalizzato per l'ALB di Traefik e indirizzalo al nome host o all'indirizzo IP del bilanciatore di carico. Per istruzioni dettagliate, consulta la sezione " Creazione di domini personalizzati ".

  3. Crea una risorsa Ingress per le applicazioni di prova utilizzando la classe Traefik Ingress. Segui il Passo 3: Crea la risorsa Ingress, specificando ingressClassName: public-iks-traefik (oppure private-iks-traefik per gli ALB privati).

  4. Testare le applicazioni tramite il dominio Traefik e verificarne il corretto funzionamento.

  5. Al termine dei test, procedi alla sezione " Effettuare il passaggio " per migrare i tuoi carichi di lavoro di produzione.

Strategia 2: Due bilanciatori di carico con lo stesso carico di lavoro

Prova entrambi i controller con lo stesso carico di lavoro creando due risorse Ingress che puntano allo stesso servizio. È possibile confrontare direttamente il comportamento dei controller senza influire sul traffico di produzione.

Utilizza questa strategia quando:

  • Vuoi confrontare il comportamento di Ingress- NGINX e Traefik sullo stesso carico di lavoro.
  • È necessario verificare che Traefik gestisca correttamente la vostra applicazione specifica.
  • È possibile effettuare dei test utilizzando un dominio non di produzione.
  • Si desidera ridurre al minimo il numero di applicazioni di test necessarie.

Passi

  1. Abilitare un nuovo ALB con una versione basata su Traefik.

Gruppi classici sh {: pre} ibmcloud ks ingress alb create classic --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --vlan VLAN_ID --version TRAEFIK_VERSION Cluster VPC sh {: pre} ibmcloud ks ingress alb create vpc-gen2 --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --version TRAEFIK_VERSION

  1. Per i cluster VPC, distribuire manualmente un servizio LoadBalancer aggiuntivo a scopo di test. Impostare " spec.selector " in modo che includa " app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik " (oppure " private-cr<cluster_id>-traefik " per gli ALB privati). Nei cluster Classic, viene creato automaticamente un nuovo bilanciatore di carico e non è necessaria alcuna configurazione aggiuntiva.

  2. Crea un dominio personalizzato per l'ALB di Traefik e indirizzalo al nome host o all'indirizzo IP del bilanciatore di carico. Per istruzioni dettagliate, consulta la sezione " Creazione di domini personalizzati ".

  3. Crea una seconda risorsa Ingress che utilizzi la classe Ingress di Traefik, ma che punti allo stesso servizio della tua risorsa Ingress esistente: NGINX. Segui le istruzioni riportate nel Passaggio 3: Crea la risorsa Ingress, assicurandoti di:

    • Specificare ingressClassName: public-iks-traefik (oppure private-iks-traefik per gli ALB privati)
    • Utilizza lo stesso valore " service.name " utilizzato dalla tua risorsa Ingress esistente ( NGINX )
    • Inserisci il tuo dominio di prova nei campi “ host ” e “ tls.hosts ”
  4. Testa la tua applicazione su entrambi i domini.

    • Accesso tramite il dominio Ingress- NGINX (produzione)
    • Accesso tramite il dominio Traefik (in fase di test)
  5. Confronta il comportamento, le prestazioni e le funzionalità dei due controller.

  6. Dopo aver effettuato la convalida, passa alla sezione " Effettuare il passaggio " per migrare il tuo dominio di produzione su Traefik.

Strategia 3: Test del DNS frazionato

Utilizza una configurazione DNS split per testare Traefik con il tuo dominio di produzione in un ambiente simile a quello di produzione senza influire sui tuoi utenti.

Utilizza questa strategia quando:

  • Vuoi eseguire il test utilizzando il tuo dominio di produzione effettivo.
  • Hai il controllo sulla configurazione DNS del tuo ambiente di test.
  • È necessario verificare l'esatta configurazione di produzione.
  • Vuoi ridurre al minimo le differenze tra l'ambiente di test e quello di produzione.

Passi

  1. Abilitare un nuovo ALB con una versione basata su Traefik.

Gruppi classici sh {: pre} ibmcloud ks ingress alb create classic --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --vlan VLAN_ID --version TRAEFIK_VERSION Cluster VPC sh {: pre} ibmcloud ks ingress alb create vpc-gen2 --cluster CLUSTER_NAME --type PUBLIC_OR_PRIVATE --zone ZONE --version TRAEFIK_VERSION

  1. Per i cluster VPC, distribuire manualmente un servizio LoadBalancer aggiuntivo a scopo di test. Impostare " spec.selector " in modo che includa " app.kubernetes.io/vpcComponent: public-cr<cluster_id>-traefik " (oppure " private-cr<cluster_id>-traefik " per gli ALB privati). Nei cluster Classic, viene creato automaticamente un nuovo bilanciatore di carico e non è necessaria alcuna configurazione aggiuntiva.

  2. Recupera l'indirizzo IP (metodo classico) o il nome host (VPC) del nuovo ALB di Traefik.

    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  3. Configura lo split-DNS nel tuo ambiente di test.

    • Per i vostri computer di prova o la vostra rete, configurate il DNS in modo che risolva il vostro dominio di produzione all'IP o al nome host dell'ALB di Traefik
    • Gli utenti di produzione continuano a connettersi all'ALB di Ingress- NGINX
    • Ciò può essere effettuato tramite file /etc/hosts locali, server DNS interni o configurazioni DNS specifiche per la VPN
  4. Crea una nuova risorsa Ingress utilizzando la classe Traefik Ingress con il tuo dominio di produzione. Segui il Passo 3: Crea la risorsa Ingress, specificando ingressClassName: public-iks-traefik (o private-iks-traefik per gli ALB privati) e il tuo dominio di produzione nei campi host e tls.hosts.

  5. Esegui un test dal tuo ambiente DNS split per verificare il corretto funzionamento di Traefik con il dominio e la configurazione di produzione.

  6. Dopo la convalida, passare alla sezione " Effettuare il passaggio " per aggiornare il DNS di produzione in modo che punti a Traefik.

Strategia 4: Migrazione diretta

Passa direttamente da Ingress ( NGINX ) a Traefik con modifiche minime alla configurazione e alla gestione delle risorse.

Questa strategia comporta un'interruzione del servizio durante la migrazione. Prima di iniziare, pianifica una finestra temporale dedicata alla manutenzione.

Utilizza questa strategia quando:

  • Il carico di lavoro è ridotto oppure si tratta di applicazioni non critiche.
  • È possibile tollerare brevi periodi di inattività durante la migrazione.
  • Vuoi ridurre al minimo il numero di risorse da gestire.
  • Hai già verificato la compatibilità con Traefik in un altro ambiente.
  • In modalità Classic, è necessario mantenere invariati gli indirizzi IP degli ALB, poiché i client si connettono utilizzando gli indirizzi IP anziché i domini DNS.

La disattivazione e la riattivazione di un ALB ne mantengono l'indirizzo IP originale, a meno che tale indirizzo IP non sia stato assegnato nel frattempo ad altri servizi. Per ulteriori informazioni, consultare la sezione " Abilitazione o disabilitazione degli ALB ".

Passi

  1. Ottieni l'ID del tuo ALB Ingress- NGINX.

    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. Disattiva l'ALB di Ingress- NGINX.

    ibmcloud ks ingress alb disable --alb ALB_ID --cluster CLUSTER_NAME
    

    Cluster VPC: se si disattiva l'ultimo ALB pubblico o privato, attendere che la distribuzione dell'ALB e la corrispondente risorsa di servizio del bilanciatore di carico vengano eliminate prima di abilitare un ALB Traefik.

  3. Abilita l'ALB con una versione di Traefik.

Gruppi classici sh {: pre} ibmcloud ks ingress alb enable classic --alb ALB_ID --version TRAEFIK_VERSION --cluster CLUSTER_NAME Per utilizzare un indirizzo IP specifico per l'ALB in modalità classica, utilizzare il flag --ip . Per ulteriori informazioni, consultare la sezione " Attivazione o disattivazione degli ALB ".

[Cluster VPC]{: tag-vpc}
```sh {: pre}
ibmcloud ks ingress alb enable vpc-gen2 --alb ALB_ID --version TRAEFIK_VERSION --cluster CLUSTER_NAME
```
  1. Per i cluster VPC, impostare Traefik come backend del bilanciatore di carico.

Cluster VPC sh {: pre} ibmcloud ks ingress load-balancer backend set --cluster CLUSTER-ID --public-backend traefik [--private-backend traefik]

  1. Aggiorna le tue risorse Ingress per utilizzare la classe Ingress di Traefik. Se le tue risorse specificano esplicitamente la classe Ingress, aggiorna spec.ingressClassName da public-iks-k8s-nginx a public-iks-traefik (oppure da private-iks-k8s-nginx a private-iks-traefik per gli ALB privati).

  2. Applica le risorse aggiornate di Ingress.

    kubectl apply -f ingress.yaml
    
  3. Verifica che le tue applicazioni siano accessibili tramite il controller Traefik.

    curl https://<domain>/<app_path>
    

Passare a Traefik

Al termine dei test, configurare il traffico di produzione in modo che utilizzi il controller Traefik. La procedura varia a seconda che si tratti di cluster classici o VPC. Scegli l'opzione che corrisponde al tipo e alla configurazione del tuo cluster.

Cluster classici

Per i cluster classici, aggiorna il tuo dominio di produzione in modo che punti al bilanciatore di carico che espone Traefik anziché a Ingress: NGINX.

Opzione 1: Aggiornare la mappatura del dominio

  1. Ottieni l'indirizzo IP del tuo ALB Traefik.
    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. Aggiorna il tuo dominio in modo che punti all'ALB di Traefik.
    ibmcloud ks ingress domain update --cluster CLUSTER_NAME --domain DOMAIN_NAME --ip TRAEFIK_ALB_IP
    
  3. Verifica l'aggiornamento del dominio.
    ibmcloud ks ingress domain ls --cluster CLUSTER_NAME
    
  4. Verificate il funzionamento delle vostre applicazioni sul dominio di produzione per assicurarvi che ora siano gestite da Traefik.

Opzione 2: Disattivare gli ALB di Ingress- NGINX

In alternativa, è possibile disabilitare tutti gli ALB basati su Ingress- NGINX, il che aggiorna automaticamente le mappature dei domini.

  1. Elencare tutti gli ALB e identificare quelli basati su Ingress- NGINX.
    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. Disattivare ogni ALB Ingress- NGINX.
    ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME
    
  3. Verifica che il tuo dominio punti ora agli ALB di Traefik.
    ibmcloud ks ingress domain ls --cluster CLUSTER_NAME
    

Opzione 3: Conservare gli indirizzi IP dell'ALB

Se i tuoi clienti si connettono direttamente agli indirizzi IP dell'ALB anziché ai nomi DNS, puoi mantenere tali indirizzi IP durante la migrazione. Per preservare gli indirizzi IP è necessario disattivare temporaneamente gli ALB, il che comporta una breve interruzione del servizio.

La disattivazione e la riattivazione di un ALB ne mantengono l'indirizzo IP originale, a meno che tale indirizzo IP non sia stato assegnato ad altri servizi.

  1. Elencare tutti gli ALB e identificare quelli basati su Ingress- NGINX, per ottenere i relativi ID e indirizzi IP.

    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. Disattiva l'ALB di Ingress- NGINX. Ciò provoca una breve interruzione del servizio per il traffico su quell'indirizzo IP.

    ibmcloud ks ingress alb disable --alb ALB_ID --cluster CLUSTER_NAME
    
  3. Riattivare l'ALB con una versione di Traefik per riutilizzare lo stesso indirizzo IP.

    ibmcloud ks ingress alb enable classic --alb ALB_ID --version TRAEFIK_VERSION --cluster CLUSTER_NAME
    

    In alternativa, creare un nuovo ALB e utilizzare il flag " --ip " per riutilizzare l'indirizzo IP originale.

  4. Aggiorna le tue risorse Ingress per utilizzare la classe Ingress di Traefik. Se le tue risorse specificano esplicitamente la classe Ingress, aggiorna spec.ingressClassName da public-iks-k8s-nginx a public-iks-traefik (oppure da private-iks-k8s-nginx a private-iks-traefik per gli ALB privati).

  5. Applica le risorse aggiornate di Ingress.

    kubectl apply -f ingress.yaml
    
  6. Verifica che le tue applicazioni siano accessibili tramite il controller Traefik.

    curl https://<domain>/<app_path>
    

Cluster VPC

Per i cluster VPC, aggiorna il backend del bilanciatore di carico in modo da esporre Traefik anziché Ingress: NGINX.

Opzione 1: Aggiornare il backend del bilanciatore di carico

  1. Aggiornare il bilanciatore di carico in modo che utilizzi il backend Traefik.
    ibmcloud ks ingress load-balancer backend set --cluster CLUSTER_NAME --public-backend traefik [--private-backend traefik]
    
  2. Verificare la configurazione del bilanciatore di carico.
    ibmcloud ks ingress load-balancer get --cluster CLUSTER_NAME
    
  3. Verifica che le tue applicazioni siano ora gestite da Traefik.

Opzione 2: Disattivare gli ALB di Ingress- NGINX

In alternativa, è possibile disattivare tutti gli ALB basati su Ingress- NGINX.

  1. Elencare tutti gli ALB e identificare quelli basati su Ingress- NGINX.
    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
    
  2. Disattivare ogni ALB Ingress- NGINX.
    ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME
    
  3. Verifica che il bilanciatore di carico utilizzi ora gli ALB di Traefik.
    ibmcloud ks ingress load-balancer get --cluster CLUSTER_NAME
    

Attività successive alla migrazione

Dopo aver effettuato la migrazione a Traefik, completare le seguenti operazioni:

  1. Controlla che le tue applicazioni non presentino comportamenti imprevisti o errori dopo la migrazione.

  2. Aggiornare la documentazione interna per riflettere la nuova configurazione di Ingress con Traefik.

  3. Rimuovere eventuali ALB, domini o risorse Ingress di prova che non sono più necessari.

  4. Dopo aver verificato che Traefik funzioni come previsto, disattivare gli ALB rimanenti di Ingress- NGINX.

    ibmcloud ks ingress alb disable --alb NGINX_ALB_ID --cluster CLUSTER_NAME
    

Risoluzione dei problemi

Se dovessi riscontrare dei problemi durante o dopo la migrazione, segui i passaggi riportati di seguito per individuarne la causa e risolverli.

Verifica la classe di Ingress

Verificare che le risorse Ingress utilizzino la classe Traefik corretta (public-iks-traefik o private-iks-traefik).

Verifica lo stato dell'ALB

Assicurati che i tuoi ALB di Traefik siano in buono stato.

ibmcloud ks ingress alb ls --cluster CLUSTER_NAME
Verifica lo stato di Ingress

Verifica lo stato delle tue risorse di Ingress.

kubectl get ingress -A
Registri di revisione

Controlla i log del controller Traefik per verificare la presenza di errori.

kubectl logs -n kube-system -l alb-image-type=traefik
Esegui diagnostica

Utilizza il rapporto sullo stato di Ingress per individuare eventuali problemi.

ibmcloud ks ingress status-report get --cluster CLUSTER_NAME
Se necessario, tornare indietro

Se dovessi riscontrare problemi critici, torna alla versione precedente di Ingress- NGINX disabilitando l'ALB di Traefik e riabilitando l'ALB di Ingress- NGINX con la sua versione originale. Pianificare la risoluzione dei problemi e ripetere la migrazione.

Per ulteriore assistenza, consulta la sezione " Risoluzione dei problemi di Ingress " oppure contatta l'assistenza di IBM Cloud.