Esegui la migrazione in-cluster al cluster gestito
Questo tutorial mostra come eseguire la migrazione di un'applicazione da un cluster Google Kubernetes Engine (GKE) utilizzando Anthos Service Mesh nel cluster a un nuovo cluster utilizzando Anthos Service Mesh gestito, la rete di servizi completamente gestita e conforme a Istio per Google.
In questo tutorial, imparerai a:
- Creare un nuovo cluster Google Kubernetes Engine e installare nel cluster Anthos Service Mesh e nel gateway in entrata di Anthos Service Mesh. Questo cluster fungerà da cluster esistente da cui vuoi eseguire la migrazione.
- Esegui il deployment dell'applicazione di esempio Online Boutique nel cluster con Anthos Service Mesh nel cluster.
- Creare un altro cluster Google Kubernetes Engine, nello stesso progetto Google Cloud.
- Esegui il provisioning di Anthos Service Mesh gestito nel secondo cluster ed esegui il deployment del gateway in entrata di Anthos Service Mesh.
- Esegui il deployment di Boutique online nel cluster con Anthos Service Mesh gestito per replicare il deployment dal cluster con Anthos Service Mesh nel cluster.
- Shift il 50% del traffico di utenti dal cluster con Anthos Service Mesh nel cluster al cluster con Anthos Service Mesh gestito, utilizzando le capacità di suddivisione del traffico di Istio sul cluster con Anthos Service Mesh nel cluster.
- Completa la migrazione da Anthos Service Mesh gestito nel cluster ad Anthos Service Mesh gestito puntando la voce DNS (Domain Name System) del cluster con Anthos Service Mesh nel cluster al cluster con Anthos Service Mesh gestito.
Deployment canary
Il "deployment canary" è una tecnica utilizzata nello sviluppo del software per testare una nuova versione di alcuni software prima di rilasciarla a tutti gli utenti. Questo comporta l'aumento incrementale della percentuale di traffico inviato alla nuova versione. In questo tutorial configurerai un nuovo cluster con Anthos Service Mesh gestito e vi sposterai in modo incrementale il traffico degli utenti. Inizierai indirizzando lo 0% del traffico di utenti al nuovo cluster, quindi al 50% e, infine, al 100%. In produzione, dovresti utilizzare sempre maggiori incrementi. 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 Anthos Service Mesh nel cluster ad Anthos Service Mesh gestito:
- Migrazione al piano di controllo canary: in questa strategia, esegui il provisioning di Anthos Service Mesh gestito sullo stesso cluster in cui hai attualmente installato Anthos Service Mesh nel cluster.
- Migrazione del cluster canary: in questa strategia crei un nuovo cluster e vi eseguirai il provisioning di Anthos Service Mesh gestito.
In questo tutorial, scoprirai la strategia di migrazione ai cluster canary.
Costi
Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:
Al termine di questo tutorial, puoi evitare i costi continui eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione 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.
-
Nella console di Google Cloud Console, nella pagina del selettore dei progetti, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API richieste.
-
Nella console di Google Cloud Console, nella pagina del selettore dei progetti, seleziona o crea un progetto Google Cloud.
-
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, un ambiente shell ospitato su Google Cloud che ti consente di gestire le risorse di Google Cloud.
Cloud Shell è preinstallato con gli strumenti a riga di comando Google Cloud CLI, kubectl e istioctl. gcloud CLI 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 terminal e poi su Conferma. Una sessione di Cloud Shell si apre all'interno di un frame più in basso nella pagina. Completa i seguenti comandi nella sessione di Cloud Shell.
Scarica il codice campione.
Clona i repository Git contenenti 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
Configura il cluster con Anthos Service Mesh nel cluster
Crea il cluster e installa Anthos Service Mesh nel cluster
Nella sezione, creerai il tuo cluster che utilizza Anthos Service Mesh nel cluster. In pratica, si tratta dei cluster già in uso.
Sostituisci
PROJECT_ID
con l'ID progetto e crea un nuovo cluster:gcloud container clusters create cluster-with-in-cluster-asm \ --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 da semplificarne l'utilizzo:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-in-cluster-asm \ cluster-with-in-cluster-asm
Verifica che il contesto del cluster sia stato rinominato:
kubectl config get-contexts --output="name"
Scarica la versione che installa Anthos Service Mesh 1.15.7 nella directory di lavoro corrente:
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.15 > asmcli
Ti verrà chiesto di digitare "y" e premere Invio.
L'output è simile a:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 167k 100 167k 0 0 701k 0 --:--:-- --:--:-- --:--:-- 701k
Rendi eseguibile lo script
asmcli
:chmod +x asmcli
Installa Anthos Service Mesh nel cluster utilizzando
asmcli
:./asmcli install \ --project_id PROJECT_ID \ --cluster_name cluster-with-in-cluster-asm \ --cluster_location us-central1-a \ --output_dir . \ --enable_all \ --ca mesh_ca
Potrebbero essere necessari diversi minuti prima che lo strumento
asmcli
venga completato. Lo strumento genera messaggi informativi per seguire l'avanzamento.In caso di esito positivo, l'output è simile a:
... asmcli: Successfully installed ASM.
Esegui il deployment del gateway in entrata di Anthos Service Mesh
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-in-cluster-asm \ create namespace asm-ingress
Utilizza l'etichetta
istio.io/rev=asm-1157-23
per aggiungere lo spazio dei nomiasm-ingress
al mesh di servizi e abilitare l'inserimento automatico del proxy sidecar.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace asm-ingress istio.io/rev=asm-1157-23
L'output è simile a:
namespace/asm-ingress labeled
Esegui il deployment del gateway in entrata Anthos Service Mesh:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
L'output è simile a:
serviceaccount/asm-ingressgateway created service/asm-ingressgateway created deployment.apps/asm-ingressgateway created gateway.networking.istio.io/asm-ingressgateway created
Esegui il deployment di Boutique online
Eseguirai il deployment di Boutique online in uno spazio dei nomi separato chiamato
onlineboutique
. Crea lo spazio dei nomi:kubectl \ --context cluster-with-in-cluster-asm \ create namespace onlineboutique
Utilizza l'etichetta
istio.io/rev=asm-1157-23
per aggiungere lo spazio dei nomionlineboutique
al mesh di servizi e abilitare l'inserimento automatico del proxy sidecar.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace onlineboutique istio.io/rev=asm-1157-23
L'output è simile a:
namespace/onlineboutique labeled
Esegui il deployment dei 12 servizi di Online Boutique, incluso il generatore di carico che imita il traffico degli utenti:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Recupera l'indirizzo IP pubblico del gateway in entrata di Anthos Service Mesh:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Copia l'indirizzo IP pubblico del gateway in entrata e accedi al tuo browser web. Vedrai l'app di esempio Online Boutique.
Configura il nuovo cluster con Anthos Service Mesh gestito
Crea il cluster ed esegui il provisioning di Anthos Service Mesh gestito
In questa sezione, creerai il cluster in cui eseguirai la migrazione. Eseguirai il provisioning di Anthos Service Mesh gestito e il deployment di Boutique online per replicare i deployment dal cluster che utilizza Anthos Service Mesh nel cluster.
Archivia il numero del progetto in una variabile di ambiente:
export PROJECT_NUMBER=$(gcloud projects \ describe PROJECT_ID --format='get(projectNumber)')
Crea un nuovo cluster:
gcloud container clusters create cluster-with-managed-asm \ --project=PROJECT_ID --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool PROJECT_ID.svc.id.goog \ --labels mesh_id=proj-${PROJECT_NUMBER}
Rinomina il contesto del cluster in modo da semplificarne l'utilizzo:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-managed-asm \ cluster-with-managed-asm
Verifica che il contesto del cluster sia stato rinominato:
kubectl config get-contexts --output="name"
Abilitare Anthos Service Mesh sul parco risorse del progetto. Un parco risorse è 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 a:
Waiting for Feature Service Mesh to be created...done.
Registra il cluster nel parco risorse del progetto:
gcloud container fleet memberships register cluster-with-managed-asm-membership \ --gke-cluster=us-central1-a/cluster-with-managed-asm \ --enable-workload-identity \ --project PROJECT_ID
L'output è simile a:
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.
Abilita Anthos Service Mesh gestito sul cluster:
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-managed-asm-membership \ --project PROJECT_ID
L'output è simile a:
Waiting for Feature Service Mesh to be updated...done.
Verifica che sia stato eseguito il provisioning di Anthos Service Mesh per il cluster e che sia pronto per essere utilizzato:
gcloud container fleet mesh describe --project PROJECT_ID
Possono essere necessari circa 10 minuti prima che il servizio Anthos Service Mesh sia pronto per essere utilizzato nel cluster. Se vedi
controlPlaneManagement.state: DISABLED
ocontrolPlaneManagement.state: PROVISIONING
, dovrai eseguire nuovamente il comando precedente a intervalli di pochi minuti finché non vedicontrolPlaneManagement.state: ACTIVE
.L'output è simile a:
createTime: '2022-07-06T01:05:39.110120474Z' membershipSpecs: projects/123456789123/locations/global/memberships/cluster-with-managed-asm-membership: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/123456789123/locations/global/memberships/cluster-with-managed-asm-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 Anthos Service Mesh
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-managed-asm \ 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-managed-asm \ label namespace asm-ingress 'istio.io/rev=asm-managed'
Esegui il deployment del gateway in entrata Anthos Service Mesh:
kubectl \ --context cluster-with-managed-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-managed-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
L'output è simile a:
namespace/asm-ingress configured serviceaccount/asm-ingressgateway configured service/asm-ingressgateway configured deployment.apps/asm-ingressgateway configured gateway.networking.istio.io/asm-ingressgateway configured
Esegui il deployment di Boutique online
Eseguirai il deployment di Boutique online in uno spazio dei nomi separato chiamato
onlineboutique
. Crea lo spazio dei nomi:kubectl \ --context cluster-with-managed-asm \ create namespace onlineboutique
Utilizza l'etichetta
istio.io/rev=asm-managed
per aggiungere lo spazio dei nomionlineboutique
al mesh di servizi e abilitare l'inserimento automatico del proxy sidecar.kubectl \ --context cluster-with-managed-asm \ label namespace onlineboutique 'istio.io/rev=asm-managed'
Esegui il deployment dei 12 servizi di Online Boutique, incluso il generatore di carico che imita il traffico degli utenti:
kubectl \ --context cluster-with-managed-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-managed-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Recupera l'indirizzo IP pubblico del gateway in entrata di Anthos Service Mesh:
kubectl \ --context cluster-with-managed-asm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
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_MANAGED_ASM=$( \ kubectl \ --context cluster-with-managed-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 Anthos Service Mesh nel cluster in modo che il 50% del traffico degli utenti verso la boutique online venga spostato sull'istanza di Boutique Online sul cluster con Anthos Service Mesh gestito. A questo scopo, esegui il deployment di due risorse Istio nel cluster con Anthos Service Mesh nel cluster:
- ServiceAccess a comunicare ad Anthos Service Mesh l'endpoint della Boutique online del cluster Anthos Service Mesh gestito
- un servizio VirtualService per comunicare al gateway in entrata Anthos Service Mesh di suddividere il traffico 50-50.
Imposta l'indirizzo IP del gateway in entrata del cluster Anthos 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 Anthos Service Mesh nel cluster:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
Esegui il deployment di
VirtualService
nel cluster con Anthos Service Mesh nel cluster:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service-in-cluster-asm.yaml
Accedi all'indirizzo IP del gateway in entrata del cluster con Anthos Service Mesh nel cluster:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get service
Aggiornate più volte la home page di Boutique online e controllate ogni volta il piè di pagina della pagina. Nota che il 50% delle richieste viene gestito da un pod nel cluster con Anthos Service Mesh gestito.
Esegui la migrazione al cluster con Anthos Service Mesh gestito
Questa sezione presuppone che tu sia il proprietario di un nome di dominio e che tu abbia accesso alle relative impostazioni 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 sul cluster con Anthos Service Mesh nel cluster.
Accedi a Boutique online visitando il nome di dominio nel tuo browser web.
Riduci al minimo la durata (TTL) del record DNS per assicurarti di poter ripristinare rapidamente la voce DNS se devi eseguire il rollback.
Imposta il record A del tuo nome di dominio sull'indirizzo IP pubblico del gateway in entrata del cluster con Anthos Service Mesh gestito.
Una volta eseguita la migrazione, elimina il cluster con Anthos Service Mesh nel cluster:
gcloud container clusters delete cluster-with-in-cluster-asm \ --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
- 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 Anthos Service Mesh gestito:
gcloud container clusters delete cluster-with-managed-asm \
--zone=us-central1-a \
--project=PROJECT_ID
Passaggi successivi
- Scopri di più su Anthos Service Mesh gestito.
- Scopri di più sulle best practice per la sicurezza di Anthos Service Mesh.