Migrazione da Istio a Anthos Service Mesh

Questa pagina fa parte di una guida di più pagine che spiega come eseguire la migrazione da Istio alla versione 1.7.8 di Anthos Service Mesh su un cluster GKE per un mesh contenente più cluster in progetti Google Cloud diversi. Per le migrazioni su un mesh a cluster singolo o per un mesh contenente più cluster nello stesso progetto Google Cloud, consulta Installazione, migrazione ed upgrade per GKE.

Prima di iniziare

Prima di installare Anthos Service Mesh, assicurati di avere:

Impostazione di credenziali e autorizzazioni

  1. Inizializza il progetto per prepararlo per l'installazione. Tra le altre cose, questo comando crea un account di servizio per consentire ai componenti del piano di controllo, ad esempio il proxy sidecar, di accedere in modo sicuro ai dati e alle risorse del tuo progetto.

    curl --request POST \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --data '' \
      "https://meshconfig.googleapis.com/v1alpha1/projects/${PROJECT_ID}:initialize"

    Il comando risponde con parentesi graffe vuote: {}

  2. Ottieni credenziali di autenticazione per interagire con il cluster. Questo comando imposta anche il contesto attuale per kubectl nel cluster.

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
        --project=${PROJECT_ID}
    
  3. Concedi all'utente corrente le autorizzazioni di amministratore del cluster. Devi disporre di queste autorizzazioni per creare le regole di controllo dell'controllo dell'accesso basato sui ruoli (RBAC) necessarie per Anthos Service Mesh.

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user="$(gcloud config get-value core/account)"

Se viene visualizzato l'errore "cluster-admin-binding" already exists, puoi tranquillamente ignorarlo e continuare con l'associazione cluster-admin-binding esistente.

Download del file di installazione in corso...

    Linux

  1. Scarica il file di installazione di Anthos Service Mesh nella directory di lavoro attuale:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz
  2. Scarica il file della firma e utilizza openssl per verificare la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig istio-1.7.8-asm.10-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    L'output previsto è: Verified OK

  3. Estrai i contenuti del file in qualsiasi posizione nel file system. Ad esempio, per estrarre i contenuti nella directory di lavoro corrente:
    tar xzf istio-1.7.8-asm.10-linux-amd64.tar.gz

    Il comando crea una directory di installazione nella directory di lavoro attuale denominata istio-1.7.8-asm.10 che contiene:

    • Applicazioni di esempio nella directory samples.
    • Lo strumento a riga di comando istioctl che utilizzi per installare Anthos Service Mesh si trova nella directory bin.
    • I profili di configurazione di Anthos Service Mesh si trovano nella directory manifests/profiles.

  4. Mac OS

  5. Scarica il file di installazione di Anthos Service Mesh nella directory di lavoro attuale:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz
  6. Scarica il file della firma e utilizza openssl per verificare la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.7.8-asm.10-osx.tar.gz.1.sig istio-1.7.8-asm.10-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    L'output previsto è: Verified OK

  7. Estrai i contenuti del file in qualsiasi posizione nel file system. Ad esempio, per estrarre i contenuti nella directory di lavoro corrente:
    tar xzf istio-1.7.8-asm.10-osx.tar.gz

    Il comando crea una directory di installazione nella directory di lavoro attuale denominata istio-1.7.8-asm.10 che contiene:

    • Applicazioni di esempio nella directory samples.
    • Lo strumento a riga di comando istioctl che utilizzi per installare Anthos Service Mesh si trova nella directory bin.
    • I profili di configurazione di Anthos Service Mesh si trovano nella directory manifests/profiles.

  8. Windows

  9. Scarica il file di installazione di Anthos Service Mesh nella directory di lavoro attuale:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip
  10. Scarica il file della firma e utilizza openssl per verificare la firma:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.7.8-asm.10-win.zip.1.sig istio-1.7.8-asm.10-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    L'output previsto è: Verified OK

  11. Estrai i contenuti del file in qualsiasi posizione nel file system. Ad esempio, per estrarre i contenuti nella directory di lavoro corrente:
    tar xzf istio-1.7.8-asm.10-win.zip

    Il comando crea una directory di installazione nella directory di lavoro attuale denominata istio-1.7.8-asm.10 che contiene:

    • Applicazioni di esempio nella directory samples.
    • Lo strumento a riga di comando istioctl che utilizzi per installare Anthos Service Mesh si trova nella directory bin.
    • I profili di configurazione di Anthos Service Mesh si trovano nella directory manifests/profiles.

  12. Assicurati di essere nella directory principale dell'installazione di Anthos Service Mesh.
    cd istio-1.7.8-asm.10
  13. Per praticità, aggiungi gli strumenti nella directory /bin al tuo PERCORSO:
    export PATH=$PWD/bin:$PATH

Preparazione dei file di configurazione delle risorse

Quando esegui il comando istioctl install, specifichi -f istio-operator.yaml nella riga di comando. Questo file contiene informazioni sul progetto e sul cluster richieste da Anthos Service Mesh. Devi scaricare un pacchetto contenente istio-operator.yaml e altri file di configurazione delle risorse per poter impostare le informazioni sul progetto e sul cluster.

Per preparare i file di configurazione delle risorse:

Mesh CA

  1. Crea una nuova directory per i file di configurazione delle risorse del pacchetto Anthos Service Mesh. Ti consigliamo di utilizzare il nome del cluster come nome della directory.

  2. Passa alla directory in cui vuoi scaricare il pacchetto Anthos Service Mesh.

  3. Scarica il pacchetto:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.7-asm asm
    
  4. Imposta l'ID per il progetto in cui è stato creato il cluster:

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  5. Imposta il numero di progetto per il progetto host del parco risorse:

    kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
    
  6. Imposta il nome del cluster:

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  7. Imposta la zona o la regione predefinita:

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    
  8. Imposta il tag sulla versione di Anthos Service Mesh che stai installando:

    kpt cfg set asm anthos.servicemesh.tag 1.7.8-asm.10
    
  9. Imposta il webhook di convalida in modo che utilizzi un'etichetta di revisione:

    kpt cfg set asm anthos.servicemesh.rev asm-178-10
    

    Quando installi Anthos Service Mesh, imposti un'etichetta di revisione su istiod. Devi impostare la stessa revisione sul webhook di convalida.

  10. Poiché i cluster nella tua configurazione multi-cluster si trovano in progetti diversi, devi configurare gli alias dominio di attendibilità per gli altri progetti che formeranno il mesh di servizi multi-cluster/multiprogetto.

    1. Recupera l'ID progetto di tutti i cluster che saranno nel mesh multi-cluster/più progetti.

    2. Per l'ID progetto di ogni cluster, imposta gli alias dominio di attendibilità. Ad esempio, se hai cluster in 3 progetti, esegui il comando seguente e sostituisci PROJECT_ID_1, PROJECT_ID_2 e PROJECT_ID_3 con l'ID progetto di ogni cluster.

      kpt cfg set asm anthos.servicemesh.trustDomainAliases PROJECT_ID_1.svc.id.goog PROJECT_ID_2.svc.id.goog PROJECT_ID_3.svc.id.goog

      Quando configuri i cluster negli altri progetti, puoi utilizzare lo stesso comando.

      Gli alias dominio di attendibilità consentono a Mesh CA di autenticare i carichi di lavoro su cluster in altri progetti. Oltre a impostare gli alias dominio di attendibilità, dopo l'installazione di Anthos Service Mesh, devi abilitare il bilanciamento del carico tra cluster.

  11. Restituisce come output i valori dei setter kpt:

    kpt cfg list-setters asm
    

    L'output del comando è simile al seguente:

                              NAME                                                       VALUE
    anthos.servicemesh.canonicalServiceHub               gcr.io/gke-release/asm/canonical-service-controller:1.7.8-asm.10
    anthos.servicemesh.controlplane.monitoring.enabled   true
    anthos.servicemesh.hub                               gcr.io/gke-release/asm
    anthos.servicemesh.hubMembershipID                   MEMBERSHIP_ID
    anthos.servicemesh.tag                               1.7.8-asm.10
    anthos.servicemesh.trustDomainAliases                [example-project-12345.svc.id.goog,example-project-23456.svc.id.goog,example-project-98765.svc.id.goog]
    base-dir                                             base
    gcloud.compute.location                              us-central
    gcloud.compute.network                               default
    gcloud.compute.subnetwork                            default
    gcloud.container.cluster                             example-cluster-1
    gcloud.container.cluster.clusterSecondaryRange
    gcloud.container.cluster.releaseChannel              REGULAR
    gcloud.container.cluster.servicesSecondaryRange
    gcloud.container.nodepool.max-nodes                  4
    gcloud.core.project                                  example-project-12345
    gcloud.project.environProjectID                      FLEET_PROJECT_ID
    gcloud.project.environProjectNumber                  1234567890123
    gcloud.project.projectNumber                         9876543210987

    Verifica che i valori dei seguenti setter siano corretti:

    • anthos.servicemesh.rev
    • anthos.servicemesh.tag
    • anthos.servicemesh.trustDomainAliases
    • gcloud.compute.location
    • gcloud.container.cluster
    • gcloud.core.project
    • gcloud.project.environProjectNumber

    Puoi ignorare i valori degli altri impostatori.

Cittadella

  1. Crea una nuova directory per i file di configurazione delle risorse del pacchetto Anthos Service Mesh. Ti consigliamo di utilizzare il nome del cluster come nome della directory.

  2. Passa alla directory in cui vuoi scaricare il pacchetto Anthos Service Mesh.

  3. Scarica il pacchetto:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.7-asm asm
    
  4. Imposta l'ID per il progetto in cui è stato creato il cluster:

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  5. Imposta il numero di progetto per il progetto host del parco risorse:

    kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
    
  6. Imposta il nome del cluster:

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  7. Imposta la zona o la regione predefinita:

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    
  8. Imposta il tag sulla versione di Anthos Service Mesh che stai installando:

    kpt cfg set asm anthos.servicemesh.tag 1.7.8-asm.10
    
  9. Imposta il webhook di convalida in modo che utilizzi un'etichetta di revisione:

    kpt cfg set asm anthos.servicemesh.rev asm-178-10
    
  10. Restituisce come output i valori dei setter kpt:

    kpt cfg list-setters asm
    

    L'output del comando è simile al seguente:

                              NAME                                                       VALUE
    anthos.servicemesh.canonicalServiceHub               gcr.io/gke-release/asm/canonical-service-controller:1.7.8-asm.10
    anthos.servicemesh.controlplane.monitoring.enabled   true
    anthos.servicemesh.hub                               gcr.io/gke-release/asm
    anthos.servicemesh.hubMembershipID                   MEMBERSHIP_ID
    anthos.servicemesh.tag                               1.7.8-asm.10
    anthos.servicemesh.trustDomainAliases
    base-dir                                             base
    gcloud.compute.location                              us-central
    gcloud.compute.network                               default
    gcloud.compute.subnetwork                            default
    gcloud.container.cluster                             example-cluster-1
    gcloud.container.cluster.clusterSecondaryRange
    gcloud.container.cluster.releaseChannel              REGULAR
    gcloud.container.cluster.servicesSecondaryRange
    gcloud.container.nodepool.max-nodes                  4
    gcloud.core.project                                  example-project-12345
    gcloud.project.environProjectID                      FLEET_PROJECT_ID
    gcloud.project.environProjectNumber                  1234567890123
    gcloud.project.projectNumber                         9876543210987

    Verifica che i valori dei seguenti setter siano corretti:

    • anthos.servicemesh.rev
    • anthos.servicemesh.tag
    • gcloud.compute.location
    • gcloud.container.cluster
    • gcloud.core.project
    • gcloud.project.environProjectNumber

    Puoi ignorare i valori degli altri impostatori.

Migrazione ad Anthos Service Mesh

Per eseguire la migrazione da Istio, devi seguire il processo di upgrade del piano di controllo doppio (indicato come upgrade canary nella documentazione di Istio). Con l'upgrade di un piano di controllo doppio, puoi installare una nuova versione del piano di controllo insieme a quello esistente. Quando installi la nuova versione, includi un'etichetta revision che identifica la versione del nuovo piano di controllo. Ogni revisione è un'implementazione completa del piano di controllo Anthos Service Mesh con il proprio deployment e servizio.

Successivamente, potrai eseguire la migrazione alla nuova versione impostando la stessa etichetta revision sui tuoi carichi di lavoro in modo che puntino al nuovo piano di controllo ed eseguendo un riavvio in sequenza per reinserire i proxy con la nuova versione di Anthos Service Mesh. Con questo approccio, puoi monitorare l'effetto dell'upgrade su una piccola percentuale dei carichi di lavoro. Dopo aver testato l'applicazione, puoi eseguire la migrazione di tutto il traffico alla nuova versione. Questo approccio è molto più sicuro rispetto a un upgrade in loco in cui un nuovo piano di controllo sostituisce immediatamente la versione precedente del piano di controllo.

Aggiornamento del piano di controllo

Mesh CA

  1. Verifica che il contesto kubeconfig attuale punti al cluster su cui vuoi installare Anthos Service Mesh:

    kubectl config current-context
    

    L'output è nel seguente formato:

    gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME

    Il contesto kubeconfig e i valori dei setter kpt devono corrispondere. Se necessario, esegui il comando gcloud container clusters get-credentials per impostare il contesto attuale di kubeconfig.

  2. Esegui questo comando per eseguire il deployment del nuovo piano di controllo con il profilo asm-gcp-multiproject. Se vuoi abilitare una funzionalità facoltativa supportata, includi -f e il nome del file YAML nella riga di comando seguente. Per ulteriori informazioni, consulta Attivazione delle funzionalità facoltative.

    istioctl install \
      -f asm/istio/istio-operator.yaml \
      -f asm/istio/options/multiproject.yaml \
      -f asm/istio/options/multicluster.yaml\
      --revision=asm-178-10
    

    L'argomento --revision aggiunge a istiod un'etichetta di revisione nel formato istio.io/rev=asm-178-10. L'etichetta della revisione viene utilizzata dal webhook automatico dell'iniettore sidecar per associare i file collaterali inseriti a una determinata revisione istiod. Per abilitare l'inserimento automatico collaterale per uno spazio dei nomi, devi etichettarlo con una revisione che corrisponda a un deployment istiod.

    I seguenti file eseguono l'override delle impostazioni nel file istio-operator.yaml:

    • Il file multiproject.yaml imposta il profilo asm-gcp-multiproject.

    • Il file multicluster.yaml configura le impostazioni necessarie ad Anthos Service Mesh per una configurazione multi-cluster.

  3. Verifica che i pod del piano di controllo in istio-system siano attivi:

    kubectl get pods -n istio-system
    

    Output di esempio:

    NAME                                        READY   STATUS    RESTARTS   AGE
    istio-ingressgateway-c56675fcd-86zdn        1/1     Running   0          2m9s
    istio-ingressgateway-c56675fcd-vn4nv        1/1     Running   0          2m21s
    istiod-asm-178-10-6d5cfd4b89-xztlr           1/1     Running   0          3m44s
    istiod-fb7f746f4-wcntn                      1/1     Running   0          50m

    Hai due deployment e servizi del piano di controllo in esecuzione affiancati.

  4. Esegui il deployment del controller del servizio canonico nel cluster:

    kubectl apply -f asm/canonical-service/controller.yaml

    Il controller di servizio canonico raggruppa i carichi di lavoro appartenenti allo stesso servizio logico. Per ulteriori informazioni sui servizi canonici, consulta la panoramica del servizio canonico.

Cittadella

  1. Verifica che il contesto kubeconfig attuale punti al cluster su cui vuoi installare Anthos Service Mesh:

    kubectl config current-context
    

    L'output è nel seguente formato:

    gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME

    Il contesto kubeconfig e i valori dei setter kpt devono corrispondere. Se necessario, esegui il comando gcloud container clusters get-credentials per impostare il contesto attuale di kubeconfig.

  2. Esegui questo comando per eseguire il deployment del nuovo piano di controllo con il profilo asm-gcp-multiproject. Se vuoi abilitare una funzionalità facoltativa supportata, includi -f e il nome del file YAML nella riga di comando seguente. Per ulteriori informazioni, consulta Attivazione delle funzionalità facoltative.

    istioctl install \
      -f asm/istio/istio-operator.yaml \
      -f asm/istio/options/citadel-ca.yaml \
      -f asm/istio/options/multiproject.yaml \
      -f asm/istio/options/multicluster.yaml\
      --revision=asm-178-10
    

    L'argomento --revision aggiunge a istiod un'etichetta di revisione nel formato istio.io/rev=asm-178-10. L'etichetta della revisione viene utilizzata dal webhook automatico dell'iniettore sidecar per associare i file collaterali inseriti a una determinata revisione istiod. Per abilitare l'inserimento automatico collaterale per uno spazio dei nomi, devi etichettarlo con una revisione che corrisponda a un deployment istiod.

    I seguenti file eseguono l'override delle impostazioni nel file istio-operator.yaml:

    • citadel-ca.yaml configura Citadel come CA.

    • Il file multiproject.yaml imposta il profilo asm-gcp-multiproject.

    • Il file multicluster.yaml configura le impostazioni necessarie ad Anthos Service Mesh per una configurazione multi-cluster.

  3. Verifica che i pod del piano di controllo in istio-system siano attivi:

    kubectl get pods -n istio-system
    

    Output di esempio:

    NAME                                        READY   STATUS    RESTARTS   AGE
    istio-ingressgateway-c56675fcd-86zdn        1/1     Running   0          2m9s
    istio-ingressgateway-c56675fcd-vn4nv        1/1     Running   0          2m21s
    istiod-asm-178-10-6d5cfd4b89-xztlr           1/1     Running   0          3m44s
    istiod-fb7f746f4-wcntn                      1/1     Running   0          50m

    Hai due deployment e servizi del piano di controllo in esecuzione affiancati.

  4. Esegui il deployment del controller del servizio canonico nel cluster:

    kubectl apply -f asm/canonical-service/controller.yaml

    Il controller di servizio canonico raggruppa i carichi di lavoro appartenenti allo stesso servizio logico. Per ulteriori informazioni sui servizi canonici, consulta la panoramica del servizio canonico.

Riesecuzione del deployment dei carichi di lavoro

L'installazione della nuova revisione non ha alcun impatto sui proxy sidecar esistenti. Per eseguirne l'upgrade, devi configurarle in modo che puntino al nuovo piano di controllo. Questo viene controllato durante l'inserimento del file collaterale in base all'etichetta dello spazio dei nomi istio.io/rev.

  1. Aggiorna i carichi di lavoro da inserire con la nuova versione di Anthos Service Mesh:

    kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-178-10 --overwrite

    L'etichetta istio-injection deve essere rimossa perché ha la precedenza sull'etichetta istio.io/rev.

  2. Riavvia i pod per attivare la reinserimento:

    kubectl rollout restart deployment -n NAMESPACE
  3. Verifica che i pod siano configurati in modo da puntare al piano di controllo istiod-asm-178-10:

    kubectl get pods -n NAMESPACE -l istio.io/rev=asm-178-10

  4. Testa l'applicazione per verificare che i carichi di lavoro funzionino correttamente.

  5. Se disponi di carichi di lavoro in altri spazi dei nomi, ripeti i passaggi precedenti per ogni spazio dei nomi.

  6. Se sei sicuro che l'applicazione funzioni come previsto, vai a Completare la migrazione. In caso contrario, segui questi passaggi per ripristinare la versione precedente:

    Per eseguire il rollback:

    1. Aggiorna i carichi di lavoro da inserire con la versione precedente del piano di controllo:

      kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
    2. Riavvia i pod per attivare la reiniezione in modo che i proxy abbiano la versione precedente:

      kubectl rollout restart deployment -n NAMESPACE
    3. Esegui di nuovo il deployment della versione precedente di istio-ingressgateway:

      kubectl -n istio-system rollout undo deploy istio-ingressgateway
      
    4. Rimuovi il nuovo piano di controllo:

      kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-asm-178-10 -n istio-system --ignore-not-found=true
      

Completa la migrazione

Se ritieni che la tua applicazione funzioni come previsto, svolgi i passaggi che seguono per completare la migrazione ad Anthos Service Mesh:

  1. Rimuovi il piano di controllo precedente:

    kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
    

Registrazione del cluster in corso

Devi registrare il cluster nel parco risorse del progetto per ottenere l'accesso all'interfaccia utente unificata nella console Google Cloud. Un parco risorse offre un modo unificato per visualizzare e gestire i cluster e i relativi carichi di lavoro, inclusi i cluster esterni a Google Cloud.

Consulta Registrazione dei cluster nel parco risorse per informazioni sulla registrazione del cluster.

Passaggi successivi