Esegui la migrazione da Istio 1.11 o versioni successive a Cloud Service Mesh
Questo tutorial mostra come eseguire la migrazione di un'applicazione da una Cluster Google Kubernetes Engine (GKE) che utilizza Istio in un nuovo cluster utilizzando Cloud Service Mesh: il mesh di servizi Google completamente gestito e conforme a Istio.
In questo tutorial imparerai a:
- Crea un nuovo cluster Google Kubernetes Engine e installa Istio e Istio gateway in entrata nel cluster. Questo cluster agirà come cluster da cui vuoi migrare.
- Esegui il deployment Negozio online di esempio sul cluster con Istio.
- Creare un altro cluster Google Kubernetes Engine nello stesso progetto Google Cloud.
- Abilita Cloud Service Mesh gestito sul secondo cluster ed esegui il deployment Gateway in entrata di Cloud Service Mesh.
- Esegui il deployment di Online Boutique nel cluster con Cloud Service Mesh per replicare dal cluster con Istio.
- Shift il 50% del traffico degli utenti dal cluster con Istio a quello con Cloud Service Mesh, utilizzando le funzionalità di suddivisione del traffico di Istio sul cluster con Istio.
- Completa la migrazione da Istio a Cloud Service Mesh puntando il dominio la voce DNS (Name System) del cluster con Istio al cluster con Cloud Service Mesh.
Deployment canary
"Deployment canary" è una tecnica utilizzata nello sviluppo di software per testare una nuova di un software prima di rilasciarla a tutti gli utenti. it comporta l'aumento incrementale della percentuale di traffico inviato al nuovo completamente gestita. In questo tutorial configurerai un nuovo cluster con di Cloud Service Mesh e di trasferire in modo incrementale il traffico degli utenti al suo interno. Inizierai con indirizzare lo 0% del traffico di utenti al nuovo cluster, quindi il 50% e, infine, il 100%. In produzione, dovresti usare incrementi più piccoli e più numerosi. Se in qualsiasi momento noterai che il nuovo cluster non è in grado di gestire una percentuale del traffico, puoi eseguire il rollback riducendo la percentuale allo 0%.
Piano di controllo canary e cluster canary
Esistono due strategie di uso comune per le migrazioni da Istio a Cloud Service Mesh gestito:
- Migrazione del piano di controllo canary: in questa strategia, esegui il provisioning Cloud Service Mesh gestito sullo stesso cluster in cui Istio è installato.
- Migrazione di cluster canary: in questa strategia, creerai un nuovo cluster e quindi esegui il provisioning di Cloud Service Mesh gestito.
In questo tutorial, seguirai la strategia di migrazione del cluster canary.
Costi
Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:
Al termine del tutorial, puoi evitare i costi continui eliminando le risorse che hai creato. Per maggiori informazioni, vedi Pulizia.
Prima di iniziare
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API richieste.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API richieste.
Avvia Cloud Shell
In questo tutorial utilizzerai Cloud Shell, una shell ospitato su Google Cloud che ti consente di gestire dell'accesso a specifiche risorse Google Cloud.
Cloud Shell è preinstallato Google Cloud CLI kubectl e istioctl a riga di comando. gcloud CLI fornisce l'interfaccia a riga di comando principale per Google Cloud.
Apri una sessione di Cloud Shell dall'angolo in alto a destra di questo fai clic su terminal e poi su Accetta. Si apre una sessione di Cloud Shell all'interno di un frame più in basso sulla pagina. Completa i seguenti comandi in Cloud Shell durante la sessione.
Scarica il codice campione.
Clona i repository Git contenenti le risorse Kubernetes e Istio utilizzerà:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
Configura il cluster con Istio
Crea il cluster e installa Istio
Nella sezione, creerai il tuo cluster che utilizza Istio. In pratica, questo i cluster che stai già utilizzando.
Sostituisci
PROJECT_ID
con 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
Rinomina il contesto del cluster in modo che sia più facile da utilizzare:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-istio \ cluster-with-istio
Verifica che il contesto del cluster sia stato rinominato:
kubectl config get-contexts --output="name"
Installa Istio sul cluster. Per semplicità, installerai il token predefinito profilo di Istio e la versione che corrisponde all'installazione di
istioctl
.istioctl install
Ti verrà chiesto di digitare "y" e premi Invio.
L'output è simile a questo:
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.
Deployment di Boutique online
Distribuirai Online Boutique in uno spazio dei nomi separato
onlineboutique
. Crea lo spazio dei nomi:kubectl \ --context cluster-with-istio \ create namespace onlineboutique
Esegui il deployment dei 12 servizi di Online Boutique, che include un generatore di carico che che imitano il traffico degli utenti:
kubectl \ --namespace=onlineboutique \ --context=cluster-with-istio \ apply -f microservices-demo/release/kubernetes-manifests.yaml
Il passaggio precedente ha eseguito anche il deployment di un servizio chiamato
frontend-external
(di tipoLoadBalancer
) a cui viene assegnato un indirizzo IP esterno. Tuttavia, Voglio consentire il traffico in entrata pubblico solo attraverso il gateway in entrata Istio e deployment continuo. Elimina la risorsa di serviziofrontend-external
:kubectl \ --namespace=onlineboutique \ --context=cluster-with-istio \ delete service frontend-external
Esegui il deployment di una risorsa Istio
Gateway
e di una risorsa IstioVirtualService
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
Ottieni l'indirizzo IP esterno del gateway in entrata Istio:
kubectl \ --namespace istio-system \ --context=cluster-with-istio \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Copia l'indirizzo IP esterno del servizio
istio-ingressgateway
, quindi per accedervi tramite il browser web. Vedrai l'esempio di Boutique online dell'app.
Configura il nuovo cluster con Cloud Service Mesh gestito
Crea il cluster ed esegui il provisioning di Cloud Service Mesh gestito
In questa sezione creerai il cluster in cui eseguirai la migrazione. Potrai eseguire il provisioning di Cloud Service Mesh gestito ed eseguire il deployment di Online Boutique per di replicare i deployment dal cluster che utilizza Istio.
Crea un nuovo cluster:
gcloud container clusters create cluster-with-csm \ --project=PROJECT_ID --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool PROJECT_ID.svc.id.goog
Rinomina il contesto del cluster in modo che sia più facile da utilizzare:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-csm \ cluster-with-csm
Verifica che il contesto del cluster sia stato rinominato:
kubectl config get-contexts --output="name"
Abilita Cloud Service Mesh nel parco risorse del tuo progetto. R fleet è un'entità logica di cluster Kubernetes e altre risorse che possono essere gestite in sinergia.
gcloud container fleet mesh enable --project PROJECT_ID
L'output è simile a questo:
Waiting for Feature Service Mesh to be created...done.
Registra il cluster nel parco risorse del progetto:
gcloud container fleet memberships register cluster-with-csm-membership \ --gke-cluster=us-central1-a/cluster-with-csm \ --enable-workload-identity \ --project PROJECT_ID
L'output è simile a questo:
Waiting for membership to be created...done. Finished registering to the Fleet.
Abilita Cloud Service Mesh gestito sul cluster:
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-csm-membership \ --project PROJECT_ID
L'output è simile a questo:
Waiting for Feature Service Mesh to be updated...done.
Verifica che sia stato eseguito il provisioning di Cloud Service Mesh gestito per il cluster e pronto per essere utilizzato:
gcloud container fleet mesh describe --project PROJECT_ID
Potrebbero essere necessari circa 10 minuti prima che Cloud Service Mesh esegua il provisioning pronti per essere usati sul cluster. Se vedi
controlPlaneManagement.state: DISABLED
ocontrolPlaneManagement.state: PROVISIONING
, dovrai eseguire nuovamente il comando precedente a intervalli di alcuni minuticontrolPlaneManagement.state: ACTIVE
.L'output è simile a questo:
createTime: '2022-07-06T01:05:39.110120474Z' membershipSpecs: projects/123456789123/locations/global/memberships/cluster-with-csm-membership: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/123456789123/locations/global/memberships/cluster-with-csm-membership: servicemesh: controlPlaneManagement: details: - code: REVISION_READY details: 'Ready: asm-managed' state: ACTIVE dataPlaneManagement: details: - code: OK details: Service is running. 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 Cloud Service Mesh
Eseguirai il deployment del gateway in entrata di Cloud Service Mesh in una chiamato
asm-ingress
. Crea lo spazio dei nomi:kubectl \ --context cluster-with-csm \ create namespace asm-ingress
Utilizza l'etichetta
istio.io/rev=asm-managed
per aggiungere lo spazio dei nomiasm-ingress
al mesh di servizi e abilitare l'inserimento automatico del proxy sidecar.kubectl \ --context cluster-with-csm \ label namespace asm-ingress 'istio.io/rev=asm-managed'
Esegui il deployment di Cloud Service Mesh Gateway in entrata:
kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
L'output è simile a questo:
namespace/asm-ingress configured serviceaccount/asm-ingressgateway configured service/asm-ingressgateway configured deployment.apps/asm-ingressgateway configured gateway.networking.istio.io/asm-ingressgateway configured
Deployment di Boutique online
Distribuirai Online Boutique in uno spazio dei nomi separato
onlineboutique
. Crea lo spazio dei nomi:kubectl \ --context cluster-with-csm \ create namespace onlineboutique
Utilizza l'etichetta
istio.io/rev=asm-managed
per aggiungereonlineboutique
al mesh di servizi e abilitare l'inserimento automatico del proxy sidecar.kubectl \ --context cluster-with-csm \ label namespace onlineboutique 'istio.io/rev=asm-managed'
Esegui il deployment dei 12 servizi di Online Boutique, compreso il generatore di carico che che imitano il traffico degli utenti:
kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Ottieni l'indirizzo IP esterno del gateway in entrata di Cloud Service Mesh:
kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Copia l'indirizzo IP esterno del servizio
asm-ingressgateway
e accedi tramite il browser web. Vedrai l'app di esempio Online Boutique. Userai l'indirizzo IP esterno nella prossima sezione, quindi copialo variabile di ambiente:export INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM=$( \ kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \ )
Testa il cluster con Cloud Service Mesh utilizzando un deployment canary
In questa sezione configurerai il cluster con Istio in modo che Il 50% del traffico di utenti verso Online Boutique viene spostato all'istanza di Online Boutique Boutique sul cluster con Cloud Service Mesh gestito. A questo scopo, devi eseguire il deployment due risorse Istio al cluster con Istio:
- una ServiceEntry per comunicare a Istio il mesh di servizi Cloud gestito endpoint Online Boutique del cluster
- a VirtualService per indicare al gateway in entrata Istio di suddividere il traffico traffico 50-50.
Imposta l'indirizzo IP del gateway in entrata del cluster Cloud Service Mesh gestito all'interno della risorsa
ServiceEntry
:sed -i "s/1.2.3.4/${INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM}/" anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
Esegui il deployment di
ServiceEntry
nel cluster con Istio:kubectl \ --context cluster-with-istio \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
Esegui il deployment di
VirtualService
nel cluster con Istio:kubectl \ --context cluster-with-istio \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service.yaml
Visita l'indirizzo IP del gateway in entrata del cluster con Istio, nel tuo browser web:
kubectl \ --context cluster-with-istio \ --namespace istio-system \ get service
Aggiorna più volte la home page di Boutique online e controlla il piè di pagina di pagina ogni volta. Come puoi notare, il 50% delle richieste viene gestito da un pod il cluster con Cloud Service Mesh gestito.
Esegui la migrazione al cluster con Cloud Service Mesh gestito
Questa sezione presuppone che tu possieda un nome di dominio e abbia accesso al relativo DNS (Domain Name Server).
Aggiungi un record A alle impostazioni DNS per puntare il nome di dominio (ad esempio example.com) all'indirizzo IP del gateway in entrata in esecuzione sul cluster con Istio.
Accedi a Online Boutique visitando il nome di dominio nel tuo browser web.
Riduci al minimo la durata (TTL) del record DNS per poter ripristinare rapidamente Voce DNS se è necessario eseguire il rollback.
Imposta il record A del tuo nome di dominio sull'indirizzo IP esterno del gateway in entrata del cluster con Cloud Service Mesh gestito.
Se la migrazione è riuscita, 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 usati in questo tutorial, elimina il progetto che contiene le risorse oppure il progetto ed eliminare le singole risorse.
Elimina progetto
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- 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 Cloud Service Mesh gestito:
gcloud container clusters delete cluster-with-managed-asm \
--zone=us-central1-a \
--project=PROJECT_ID
Passaggi successivi
- Informazioni su Cloud Service Mesh gestito.
- Informazioni su Best practice per la sicurezza di Cloud Service Mesh.