Versione 1.14

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Eseguire la migrazione da Istio 1.11 o versioni successive ad Anthos Service Mesh

Questo tutorial mostra come eseguire la migrazione di un'applicazione da un cluster Google Kubernetes Engine (GKE) utilizzando Istio a un nuovo cluster utilizzando il mesh di servizi Anthos Service Mesh gestito da Google, completamente gestito e conforme a Istio.

In questo tutorial:

  1. Crea un nuovo cluster Google Kubernetes Engine e installa Istio e il gateway Istio in entrata nel cluster. Questo cluster agirà da cluster esistente da cui eseguire la migrazione.
  2. Esegui il deployment dell'applicazione di esempio Online Boutique nel cluster con Istio.
  3. Crea un altro cluster Google Kubernetes Engine nello stesso progetto Google Cloud.
  4. Abilita Anthos Service Mesh gestito sul secondo cluster ed esegui il deployment del gateway in entrata Anthos Service Mesh.
  5. Esegui il deployment di Boutique online sul cluster con Anthos Service Mesh per replicare il deployment dal cluster con Istio.
  6. Sposta il 50% del traffico utente dal cluster con Istio al cluster con Anthos Service Mesh, utilizzando le capacità di suddivisione del traffico di Istio sul cluster con Istio.
  7. Completa la migrazione da Istio ad Anthos Service Mesh indirizzando la voce del sistema dei nomi di dominio (DNS) del cluster con Istio al cluster con Anthos Service Mesh.

Il traffico degli utenti è suddiviso in 50-50 indirizzi tra un cluster con Istio e un cluster con Anthos Service Mesh. Ogni cluster contiene il proprio deployment di Boutique Online.

Deployment canary

"Deployment canary" è una tecnica utilizzata nello sviluppo di software per testare una nuova versione di alcuni software prima di rilasciarla per tutti gli utenti. Consente di aumentare in modo incrementale la percentuale di traffico inviato alla nuova versione. In questo tutorial, configurerai un nuovo cluster con Anthos Service Mesh e vi sposterai in modo incrementale il traffico degli utenti. Inizierai indirizzando lo 0% del traffico utente al nuovo cluster, quindi il 50% e infine il 100%. In un ambiente di produzione, dovresti utilizzare incrementi più piccoli e più numerosi. Se in qualsiasi momento noti che il nuovo cluster non è in grado di gestire una percentuale di traffico, puoi eseguire il rollback riducendo la percentuale allo 0%.

Confronto tra piano di controllo canary e cluster canary

Esistono due strategie di uso comune per le migrazioni da Istio ad Anthos Service Mesh:

  • Migrazione al piano di controllo canary: in questa strategia, abiliti Anthos Service Mesh sullo stesso cluster in cui hai attualmente installato Istio.
  • Migrazione di cluster canary: in questa strategia, crei un nuovo cluster e quindi abiliti Anthos Service Mesh.

In questo tutorial imparerai a seguire la strategia di migrazione dei cluster canary.

Costi

Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:

Al termine di questo tutorial, puoi evitare costi continui eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  4. Abilita le API richieste.

    Abilita le API

  5. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  7. Abilita le API richieste.

    Abilita le API

Avvia Cloud Shell

In questo tutorial utilizzerai Cloud Shell, che è un ambiente shell ospitato su Google Cloud che ti consente di gestire le tue risorse di Google Cloud.

Cloud Shell include gli strumenti a riga di comando Google Cloud CLI, kubectl e istioctl. L'interfaccia a riga di comando gcloud fornisce l'interfaccia a riga di comando principale per Google Cloud.

Apri una sessione di Cloud Shell nell'angolo in alto a destra di questa pagina, fai clic su , quindi su Conferma. Una sessione di Cloud Shell si apre all'interno di un frame più in basso nella pagina. Completa i comandi seguenti nella sessione di Cloud Shell.

Scarica codice di esempio

Clona i repository Git che contengono le risorse Kubernetes e Istio che utilizzerai:

  git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
  git clone https://github.com/GoogleCloudPlatform/microservices-demo.git

Configurare il cluster con Istio

Crea il cluster e installa Istio

Nella sezione, creerai il tuo cluster che utilizza Istio. In pratica, sarebbero i cluster già utilizzati.

  1. Sostituisci PROJECT_ID con il tuo ID progetto e crea un nuovo cluster:

    gcloud container clusters create cluster-with-istio \
      --project=PROJECT_ID \
      --zone=us-central1-a \
      --machine-type=e2-standard-2 --num-nodes=3
    
  2. Rinomina il contesto del cluster in modo da semplificarne l'utilizzo:

    kubectl config rename-context \
      gke_PROJECT_ID_us-central1-a_cluster-with-istio \
      cluster-with-istio
    
  3. Verifica che il contesto del cluster sia stato rinominato:

    kubectl config get-contexts --output="name"
    
  4. Installa Istio nel cluster. Per semplicità, installerai il profilo predefinito di Istio e la versione corrispondente all'installazione di istioctl.

    istioctl install
    

    Ti verrà chiesto di digitare "y" e premere Invio.

    L'output è simile al seguente:

    This will install the Istio X.Y.Z default profile with ["Istio core" "Istiod" "Ingress gateways"] components into the cluster. Proceed? (y/N)
    ✔ Istio core installed
    ✔ Istiod installed
    ✔ Ingress gateways installed
    ✔ Installation complete
    Making this installation the default for injection and validation.
    

Implementa la boutique online

  1. Eseguirai il deployment di Boutique online in uno spazio dei nomi separato chiamato onlineboutique. Crea lo spazio dei nomi:

    kubectl \
      --context cluster-with-istio \
      create namespace onlineboutique
    
  2. Esegui il deployment dei 12 servizi di Online Boutique, che include un generatore di carico che imita il traffico degli utenti:

    kubectl \
      --namespace=onlineboutique \
      --context=cluster-with-istio \
      apply -f microservices-demo/release/kubernetes-manifests.yaml
    
  3. Nel passaggio precedente è stato anche eseguito il deployment di un servizio chiamato frontend-external (di tipo LoadBalancer) a cui è stato assegnato un indirizzo IP pubblico. Tuttavia, vuoi consentire il traffico in entrata pubblico solo tramite il deployment del gateway in entrata Istio. Elimina la risorsa di servizio frontend-external:

    kubectl \
      --namespace=onlineboutique \
      --context=cluster-with-istio \
      delete service frontend-external
    
  4. Esegui il deployment di una risorsa Istio Gateway e di una risorsa Istio VirtualService per il traffico pubblico per accedere a Online Boutique:

    kubectl \
      --namespace=onlineboutique \
      --context=cluster-with-istio \
      apply -f microservices-demo/istio-manifests/frontend-gateway.yaml
    
  5. Recupera l'indirizzo IP pubblico del gateway in entrata Istio:

    kubectl \
      --namespace istio-system \
      --context=cluster-with-istio \
      get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
    
  6. Copia l'indirizzo IP pubblico del servizio istio-ingressgateway, quindi accedilo tramite il browser web. Viene visualizzata l'app di esempio Online Boutique.

Configura il nuovo cluster con Anthos Service Mesh gestito

Crea il cluster e abilita Anthos Service Mesh

In questa sezione creerai il cluster in cui eseguire la migrazione. Abiliterai Anthos Service Mesh gestito ed eseguirai il deployment di Boutique online per replicare i deployment dal cluster che utilizza Istio.

  1. Archivia il numero del progetto in una variabile di ambiente:

    export PROJECT_NUMBER=$(gcloud projects \
      describe PROJECT_ID --format='get(projectNumber)')
    
  2. Crea un nuovo cluster:

    gcloud container clusters create cluster-with-asm \
      --project=PROJECT_ID --zone=us-central1-a \
      --machine-type=e2-standard-2 --num-nodes=3 \
      --workload-pool PROJECT_ID.svc.id.goog \
      --labels mesh_id=proj-${PROJECT_NUMBER}
    
  3. Rinomina il contesto del cluster in modo da semplificarne l'utilizzo:

    kubectl config rename-context \
      gke_PROJECT_ID_us-central1-a_cluster-with-asm \
      cluster-with-asm
    
  4. Verifica che il contesto del cluster sia stato rinominato:

    kubectl config get-contexts --output="name"
    
  5. Abilita Anthos Service Mesh sul tuo progetto. Un gruppo è un raggruppamento logico di cluster Kubernetes e altre risorse che possono essere gestiti insieme.

    gcloud container fleet mesh enable --project PROJECT_ID
    

    L'output è simile al seguente:

    Waiting for Feature Service Mesh to be created...done.
    
  6. Registra il cluster nella flotta del progetto:

    gcloud container fleet memberships register cluster-with-asm-membership \
      --gke-cluster=us-central1-a/cluster-with-asm \
      --enable-workload-identity \
      --project PROJECT_ID
    

    L'output è simile al seguente:

    Waiting for membership to be created...done.
    Created a new membership [projects/your-project-id/locations/global/memberships/cluster-with-gke-membership] for the cluster [cluster-with-gke-membership]
    Generating the Connect Agent manifest...
    Deploying the Connect Agent on cluster [cluster-with-gke-membership] in namespace [gke-connect]...
    Deployed the Connect Agent on cluster [cluster-with-gke-membership] in namespace [gke-connect].
    Finished registering the cluster [cluster-with-gke-membership] with the Fleet.
    
  7. Abilita il piano di controllo gestito di Anthos Service Mesh nel cluster:

    gcloud container fleet mesh update \
      --control-plane automatic \
      --memberships cluster-with-asm-membership \
      --project PROJECT_ID
    

    L'output è simile al seguente:

    Waiting for Feature Service Mesh to be updated...done.
    
  8. Verifica che Anthos Service Mesh sia stato abilitato per il cluster e sia pronto per essere utilizzato:

    gcloud container fleet mesh describe --project PROJECT_ID
    

    Il provisioning di Anthos Service Mesh può richiedere circa 10 minuti ed essere pronto all'uso sul cluster. Se vedi i dettagli: 'Provisioning: asm-managed', dovrai eseguire di nuovo il comando precedente a intervalli di alcuni minuti finché non viene visualizzato details: 'Ready: asm-managed'.

    L'output è simile al seguente:

    createTime: '2022-07-06T01:05:39.110120474Z'
    membershipSpecs:
      projects/123456789123/locations/global/memberships/cluster-with-gke-membership:
        mesh:
          controlPlane: AUTOMATIC
    membershipStates:
      projects/123456789123/locations/global/memberships/cluster-with-gke-membership:
        servicemesh:
          controlPlaneManagement:
            details:
            - code: REVISION_READY
              details: 'Ready: asm-managed'
            state: ACTIVE
        state:
          code: OK
          description: 'Revision(s) ready for use: asm-managed.'
          updateTime: '2022-07-06T01:19:24.243993678Z'
    name: projects/your-project-id/locations/global/features/servicemesh
    resourceState:
      state: ACTIVE
    spec: {}
    state:
      state: {}
    updateTime: '2022-07-06T01:19:27.475885687Z'
    

Esegui il deployment del gateway in entrata di Anthos Service Mesh

  1. Eseguirai il deployment del gateway in entrata di Anthos Service Mesh in uno spazio dei nomi separato chiamato asm-ingress. Crea lo spazio dei nomi:

    kubectl \
      --context cluster-with-asm \
      create namespace asm-ingress
    
  2. Utilizza l'etichetta istio.io/rev=asm-managed per aggiungere lo spazio dei nomi asm-ingress al mesh di servizi e abilitare l'inserimento automatico del proxy sidecar.

    kubectl \
      --context cluster-with-asm \
      label namespace asm-ingress 'istio.io/rev=asm-managed'
    
  3. Esegui il deployment del gateway in entrata di Anthos Service Mesh:

    kubectl \
      --context cluster-with-asm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml
    kubectl \
      --context cluster-with-asm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
    

    L'output è simile al seguente:

    namespace/asm-ingress configured
    serviceaccount/asm-ingressgateway configured
    service/asm-ingressgateway configured
    deployment.apps/asm-ingressgateway configured
    gateway.networking.istio.io/asm-ingressgateway configured
    

Implementa la boutique online

  1. Eseguirai il deployment di Boutique online in uno spazio dei nomi separato chiamato onlineboutique. Crea lo spazio dei nomi:

    kubectl \
      --context cluster-with-asm \
      create namespace onlineboutique
    
  2. Utilizza l'etichetta istio.io/rev=asm-managed per aggiungere lo spazio dei nomi onlineboutique al mesh di servizi e abilitare l'inserimento automatico del proxy sidecar.

    kubectl \
      --context cluster-with-asm \
      label namespace onlineboutique 'istio.io/rev=asm-managed'
    
  3. Esegui il deployment dei 12 servizi di Boutique Online, incluso il generatore di carico che imita il traffico degli utenti:

    kubectl \
      --context cluster-with-asm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml
    kubectl \
      --context cluster-with-asm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
    
  4. Recupera l'indirizzo IP pubblico del gateway in entrata di Anthos Service Mesh:

    kubectl \
      --context cluster-with-asm \
      --namespace asm-ingress \
      get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
    
  5. Copia l'indirizzo IP pubblico del servizio asm-ingressgateway e accedi al tuo browser web. Vedrai l'app di esempio Online Boutique. Utilizzerai l'indirizzo IP pubblico nella sezione successiva, quindi copialo in una variabile di ambiente:

    export INGRESS_IP_OF_CLUSTER_WITH_ASM=$( \
      kubectl \
        --context cluster-with-asm \
        --namespace asm-ingress \
        get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \
      )
    

Testa il cluster con Anthos Service Mesh utilizzando un deployment canary

In questa sezione configurerai il cluster con Istio in modo che il 50% del traffico degli utenti verso la boutique online venga spostato sull'istanza di Boutique online nel cluster con Anthos Service Mesh. Per raggiungere questo obiettivo, esegui il deployment di due risorse Istio nel cluster con Anthos Service Mesh:

  • ServiceEntry per comunicare a Istio l'endpoint della boutique online del cluster Anthos Service Mesh
  • un servizio virtuale per comunicare al gateway Istio in entrata di suddividere il traffico 50-50.
  1. Imposta l'indirizzo IP del gateway in entrata di Anthos Service Mesh all'interno della risorsa ServiceEntry:

    sed -i "s/1.2.3.4/${INGRESS_IP_OF_CLUSTER_WITH_ASM}/" anthos-service-mesh-samples/docs/migrate-istio-to-asm/traffic-split/service-entry.yaml
    
  2. Esegui il deployment di ServiceEntry nel cluster con Istio:

    kubectl \
      --context cluster-with-istio \
      --namespace onlineboutique \
      apply -f anthos-service-mesh-samples/docs/migrate-istio-to-asm/traffic-split/service-entry.yaml
    
  3. Esegui il deployment di VirtualService nel cluster con Istio:

    kubectl \
      --context cluster-with-istio \
      --namespace onlineboutique \
      apply -f anthos-service-mesh-samples/docs/migrate-istio-to-asm/traffic-split/virtual-service.yaml
    
  4. Visita l'indirizzo IP del gateway in entrata Istio nel tuo browser web:

    kubectl \
      --context cluster-with-istio \
      --namespace istio-system \
      get service
    

    Aggiorna la home page di Online Boutique più volte e controlla il piè di pagina della pagina ogni volta. Tieni presente che il 50% delle richieste viene gestito da un pod nel cluster con Anthos Service Mesh.

Esegui la migrazione al cluster con Anthos Service Mesh

Questa sezione presuppone che tu sia il proprietario di un nome di dominio e che abbia accesso alle relative impostazioni DNS (Domain Name Server).

  1. Aggiungi un record A alle impostazioni DNS per indirizzare il nome di dominio (ad esempio example.com) all'indirizzo IP del gateway in entrata in esecuzione nel cluster con Istio.

  2. Accedi a Boutique online visitando il nome di dominio nel tuo browser web.

  3. Riduci al minimo la durata del record DNS (TTL) per assicurarti di poter ripristinare rapidamente la voce DNS se devi eseguire il rollback.

  4. Imposta il record A del tuo nome di dominio sull'indirizzo IP pubblico del gateway in entrata di Anthos Service Mesh.

  5. Una volta eseguita correttamente la migrazione, elimina il cluster con Istio:

    gcloud container clusters delete cluster-with-istio \
      --zone=us-central1-a \
      --project=PROJECT_ID
    

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina progetto

  1. In Google Cloud Console, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Elimina le risorse

Elimina il cluster con Anthos Service Mesh:

  gcloud container clusters delete cluster-with-asm \
    --zone=us-central1-a \
    --project=PROJECT_ID

Passaggi successivi