Migrazione da Istio su GKE a Cloud Service Mesh
Questa guida mostra come eseguire l'upgrade di un cluster Google Kubernetes Engine (GKE) con Istio su Google Kubernetes Engine (Istio su GKE) versione 1.4 o 1.6 (beta) a Cloud Service Mesh gestito con il piano di controllo gestito da Google e l'autorità di certificazione Cloud Service Mesh.
Prerequisiti
Per completare questa guida, sono necessari i seguenti prerequisiti:
Un cluster GKE con Istio on GKE abilitato. Se hai più cluster GKE, segui gli stessi passaggi per tutti i cluster.
Istio on GKE deve essere la versione 1.4 o 1.6.
Assicurati di eseguire GKE versione 1.17.17-gke.3100+, 1.18.16-gke.1600+, 1.19.8-gke.1600+ o successive.
Il cluster GKE deve essere in esecuzione in una di queste località.
L'utente o il service account che esegue questo script richiede le autorizzazioni IAM documentate in Configurazione del progetto.
Questa guida è stata testata su Cloud Shell, pertanto ti consigliamo di utilizzare Cloud Shell per eseguire i passaggi descritti.
Obiettivi
- Esegui il deployment del control plane Cloud Service Mesh gestito da Google nel canale normale. Questa guida è specifica per il canale regolare. I canali stabile o rapido richiedono istruzioni leggermente modificate. Per saperne di più sui canali di rilascio, visita questo link.
- Esegui la migrazione delle configurazioni Istio a Cloud Service Mesh.
- Configura l'autorità di certificazione Cloud Service Mesh.
- Esegui la migrazione delle applicazioni a Cloud Service Mesh.
- Esegui l'upgrade di
istio-ingressgatewayda Istio on GKE a Cloud Service Mesh. - Finalizza la migrazione di Cloud Service Mesh o esegui il rollback a Istio su GKE.
Configura l'ambiente
Per configurare l'ambiente:
Nella console Google Cloud , attiva Cloud Shell.
Nella parte inferiore della pagina della console Google Cloud viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI e Google Cloud CLI già installati e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
Crea le variabili di ambiente utilizzate in questa guida:
# Enter your project ID export PROJECT_ID=PROJECT_ID # Copy and paste the following gcloud config set project ${PROJECT_ID} export PROJECT_NUM=$(gcloud projects describe ${PROJECT_ID} --format='value(projectNumber)') export CLUSTER_1=GKE_CLUSTER_NAME export CLUSTER_1_LOCATION=GKE_CLUSTER_REGION_OR_ZONE export SHELL_IP=$(curl ifconfig.me) # This is required for private clusters with `master-authorized-networks` enabled.Crea una cartella
WORKDIR. Tutti i file associati a questa guida vengono inseriti inWORKDIRin modo che tu possa eliminarliWORKDIRal termine.mkdir -p addon-to-asm && cd addon-to-asm && export WORKDIR=`pwd`Crea un file
KUBECONFIGper questa guida. Puoi anche utilizzare il fileKUBECONFIGesistente che contiene il contesto del cluster per il cluster GKE di cui eseguire la migrazione a Cloud Service Mesh.touch asm-kubeconfig && export KUBECONFIG=`pwd`/asm-kubeconfigRecupera le credenziali per il cluster GKE e memorizza il contesto in una variabile:
Cluster di zona
gcloud container clusters get-credentials ${CLUSTER_1} \ --zone=${CLUSTER_1_LOCATION} export CLUSTER_1_CTX=gke_${PROJECT_ID}_${CLUSTER_1_LOCATION}_${CLUSTER_1}Cluster a livello di regione
gcloud container clusters get-credentials ${CLUSTER_1} \ --region=${CLUSTER_1_LOCATION} export CLUSTER_1_CTX=gke_${PROJECT_ID}_${CLUSTER_1_LOCATION}_${CLUSTER_1}I cluster devono essere registrati in un parco risorse. Questo passaggio può essere eseguito separatamente prima dell'installazione o come parte dell'installazione passando il flag --fleet-id e uno dei flag --enable-all o --enable-registration.
Nel progetto deve essere abilitata la funzionalità Service Mesh. Puoi abilitarlo come parte dell'installazione passando uno dei flag --enable-all o --enable-registration oppure eseguendo il seguente comando prima dell'installazione:
gcloud container hub mesh enable --project=FLEET_PROJECT_IDdove FLEET_PROJECT_ID è l'ID progetto del progetto host del parco risorse.
Passaggio facoltativo
Se il cluster è cluster privato (con master-authorized-networks abilitato),
aggiungi il tuo $SHELL_IP alla lista consentita master-authorized-networks.
Se hai già accesso al cluster, questo passaggio potrebbe non essere necessario.
Cluster di zona
export SHELL_IP=$(curl ifconfig.me)
gcloud container clusters update ${CLUSTER_1} \
--zone=${CLUSTER_1_LOCATION} \
--enable-master-authorized-networks \
--master-authorized-networks ${SHELL_IP}/32
Cluster a livello di regione
export SHELL_IP=$(curl ifconfig.me)
gcloud container clusters update ${CLUSTER_1} \
--region=${CLUSTER_1_LOCATION} \
--enable-master-authorized-networks \
--master-authorized-networks ${SHELL_IP}/32
Installa Cloud Service Mesh
In questa sezione, esegui il deployment di Cloud Service Mesh con il control plane gestito da Google del canale regolare sul cluster GKE. Questo control plane viene inizialmente implementato insieme a un secondo (o canary) control plane.
Scarica l'ultima versione dello script che installa Cloud Service Mesh nella directory di lavoro attuale e rendi eseguibile lo script:
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli > asmcli chmod +x asmcliPer configurare il cluster GKE, esegui lo script di installazione per installare Cloud Service Mesh con il control plane gestito da Google del canale regolare:
./asmcli install \ -p ${PROJECT_ID} \ -l ${CLUSTER_1_LOCATION} \ -n ${CLUSTER_1} \ --fleet_id ${FLEET_PROJECT_ID} \ --managed \ --verbose \ --output_dir ${CLUSTER_1} \ --enable-all \ --channel regularIl completamento di questo passaggio può richiedere alcuni minuti.
Copia
istioctlnella cartellaWORKDIR:cp ./${CLUSTER_1}/istioctl ${WORKDIR}/.
Nella sezione successiva, scarica ed esegui lo script migrate_addon per facilitare
la migrazione a Cloud Service Mesh. L'utilità della riga di comando istioctl
deve trovarsi nella stessa cartella dello script migrate_addon. Utilizzi la
cartella WORKDIR sia per l'utilità a riga di comando istioctl sia per lo
script migrate_addon.
Esegui la migrazione delle configurazioni a Cloud Service Mesh
In questa sezione, esegui la migrazione delle configurazioni di Istio on GKE a Cloud Service Mesh. Lo script guidato identifica le configurazioni che possono e non possono essere migrate.
Scarica lo strumento di migrazione e rendilo eseguibile:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-packages/main/scripts/migration/migrate-addon > ${WORKDIR}/migrate_addon chmod +x ${WORKDIR}/migrate_addonDisattiva il webhook di convalida della bozza. Questo passaggio è necessario per eseguire la migrazione di alcune configurazioni 1.4 a Cloud Service Mesh. Rispondi
Ya entrambe le domande:${WORKDIR}/migrate_addon -d tmpdir --command disable-galley-webhookL'output è simile al seguente:
tmpdir directory not present. Create directory? Continue? [Y/n] Y Disabling the Istio validation webhook... Continue? [Y/n] Y Running: kubectl get clusterrole istio-galley-istio-system -n istio-system -o yaml Running: kubectl patch clusterrole -n istio-system istio-galley-istio-system --type=json -p=[{"op": "replace", "path": "/rules/2/verbs/0", "value": "get"}] clusterrole.rbac.authorization.k8s.io/istio-galley-istio-system patched Running: kubectl get ValidatingWebhookConfiguration istio-galley --ignore-not-found Running: kubectl delete ValidatingWebhookConfiguration istio-galley --ignore-not-found validatingwebhookconfiguration.admissionregistration.k8s.io "istio-galley" deletedVerifica ed esegui manualmente la migrazione della configurazione. Questo passaggio consente di identificare alcune delle configurazioni che devono essere migrate manualmente prima di migrare i carichi di lavoro al control plane gestito da Google.
${WORKDIR}/migrate_addon -d tmpdir --command config-checkL'output è simile al seguente:
Installing the authentication CR migration tool... OK Checking for configurations that will need to be explicitly migrated... No resources found
Migrazione delle configurazioni personalizzate
Potresti dover eseguire manualmente la migrazione delle configurazioni personalizzate prima di eseguire la migrazione a Cloud Service Mesh. Lo script precedente identifica le configurazioni personalizzate e stampa le informazioni su ciò che è richiesto. Queste personalizzazioni sono le seguenti:
I filtri Envoy personalizzati rilevati non sono supportati da Cloud Service Mesh. Rimuovili, se possibile. I filtri Envoy non sono attualmente supportati nel control plane gestito da Google.
Rilevato certificato del plug-in personalizzato. I certificati del plug-in non verranno migrati a Cloud Service Mesh. Se i certificati dei plug-in vengono utilizzati con Istio su GKE, questi certificati non vengono utilizzati dopo la migrazione dei workload al control plane gestito da Google. Tutti i workload utilizzano certificati firmati dall'autorità di certificazione Google Cloud Service Mesh. I certificati dei plug-in non sono supportati dall'autorità di certificazione Cloud Service Mesh. Questo messaggio è informativo e non è richiesta alcuna azione.
Sono state rilevate policy di sicurezza che non è stato possibile eseguire la migrazione. <Error reason>. In genere, l'operazione non riesce a causa di norme AuthZ alpha che devono essere migrate manualmente. Per ulteriori informazioni e contesto su come eseguire la migrazione delle policy, consulta Eseguire la migrazione della policy di sicurezza pre-Istio 1.4 Alpha alle API attuali. Per ulteriori informazioni sul messaggio di errore, consulta security-policy-migrate.
È stata rilevata una configurazione di VirtualService potenzialmente incompatibile. <Specific deprecated config>. Devi aggiornare le seguenti configurazioni
VirtualService:- L'utilizzo di
appendHeadersnon è supportato. Utilizza invecespec.http.headers. - L'utilizzo di
websocketUpgradenon è necessario. Questa opzione è attiva per impostazione predefinita. - Sostituisci il campo
abort.percentconabort.percentage.
- L'utilizzo di
Rilevata installazione personalizzata di risorse del mixer che non è stato possibile migrare. Richiede la migrazione manuale a telemetryv2. Se sono configurate policy del mixer personalizzate oltre all'installazione predefinita di Istio su GKE, devi eseguire la migrazione manuale di queste policy a Telemetry v2. Per saperne di più su come farlo, consulta Personalizzazione delle metriche Istio.
Il deployment <deploymentName> potrebbe essere un gateway personalizzato. Esegui la migrazione manualmente. Devi eseguire manualmente la migrazione di tutti i deployment del gateway diversi da
istio-ingressgateway(che viene installato per impostazione predefinita). Per informazioni su come eseguire l'upgrade dei gateway per il control plane gestito da Google, consulta Configurazione del control plane gestito da Google.
Per eseguire la migrazione delle configurazioni:
Prima di procedere al passaggio 2, esegui manualmente la migrazione di tutte le configurazioni personalizzate (ad eccezione dell'ultima configurazione elencata).
Utilizza lo strumento di migrazione per eseguire la migrazione delle configurazioni che possono essere migrate automaticamente (o ignorate).
${WORKDIR}/migrate_addon -d tmpdir --command migrate-configsL'output è simile al seguente:
Converting authentication CRs... 2021/06/25 20:44:58 found root namespace: istio-system 2021/06/25 20:44:59 SUCCESS converting policy /default Running: kubectl apply --dry-run=client -f beta-policy.yaml peerauthentication.security.istio.io/default created (dry run) Applying converted security policies in tmpdir/beta-policy.yaml... Continue? [Y/n] Y Running: kubectl apply -f beta-policy.yaml peerauthentication.security.istio.io/default created OK
Applica l'attendibilità radice dell'autorità di certificazione Cloud Service Mesh. Ciò ti consente di eseguire la migrazione dall'attuale CA Citadel all'autorità di certificazione Cloud Service Mesh senza tempi di inattività per le tue applicazioni.
${WORKDIR}/migrate_addon -d tmpdir --command configure-mesh-caL'output è simile al seguente:
Configuring Istio on GKE to trust Anthos Service Mesh... Continue? [Y/n] Y Running: kubectl get cm -n istio-system istio-asm-managed -oyaml Running: kubectl -n istio-system apply -f - secret/meshca-root created Running: kubectl get cm istio -n istio-system -o yaml Running: kubectl get cm istio -n istio-system -o yaml Running: kubectl replace -f - configmap/istio replaced Running: kubectl get deploy istio-pilot -n istio-system -o yaml Running: kubectl patch deploy istio-pilot -n istio-system -p={"spec":{"template":{"spec":{"containers":[{ "name":"discovery", "image":"gcr.io/gke-release/istio/pilot:1.4.10-gke.12", "env":[{"name":"PILOT_SKIP_VALIDATE_TRUST_DOMAIN","value":"true"}] }]}}}} deployment.apps/istio-pilot patched Running: kubectl get deploy istio-citadel -n istio-system -o yaml Running: kubectl patch deploy istio-citadel -n istio-system -p={"spec":{"template":{"spec":{ "containers":[{ "name":"citadel", "args": ["--append-dns-names=true", "--grpc-port=8060", "--citadel-storage-namespace=istio-system", "--custom-dns-names=istio-pilot-service-account.istio-system:istio-pilot.istio-system", "--monitoring-port=15014", "--self-signed-ca=true", "--workload-cert-ttl=2160h", "--root-cert=/var/run/root-certs/meshca-root.pem"], "volumeMounts": [{"mountPath": "/var/run/root-certs", "name": "meshca-root", "readOnly": true}] }], "volumes": [{"name": "meshca-root", "secret":{"secretName": "meshca-root"}}] }}}} deployment.apps/istio-citadel patched OK Waiting for root certificate to distribute to all pods. This will take a few minutes... ASM root certificate not distributed to asm-system, trying again later ASM root certificate not distributed to asm-system, trying again later ASM root certificate distributed to namespace asm-system ASM root certificate distributed to namespace default ASM root certificate distributed to namespace istio-operator ASM root certificate not distributed to istio-system, trying again later ASM root certificate not distributed to istio-system, trying again later ASM root certificate distributed to namespace istio-system ASM root certificate distributed to namespace kube-node-lease ASM root certificate distributed to namespace kube-public ASM root certificate distributed to namespace kube-system ASM root certificate distributed to namespace online-boutique Waiting for proxies to pick up the new root certificate... OK Configuring Istio Addon 1.6 to trust Anthos Service Mesh... Running: kubectl get cm -n istio-system env-asm-managed -ojsonpath={.data.TRUST_DOMAIN} --ignore-not-found Running: kubectl get cm istio-istio-1611 -n istio-system -o yaml Running: kubectl replace -f - configmap/istio-istio-1611 replaced Running: kubectl patch -n istio-system istiooperators.install.istio.io istio-1-6-11-gke-0 --type=merge istiooperator.install.istio.io/istio-1-6-11-gke-0 patched Running: kubectl -n istio-system get secret istio-ca-secret -ojsonpath={.data.ca-cert\.pem} Running: kubectl -n istio-system patch secret istio-ca-secret secret/istio-ca-secret patched Running: kubectl patch deploy istiod-istio-1611 -n istio-system deployment.apps/istiod-istio-1611 patched Running: kubectl rollout status -w deployment/istiod-istio-1611 -n istio-system Waiting for deployment "istiod-istio-1611" rollout to finish: 1 old replicas are pending termination... deployment "istiod-istio-1611" successfully rolled out Running: kubectl apply -f - -n istio-system envoyfilter.networking.istio.io/trigger-root-cert created Waiting for proxies to pick up the new root certificate... Running: kubectl delete envoyfilter trigger-root-cert -n istio-system OKQuesto passaggio richiede alcuni minuti per la distribuzione del certificato radice di Cloud Service Mesh a tutti gli spazi dei nomi. Attendi il completamento dello script con un messaggio
OK.
Il passaggio precedente esegue le seguenti operazioni:
- Installa la radice di attendibilità dell'autorità di certificazione Cloud Service Mesh per tutti i workload nel cluster.
Modifica le configurazioni dei deployment del control plane
istio-pilot,istiodeistio-citadel. Le modifiche includono quanto segue:- Aggiornamento delle immagini alle build più recenti.
- Disattivazione della verifica
trust-domaintramite l'impostazionePILOT_SKIP_VALIDATE_TRUST_DOMAIN=true. - Aggiunta della radice di attendibilità dell'autorità di certificazione Cloud Service Mesh a
istio-citadelper distribuireConfigMapa tutti gli spazi dei nomi. - Aggiunta della radice di attendibilità dell'autorità di certificazione Cloud Service Mesh a
istio-ca-secretper distribuire il certificato radice.
Archivia i manifest di configurazione precedenti in
tmpdir.Fornisce i passaggi per la funzione di rollback (documentata in un secondo momento).
Migra i workload a Cloud Service Mesh
In questa sezione, esegui la migrazione dei workload in esecuzione su Istio on GKE a Cloud Service Mesh. Dopo la migrazione, verifica che i proxy sidecar (Cloud Service Mesh) corretti vengano inseriti in ogni pod e che l'applicazione funzioni come previsto.
Se esegui questa procedura su un cluster esistente, seleziona uno spazio dei nomi da migrare.
Definisci lo spazio dei nomi come variabile. Questo spazio dei nomi viene migrato a Cloud Service Mesh:
export NAMESPACE=NAMESPACE_NAME
Per eseguire la migrazione dei workload a Cloud Service Mesh, devi rietichettare lo spazio dei nomi per Cloud Service Mesh. L'etichettatura dello spazio dei nomi consente a Cloud Service Mesh di inserire automaticamente i sidecar in tutti i workload. Per etichettare lo spazio dei nomi, esegui il comando seguente, impostando l'etichetta su
asm-managed:kubectl --context=${CLUSTER_1_CTX} label namespace ${NAMESPACE} istio.io/rev=asm-managed istio-injection- --overwriteEsegui un riavvio in sequenza di tutti i deployment nello spazio dei nomi:
kubectl --context=${CLUSTER_1_CTX} rollout restart deployment -n ${NAMESPACE}L'output è simile al seguente:
deployment.apps/deploymentName1 restarted deployment.apps/deploymentName2 restarted ...
Assicurati che tutti i pod vengano riavviati e siano in esecuzione con due container per pod:
kubectl --context=${CLUSTER_1_CTX} -n ${NAMESPACE} get podsL'output è simile al seguente:
NAME READY STATUS RESTARTS AGE deploymentName1-PodName 2/2 Running 0 101s deploymentName2-PodName 2/2 Running 2 100s ...
Un buon modo per verificare questo passaggio è controllare il
AGEdei pod. Assicurati che il valore sia breve, ad esempio pochi minuti.Controlla la versione del proxy sidecar Envoy da uno qualsiasi dei pod di qualsiasi deployment nello spazio dei nomi per verificare che ora siano stati implementati i proxy Envoy di Cloud Service Mesh:
export POD_NAME=NAME_OF_ANY_POD_IN_NAMESPACE kubectl --context=${CLUSTER_1_CTX} get pods ${POD_NAME} -n ${NAMESPACE} -o json | jq '.status.containerStatuses[].image'L'output è simile al seguente:
"gcr.io/gke-release/asm/proxyv2:1.11.5-asm.3" "appContainerImage"
Verifica e testa le applicazioni dopo il riavvio.
kubectl --context=${CLUSTER_1_CTX} -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}'(Facoltativo) Se vuoi che Google gestisca gli upgrade dei proxy, attiva Piano dati gestito da Google.
Visualizzare lo stato della migrazione
Esegui questo comando per visualizzare lo stato della migrazione:
kubectl get cm/asm-addon-migration-state -n istio-system -ojsonpath={.data}
L'output indica se le migrazioni sono completate, in attesa o non riuscite:
{"migrationStatus":"SUCCESS"}
{"migrationStatus":"PENDING"}
{"migrationStatus":"MIGRATION_CONFIG_ERROR"}
{"migrationStatus":"CONTROLPLANE_PROVISION_ERROR"}
Se migrationStatus restituisce SUCCESS, l'upgrade del control plane a Cloud Service Mesh è riuscito. Per aggiornare manualmente il data plane, completa i passaggi
descritti in Eseguire la migrazione dei workload.
Se migrationStatus restituisce uno stato diverso da SUCCESS, puoi scegliere di:
- Non intraprendere alcuna azione aggiuntiva se l'errore di migrazione non influisce sui tuoi workload Istio su GKE esistenti. Altrimenti, esegui il rollback, se necessario.
- Aggiorna le configurazioni personalizzate nel cluster ed esegui di nuovo la migrazione manualmente se
migrationStatusmostraMIGRATION_CONFIG_ERROR.
Puoi visualizzare le metriche del control plane in Metrics Explorer dopo la migrazione riuscita. Consulta verify_control_plane_metrics
Accedere alle dashboard di Cloud Service Mesh
In questa sezione, vai alle dashboard di Cloud Service Mesh e assicurati di ricevere i segnali d'oro per tutti i servizi. Dovresti anche essere in grado di visualizzare la topologia dell'applicazione.
Nella console Google Cloud , vai alla pagina Cloud Service Mesh.
Dovresti essere in grado di visualizzare le metriche e la topologia dei tuoi servizi.
Per scoprire di più sulle dashboard di Cloud Service Mesh, consulta Esplorare Cloud Service Mesh nella console Google Cloud .
Completare una migrazione riuscita
In questa sezione, finalizzi la migrazione di Istio su GKE a Cloud Service Mesh. Prima di procedere con questa sezione, assicurati di voler procedere con Cloud Service Mesh. Questa sezione ti aiuta anche a liberare spazio dagli artefatti di Istio su GKE. Se vuoi eseguire il rollback a Istio su GKE, vai alla sezione successiva.
Sostituisci
istio-ingressgateway(parte di Istio standard su GKE) con il gateway con controllo delle versioni gestito da Google:${WORKDIR}/migrate_addon -d tmpdir --command replace-gatewayL'output è simile al seguente:
Replacing the ingress gateway with an Anthos Service Mesh gateway... Continue? [Y/n] Y Running: kubectl label namespace istio-system istio-injection- istio.io/rev- --overwrite label "istio.io/rev" not found. namespace/istio-system labeled Running: kubectl apply -f - serviceaccount/asm-ingressgateway created deployment.apps/asm-ingressgateway created role.rbac.authorization.k8s.io/asm-ingressgateway created rolebinding.rbac.authorization.k8s.io/asm-ingressgateway created Running: kubectl wait --for=condition=available --timeout=600s deployment/asm-ingressgateway -n istio-system deployment.apps/asm-ingressgateway condition met Scaling the Istio ingress gateway to zero replicas... Continue? [Y/n] Y Running: kubectl -n istio-system patch hpa istio-ingressgateway --patch {"spec":{"minReplicas":1}} horizontalpodautoscaler.autoscaling/istio-ingressgateway patched (no change) Running: kubectl -n istio-system scale deployment istio-ingressgateway --replicas=0 deployment.apps/istio-ingressgateway scaled OKRiconfigura il webhook in modo che utilizzi il control plane gestito da Google. Tutti i carichi di lavoro iniziano utilizzando il control plane gestito da Google:
${WORKDIR}/migrate_addon -d tmpdir --command replace-webhookL'output è simile al seguente:
Configuring sidecar injection to use Anthos Service Mesh by default... Continue? [Y/n] Y Running: kubectl patch mutatingwebhookconfigurations istio-sidecar-injector --type=json -p=[{"op": "replace", "path": "/webhooks"}] mutatingwebhookconfiguration.admissionregistration.k8s.io/istio-sidecar-injector patched Revision tag "default" created, referencing control plane revision "asm-managed". To enable injection using this revision tag, use 'kubectl label namespace <NAMESPACE> istio.io/rev=default' OKRietichetta tutti gli spazi dei nomi con l'etichetta Cloud Service Mesh ed esegui un riavvio in sequenza di tutti i workload per inserirli nel control plane gestito da Google:
export NAMESPACE=NAMESPACE_NAME \ kubectl --context=${CLUSTER_1_CTX} label namespace ${NAMESPACE} istio.io/rev=asm-managed istio-injection- --overwrite` kubectl --context=${CLUSTER_1_CTX} rollout restart deployment -n ${NAMESPACE}Puoi ignorare il messaggio
"istio-injection not found"nell'output. Ciò significa che lo spazio dei nomi non aveva in precedenza l'etichettaistio-injection, che dovresti aspettarti nelle nuove installazioni di Cloud Service Mesh o nei nuovi deployment. Poiché l'inserimento automatico non va a buon fine se uno spazio dei nomi ha sia l'etichettaistio-injectionche quella di revisione, tutti i comandikubectl labelnella documentazione di Istio su GKE includono la rimozione dell'etichettaistio-injection.Finalizza la migrazione eseguendo questo comando:
${WORKDIR}/migrate_addon -d tmpdir --command write-markerL'output è simile al seguente:
Current migration state: SUCCESS Running: kubectl apply -f - configmap/asm-addon-migration-state created OK
Disattiva Istio su GKE eseguendo il seguente comando:
Cluster di zona
gcloud beta container clusters update ${CLUSTER_1} \ --project=$PROJECT_ID \ --zone=${CLUSTER_1_LOCATION} \ --update-addons=Istio=DISABLEDCluster a livello di regione
gcloud beta container clusters update ${CLUSTER_1} \ --project=$PROJECT_ID \ --region=${CLUSTER_1_LOCATION} \ --update-addons=Istio=DISABLEDLibera spazio nelle configurazioni eseguendo il comando seguente:
${WORKDIR}/migrate_addon -d tmpdir --command cleanupL'output è simile al seguente:
Cleaning up old resources... Running: kubectl get cm -n istio-system asm-addon-migration-state -ojsonpath={.data.migrationStatus} Will delete IstioOperator/istio-1-6-11-gke-0.istio-system Will delete ServiceAccount/istio-citadel-service-account.istio-system ... Will delete DestinationRule/istio-policy.istio-system Will delete DestinationRule/istio-telemetry.istio-system Will delete Secret/istio-ca-secret.istio-system Deleting resources previously listed... Continue? [Y/n] Y Running: kubectl delete IstioOperator istio-1-6-11-gke-0 -n istio-system --ignore-not-found istiooperator.install.istio.io "istio-1-6-11-gke-0" deleted Running: kubectl delete ServiceAccount istio-citadel-service-account -n istio-system --ignore-not-found serviceaccount "istio-citadel-service-account" deleted-ingressgateway -n istio-system --ignore-not-found ... Running: kubectl delete Secret istio-ca-secret -n istio-system --ignore-not-found secret "istio-ca-secret" deleted Running: kubectl delete -n istio-system jobs -lk8s-app=istio,app=security job.batch "istio-security-post-install-1.4.10-gke.8" deletedAssicurati che i deployment e i servizi Istio su GKE siano stati rimossi correttamente dal cluster:
kubectl --context=${CLUSTER_1_CTX} -n istio-system get deployments,servicesL'output è simile al seguente:
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/asm-ingressgateway 1/1 1 1 10m NAME TYPE CLUSTER-IP EXTERNAL-IP AGE PORT(S) service/istio-ingressgateway LoadBalancer 10.64.5.208 34.139.100.237 95m 15020:31959/TCP,80:30971/TCP,443:31688/TCP,31400:31664/TCP,15029:32493/TCP,15030:31722/TCP,15031:30198/TCP,15032:31910/TCP,15443:31222/TCP
Vengono visualizzati solo il servizio e il deployment del gateway in entrata Cloud Service Mesh.
Complimenti. Hai eseguito la migrazione da Istio su GKE a Cloud Service Mesh con il control plane gestito da Google e l'autorità di certificazione Cloud Service Mesh senza tempi di inattività per le tue applicazioni.
Esegui il rollback delle modifiche
In questa sezione, se non vuoi procedere con Cloud Service Mesh, puoi rollback le modifiche di Cloud Service Mesh. Al termine di questa sezione, i tuoi carichi di lavoro tornano a Istio on GKE.
Esegui il rollback delle modifiche del webhook di modifica:
${WORKDIR}/migrate_addon -d tmpdir --command rollback-mutatingwebhookEtichetta nuovamente gli spazi dei nomi per utilizzare l'inserimento di sidecar Istio su GKE anziché Cloud Service Mesh eseguendo il seguente comando:
per gli spazi dei nomi con workload della versione 1.4:
export NAMESPACE=NAMESPACE_NAME kubectl --context=${CLUSTER_1_CTX} label namespace ${NAMESPACE} istio.io/rev- istio-injection=enabled --overwriteper gli spazi dei nomi con workload della versione 1.6:
export NAMESPACE=NAMESPACE_NAME kubectl --context=${CLUSTER_1_CTX} label namespace ${NAMESPACE} istio.io/rev=istio-1611 --overwriteEsegui un riavvio in sequenza di tutti i deployment nello spazio dei nomi:
kubectl --context=${CLUSTER_1_CTX} rollout restart deployment -n ${NAMESPACE}Attendi qualche minuto e assicurati che tutti i pod siano in esecuzione:
kubectl --context=${CLUSTER_1_CTX} -n ${NAMESPACE} get podsL'output è simile al seguente:
NAME READY STATUS RESTARTS AGE deploymentName1-PodName 2/2 Running 0 101s deploymentName2-PodName 2/2 Running 2 100s ...
Verifica la versione del proxy Envoy del file collaterale da uno qualsiasi dei pod per confermare di aver eseguito il deployment dei proxy Envoy di Istio on GKE v1.4:
export POD_NAME=NAME_OF_ANY_POD_IN_NAMESPACE kubectl --context=${CLUSTER_1_CTX} get pods ${POD_NAME} -n ${NAMESPACE} -o json | jq '.status.containerStatuses[].image'L'output è simile al seguente:
"gke.gcr.io/istio/proxyv2:1.4.10-gke.8" "appContainerImage"
o
"gke.gcr.io/istio/proxyv2:1.6.14-gke.4" "appContainerImage"
Verifica e testa le applicazioni dopo il riavvio.
Esegui il rollback delle modifiche all'autorità di certificazione Cloud Service Mesh:
${WORKDIR}/migrate_addon -d tmpdir --command rollback-mesh-caRiabilita il webhook Istio Galley:
${WORKDIR}/migrate_addon -d tmpdir --command enable-galley-webhook
Hai eseguito il rollback delle modifiche a Istio su GKE.
Esegui il deployment di Online Boutique
In questa sezione, esegui il deployment di un'applicazione di esempio basata su microservizi denominata Online Boutique nel cluster GKE. Online Boutique viene implementato in uno spazio dei nomi abilitato per Istio. Verifica che l'applicazione funzioni e che Istio su GKE inserisca i proxy sidecar in ogni pod.
Se hai già cluster esistenti con applicazioni, puoi saltare la creazione di un nuovo spazio dei nomi e il deployment di Online Boutique. Puoi seguire la stessa procedura per tutti gli spazi dei nomi nella sezione Migra i carichi di lavoro a Cloud Service Mesh.
Esegui il deployment di Online Boutique nel cluster GKE:
kpt pkg get \ https://github.com/GoogleCloudPlatform/microservices-demo.git/release \ online-boutique kubectl --context=${CLUSTER_1_CTX} create namespace online-boutique kubectl --context=${CLUSTER_1_CTX} label namespace online-boutique istio-injection=enabled kubectl --context=${CLUSTER_1_CTX} -n online-boutique apply -f online-boutiqueAttendi che tutti i deployment siano pronti:
kubectl --context=${CLUSTER_1_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment adservice kubectl --context=${CLUSTER_1_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment checkoutservice kubectl --context=${CLUSTER_1_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment currencyservice kubectl --context=${CLUSTER_1_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment emailservice kubectl --context=${CLUSTER_1_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment frontend kubectl --context=${CLUSTER_1_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment paymentservice kubectl --context=${CLUSTER_1_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment productcatalogservice kubectl --context=${CLUSTER_1_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment shippingservice kubectl --context=${CLUSTER_1_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment cartservice kubectl --context=${CLUSTER_1_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment loadgenerator kubectl --context=${CLUSTER_1_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment recommendationserviceAssicurati che ci siano due container per pod: il container dell'applicazione e il proxy sidecar Istio che Istio su GKE inserisce automaticamente nel pod:
kubectl --context=${CLUSTER_1_CTX} -n online-boutique get podsL'output è simile al seguente:
NAME READY STATUS RESTARTS AGE adservice-7cbc9bd9-t92k4 2/2 Running 0 3m21s cartservice-d7db78c66-5qfmt 2/2 Running 1 3m23s checkoutservice-784bfc794f-j8rl5 2/2 Running 0 3m26s currencyservice-5898885559-lkwg4 2/2 Running 0 3m23s emailservice-6bd8b47657-llvgv 2/2 Running 0 3m27s frontend-764c5c755f-9wf97 2/2 Running 0 3m25s loadgenerator-84cbcd768c-5pdbr 2/2 Running 3 3m23s paymentservice-6c676df669-s779c 2/2 Running 0 3m25s productcatalogservice-7fcf4f8cc-hvf5x 2/2 Running 0 3m24s recommendationservice-79f5f4bbf5-6st24 2/2 Running 0 3m26s redis-cart-74594bd569-pfhkz 2/2 Running 0 3m22s shippingservice-b5879cdbf-5z7m5 2/2 Running 0 3m22s
Puoi anche controllare la versione del proxy sidecar Envoy da uno qualsiasi dei pod per verificare di aver eseguito il deployment di Istio su proxy Envoy GKE v1.4:
export FRONTEND_POD=$(kubectl get pod -n online-boutique -l app=frontend --context=${CLUSTER_1_CTX} -o jsonpath='{.items[0].metadata.name}') kubectl --context=${CLUSTER_1_CTX} get pods ${FRONTEND_POD} -n online-boutique -o json | jq '.status.containerStatuses[].image'L'output è simile al seguente:
"gke.gcr.io/istio/proxyv2:1.4.10-gke.8" "gcr.io/google-samples/microservices-demo/frontend:v0.3.4"
Accedi all'applicazione andando all'indirizzo IP del servizio
istio-ingressgateway:kubectl --context=${CLUSTER_1_CTX} -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
Domande frequenti
Questa sezione descrive le domande frequenti e le relative risposte sulla migrazione da Istio su GKE a Cloud Service Mesh.
Perché viene eseguita la migrazione da Istio su GKE a Cloud Service Mesh?
Istio su Google Kubernetes Engine è una funzionalità beta che esegue il deployment di Istio gestito da Google su un cluster Google Kubernetes Engine (GKE). Istio on GKE esegue il deployment di una versione non supportata (Istio versione 1.4). Per fornirti le funzionalità più recenti del service mesh e un'implementazione del mesh di servizi supportata, stiamo eseguendo l'upgrade di tutti gli utenti di Istio su GKE a Cloud Service Mesh.
Cloud Service Mesh è il prodotto di mesh di servizi gestito e supportato di Google basato sulle API Istio. Cloud Service Mesh è a Istio ciò che GKE è a Kubernetes. Poiché Cloud Service Mesh si basa sulle API Istio, puoi continuare a utilizzare le configurazioni Istio quando esegui la migrazione a Cloud Service Mesh. Inoltre, non esiste alcun vincolo al fornitore proprietario.
Cloud Service Mesh offre i seguenti vantaggi:
- Un mesh di servizi gestito e supportato da Google.
- API Istio senza vincoli al fornitore.
- Dashboard di telemetria e gestione degli SLO pronte all'uso senza la necessità di gestire soluzioni di terze parti aggiuntive.
- Opzioni dell'autorità di certificazione ospitata da Google.
- Integrazione con Google Cloud il networking e Identity-Aware Proxy (IAP).
- Supporto di piattaforme ibride e multi-cloud.
Per scoprire di più sulle funzionalità di Cloud Service Mesh, consulta la pagina Funzionalità supportate del control plane gestito da Google.
Sono previsti tempi di inattività associati a questa migrazione?
Lo script di migrazione è progettato per evitare tempi di inattività. Lo script installa
Cloud Service Mesh come
control plane canary
insieme al control plane Istio esistente. istio-ingressgateway viene
eseguito l'upgrade in loco. Poi rietichetti gli spazi dei nomi abilitati a Istio per iniziare
a utilizzare Cloud Service Mesh con l'autorità di certificazione Cloud Service Mesh.
Assicurati di aver configurato correttamente i PodDisruptionBudgets per le tue applicazioni in modo da non riscontrare tempi di inattività delle applicazioni. Anche se puoi evitare i tempi di inattività, se esegui questa migrazione in autonomia, ti consigliamo di eseguirla durante un periodo di manutenzione pianificata. Le migrazioni gestite da Google vengono eseguite durante un periodo di manutenzione di GKE. Assicurati che i tuoi cluster GKE abbiano periodi di manutenzione configurati.
È previsto un costo per l'utilizzo di Cloud Service Mesh?
Esistono due modi per utilizzare Cloud Service Mesh su GKE:
Se hai un abbonamento a GKE Enterprise, Cloud Service Mesh è incluso nel tuo abbonamento GKE Enterprise.
Se non hai un abbonamento a GKE Enterprise, puoi utilizzare Cloud Service Mesh come prodotto autonomo su GKE (su Google Cloud). Per saperne di più, consulta i dettagli sui prezzi di Cloud Service Mesh.
Esistono funzionalità o configurazioni non supportate nell'ultima versione di Cloud Service Mesh?
Lo script controlla tutte le configurazioni Istio ed esegue la migrazione all'ultima versione di Cloud Service Mesh. Esistono alcune configurazioni che potrebbero richiedere passaggi aggiuntivi per la migrazione da Istio versione 1.4 a Cloud Service Mesh versione 1.10. Lo script esegue un controllo della configurazione e ti informa se alcune configurazioni richiedono passaggi aggiuntivi.
La migrazione modifica le mie attuali configurazioni di Istio?
No, le configurazioni Istio funzionano su Cloud Service Mesh senza richiedere modifiche.
Dopo la migrazione a Cloud Service Mesh, posso eseguire di nuovo la migrazione a Istio?
Sì, non è richiesto alcun impegno per l'utilizzo di Cloud Service Mesh. Puoi disinstallare Cloud Service Mesh e reinstallare Istio in qualsiasi momento.
Se la migrazione non va a buon fine, è possibile eseguire il rollback?
Sì, lo script ti consente di eseguire il rollback alla versione precedente di Istio on GKE.
Quale versione di Istio posso migrare utilizzando questo script?
Lo script ti aiuta a eseguire la migrazione da Istio on GKE versione 1.4 a Cloud Service Mesh versione 1.10. Lo script convalida la versione di Istio durante la fase di pre-migrazione e ti informa se la tua versione di Istio può essere migrata.
Come posso ricevere ulteriore assistenza per questa migrazione?
Il nostro team di assistenza è felice di aiutarti. Puoi aprire una richiesta di assistenza dalla console Google Cloud . Per saperne di più, consulta Gestire le richieste di assistenza.
Che cosa succede se non eseguo la migrazione a Cloud Service Mesh?
I tuoi componenti Istio continuano a funzionare, ma Google non gestisce più l'installazione di Istio. Non ricevi più aggiornamenti automatici e l'installazione non è garantita man mano che la versione del cluster Kubernetes viene aggiornata.
Per saperne di più, consulta Supporto di Istio.