Questa guida descrive come configurare Cloud Service Mesh gestito su un cluster Autopilot di Google Kubernetes Engine (GKE). Cloud Service Mesh è un mesh di servizi completamente gestito basato su Istio.
Questo tutorial mostra come configurare un mesh di servizi pronto per la produzione in esecuzione su un singolo cluster GKE Autopilot con impostazioni predefinite. Ti consigliamo di consultare anche la guida completa al provisioning di Cloud Service Mesh quando progetti il tuo ambiente.
Vantaggi dell'esecuzione di Cloud Service Mesh gestito con GKE Autopilot
Quando utilizzi GKE in modalità Autopilot, Google gestisce automaticamente la configurazione e la gestione del cluster. La modalità Autopilot semplifica l'esperienza di gestione di un cluster e ti consente di concentrarti sulle tue applicazioni. Allo stesso modo, Cloud Service Mesh gestito è un mesh di servizi completamente gestito che puoi eseguire il provisioning seguendo alcuni passaggi.
- Esegui il provisioning di Cloud Service Mesh gestito utilizzando l'API Fleet, senza bisogno di strumenti lato client come
istioctl
. - Cloud Service Mesh inserisce automaticamente i proxy sidecar nei carichi di lavoro senza che sia necessario concedere privilegi elevati ai container.
- Puoi visualizzare dashboard dettagliate per il tuo mesh e i tuoi servizi senza alcuna configurazione aggiuntiva e poi utilizzare queste metriche per configurare gli obiettivi del livello di servizio (SLO) e gli avvisi per monitorare l'integrità delle tue applicazioni.
- Viene eseguito automaticamente l'upgrade del piano di controllo di Cloud Service Mesh gestito per assicurarti di ricevere le patch e le funzionalità di sicurezza più recenti
- Il piano di dati gestito di Cloud Service Mesh esegue automaticamente l'upgrade dei proxy sidecar nei tuoi carichi di lavoro, in modo che tu non debba riavviare i servizi quando sono disponibili upgrade dei proxy e patch di sicurezza.
- Cloud Service Mesh è un prodotto supportato e può essere configurato utilizzando le API Istio open source standard. Consulta le funzionalità supportate.
Obiettivi
- Crea un cluster GKE Autopilot
- Esegui il provisioning di Cloud Service Mesh gestito utilizzando l'API Fleet
- Esegui il deployment di gateway di ingresso mesh in uno spazio dei nomi dedicato
- Deployment di un'applicazione di esempio
- Configura Cloud Service Mesh per applicare l'autenticazione TLS reciproca (mTLS) rigorosa per la comunicazione tra servizi
- Visualizza le dashboard di Cloud Service Mesh e verifica che i servizi si connettano con mTLS
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.
Prima di iniziare
Cloud Shell è preinstallato con il software di cui hai bisogno per questo tutorial, tra cui kubectl
, gcloud CLI, Helm e Terraform. Se non utilizzi Cloud Shell, devi installare gcloud CLI.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/container.containerAdmin, roles/gkehub.admin, roles/serviceusage.serviceUsageAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Configura l'ambiente
Puoi configurare il tuo ambiente utilizzando gcloud CLI o Terraform.
gcloud
Imposta le variabili di ambiente:
PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
Abilita l'API Mesh:
gcloud services enable mesh.googleapis.com
L'abilitazione di mesh.googleapis.com consente le seguenti API:
API Finalità Può essere disattivato meshconfig.googleapis.com
Cloud Service Mesh utilizza l'API Mesh Configuration per inoltrare i dati di configurazione dal tuo mesh a Google Cloud. Inoltre, l'attivazione dell'API Mesh Configuration ti consente di accedere alle pagine di Cloud Service Mesh nella console Google Cloud e di utilizzare la CA di Cloud Service Mesh. No meshca.googleapis.com
Relativa all'autorità di certificazione Cloud Service Mesh utilizzata da Cloud Service Mesh gestito. No container.googleapis.com
Obbligatorio per creare cluster Google Kubernetes Engine (GKE). No gkehub.googleapis.com
Obbligatorio per gestire la mesh come parco risorse. No monitoring.googleapis.com
Obbligatorio per acquisire la telemetria per i carichi di lavoro mesh. No stackdriver.googleapis.com
Obbligatorio per utilizzare l'interfaccia utente dei servizi. No opsconfigmonitoring.googleapis.com
Obbligatorio per utilizzare l'interfaccia utente dei servizi per i cluster al di fuori di Google Cloud. No connectgateway.googleapis.com
Obbligatorio affinché il control plane di Cloud Service Mesh gestito possa accedere ai carichi di lavoro di mesh. Sì* trafficdirector.googleapis.com
Consente un piano di controllo gestito altamente disponibile e scalabile. Sì* networkservices.googleapis.com
Consente un piano di controllo gestito altamente disponibile e scalabile. Sì* networksecurity.googleapis.com
Consente un piano di controllo gestito altamente disponibile e scalabile. Sì*
Terraform
gcloud config set project PROJECT_ID
GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
export GOOGLE_CLOUD_PROJECT
Crea un cluster GKE
Crea un cluster GKE in modalità Autopilot.
gcloud
Crea un cluster registrato come membro di un parco risorse:
gcloud container clusters create-auto asm-cluster \ --location="us-central1" \ --enable-fleet
Verifica che il cluster sia registrato nel parco risorse:
gcloud container fleet memberships list
L'output è simile al seguente:
NAME: asm-cluster EXTERNAL_ID: LOCATION: us-central1
Prendi nota del nome del gruppo, poiché ti servirà per configurare Cloud Service Mesh.
Terraform
Per creare un cluster GKE, puoi utilizzare la google_container_cluster
risorsa. Imposti il blocco fleet
in modo che il
cluster venga aggiunto a un parco risorse al momento della creazione.
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
Esegui il provisioning di Cloud Service Mesh gestito
Esegui il provisioning di Cloud Service Mesh gestito utilizzando la funzionalità servicemesh
nell'appartenenza al parco risorse per il tuo cluster.
gcloud
Abilita la funzionalità del parco risorse Cloud Service Mesh nel progetto:
gcloud container fleet mesh enable
Attiva la gestione automatica della mesh:
gcloud container fleet mesh update \ --management=automatic \ --memberships=MEMBERSHIP_NAME \ --location=us-central1
Sostituisci
MEMBERSHIP_NAME
con il nome dell'appartenenza elencato quando hai verificato che il cluster è registrato al parco risorse.
Terraform
Per abilitare l'API Mesh, puoi utilizzare la risorsa google_project_service
.
Utilizza le risorse google_gke_hub_feature
e
google_gke_hub_feature_membership
per configurare Cloud Service Mesh gestito nel tuo cluster.
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
Verificare che il piano di controllo sia attivo
Attendi che controlPlaneManagement.state
sia ACTIVE
. L'operazione potrebbe richiedere fino a 15 minuti.
watch -n 30 gcloud container fleet mesh describe
L'output è simile al seguente:
membershipSpecs:
projects/746296320118/locations/us-central1/memberships/asm-cluster:
mesh:
management: MANAGEMENT_AUTOMATIC
membershipStates:
projects/746296320118/locations/us-central1/memberships/asm-cluster:
servicemesh:
controlPlaneManagement:
details:
- code: REVISION_READY
details: 'Ready: asm-managed'
state: ACTIVE
dataPlaneManagement:
details:
- code: PROVISIONING
details: Service is provisioning.
state: PROVISIONING
state:
code: OK
description: 'Revision(s) ready for use: asm-managed.'
La sezione dataPlaneManagement
rimane nello stato PROVISIONING
finché non esegui il deployment del gateway di ingresso, perché i cluster Autopilot non eseguono il provisioning di alcun nodo finché non esegui il deployment di un workload.
Esegui il deployment di un gateway di ingresso mesh
In questa sezione esegui il deployment di un gateway di ingresso mesh per gestire il traffico in entrata per l'applicazione di esempio. Una gateway di ingresso è un bilanciatore del carico che opera all'esterno del mesh e riceve connessioni HTTP/TCP in entrata o in uscita.
Esegui il deployment del gateway in uno spazio dei nomi dedicato e etichetta il deployment per assicurarti che il gateway possa essere gestito in sicurezza e sottoposto ad upgrade automatico dal piano di controllo di Cloud Service Mesh.
Scarica le credenziali per poter accedere al cluster:
gcloud container clusters get-credentials asm-cluster --location=us-central1
Crea uno spazio dei nomi per il deployment del gateway:
kubectl create namespace bank-gateways
Aggiungi un'etichetta allo spazio dei nomi in modo che il control plane di Cloud Service Mesh inietti automaticamente la configurazione del gateway nel deployment.
kubectl label namespace bank-gateways istio-injection=enabled
Esegui il deployment del gateway in entrata nello spazio dei nomi:
Helm
helm repo add istio https://istio-release.storage.googleapis.com/charts helm repo update helm install --wait --namespace bank-gateways \ --set resources.requests.cpu=250m \ --set resources.requests.memory=512Mi \ --set resources.requests.ephemeral-storage=1Gi \ --set resources.limits.cpu=250m \ --set resources.limits.memory=512Mi \ --set resources.limits.ephemeral-storage=1Gi \ istio-ingressgateway istio/gateway
kubectl
kubectl apply -n bank-gateways \ -k https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages/tree/main/samples/gateways/istio-ingressgateway kubectl -n bank-gateway wait "deployment/istio-ingressgateway" \ --for=condition=available --timeout=240s
Assicurati di impostare richieste di risorse adeguate quando esegui il deployment in un ambiente di produzione. GKE Autopilot considera solo i valori delle risorse impostati in
requests
e non inlimits
. Il progetto Istio pubblica informazioni su prestazioni e scalabilità.
Esegui il deployment dell'applicazione di esempio
Crea uno spazio dei nomi Kubernetes per il deployment:
kubectl create namespace bank-sample
Aggiungi un'etichetta allo spazio dei nomi in modo che Cloud Service Mesh inietti automaticamente i proxy sidecar nei pod di esempio:
kubectl label namespace bank-sample istio-injection=enabled
Esegui il deployment dell'applicazione di esempio:
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git kubectl apply -n bank-sample -f bank-of-anthos/extras/jwt/jwt-secret.yaml kubectl apply -n bank-sample -f bank-of-anthos/kubernetes-manifests/
Attendi che l'applicazione sia pronta. L'operazione richiederà diversi minuti.
watch kubectl -n bank-sample get pods
Quando l'applicazione è pronta, l'output è simile al seguente:
NAME READY STATUS RESTARTS AGE accounts-db-0 2/2 Running 0 2m16s balancereader-5c695f78f5-x4wlz 2/2 Running 0 3m8s contacts-557fc79c5-5d7fg 2/2 Running 0 3m7s frontend-7dd589c5d7-b4cgq 2/2 Running 0 3m7s ledger-db-0 2/2 Running 0 3m6s ledgerwriter-6497f5cf9b-25c6x 2/2 Running 0 3m5s loadgenerator-57f6896fd6-lx5df 2/2 Running 0 3m5s transactionhistory-6c498965f-tl2sk 2/2 Running 0 3m4s userservice-95f44b65b-mlk2p 2/2 Running 0 3m4s
Crea le risorse Istio
Gateway
eVirtualService
per esporre l'applicazione dietro il gateway di ingresso:kubectl apply -n bank-sample -f bank-of-anthos/extras/istio/frontend-ingress.yaml
Ottieni un link all'applicazione di esempio:
INGRESS_HOST=$(kubectl -n bank-gateways get service istio-ingressgateway \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo "http://$INGRESS_HOST"
In un browser, segui il link per aprire l'applicazione di esempio. Accedi con il nome utente e la password predefiniti per visualizzare l'applicazione.
Applicare TLS reciproco
Assicurati che la modalità TLS reciproca (mTLS) RISTRICTIVA sia attivata. Applica un criterio PeerAuthentication
predefinito per il mesh nello spazio dei nomi istio-system.
Salva il seguente manifest come
mesh-peer-authn.yaml
:apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "default" namespace: "istio-system" spec: mtls: mode: STRICT
Applica il manifest al cluster:
kubectl apply -f mesh-peer-authn.yaml
Puoi eseguire l'override di questa configurazione creando risorse PeerAuthentication
in spazi dei nomi specifici.
Esplorare le dashboard di Cloud Service Mesh
Nella console Google Cloud, vai a Cloud Service Mesh per visualizzare le dashboard per il tuo mesh:
Seleziona il progetto dall'elenco a discesa nella barra dei menu.
Viene visualizzata una tabella di panoramica con tutti i microservizi del tuo mesh e una visualizzazione grafica delle connessioni tra i microservizi. Per ogni microservizio, la tabella mostra tre dei "segnali d'oro" della SRE:
- Traffico: richieste al secondo
- Tasso di errore: una percentuale
- Latenza - millisecondi
Queste metriche si basano sul traffico effettivo gestito dai microservizi. Il traffico di test costante viene inviato automaticamente al servizio
frontend
da un clientloadgenerator
di cui è stato eseguito il deployment nell'ambito dell'applicazione di esempio. Cloud Service Mesh invia automaticamente metriche, log e (facoltativamente) tracce a Google Cloud Observability.Fai clic sul servizio
frontend
nella tabella per visualizzare una dashboard di panoramica del servizio. Vengono visualizzate altre metriche per il servizio e una visualizzazione delle connessioni in entrata e in uscita. Puoi anche creare un scopo del livello di servizio (SLO) per il monitoraggio e l'invio di avvisi sul servizio.
Verificare che mTLS sia abilitato
Fai clic sul link alla sicurezza
nel riquadro per visualizzare una panoramica della sicurezza per il servizio frontend
.
La tabella e la visualizzazione mostrano un'icona lucchetto verde per ciascuna delle connessioni in entrata e in uscita tra i microservizi. Questa icona indica che la connessione utilizza mTLS per l'autenticazione e la crittografia.
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.
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial:
Elimina il progetto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Elimina le singole risorse
Se hai utilizzato un progetto esistente e non vuoi eliminarlo, elimina le singole risorse.
gcloud
Elimina l'applicazione di esempio e i gateway:
kubectl delete namespace bank-sample kubectl delete namespace bank-gateways
Elimina il cluster GKE:
gcloud container clusters delete --region us-central1 asm-cluster --quiet
Terraform
Elimina le risorse che hai creato con Terraform:
terraform destroy