Crea un cluster GKE con Cloud Service Mesh e gcloud CLI
In questo tutorial, eseguirai il provisioning di Cloud Service Mesh gestito utilizzando Google Kubernetes Engine (GKE) Flotta su un nuovo cluster pubblico GKE. Questo tutorial illustra:
- Configurazione del progetto Google Cloud.
- Creazione di un cluster GKE con il numero minimo di vCPU come richiesto da Cloud Service Mesh.
- Registrazione del cluster GKE nel Floet del progetto.
- Provisioning di Cloud Service Mesh gestito sul cluster tramite l'API Fleet.
- Eseguire il deployment di un gateway in entrata per esporre l'applicazione.
- Il deployment di un'applicazione di esempio in modo da poter visualizzare i dati di telemetria sul Dashboard di Cloud Service Mesh nella console Google Cloud.
- Esposizione e accesso all'applicazione di esempio.
API Fleet
Questa guida presuppone che tu abbia familiarità con
Parchi risorse, che
raggruppamenti logici di cluster GKE e altre risorse che possono
gestiti insieme. Un parco risorse è un concetto di GKE, non un servizio Kubernetes
concetto. La registrazione di un cluster in un parco risorse consente di eseguire il provisioning
Cloud Service Mesh su quel cluster utilizzando
Comando gcloud container fleet mesh update
.
L'utilizzo dei parchi risorse è abilitato dall'API Fleet (gkehub.googleapis.com
), che
che attivi quando inizi questo tutorial.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Al termine di questa guida rapida, puoi evitare di continuare a fatturare eliminando in un cluster Kubernetes. Per maggiori informazioni, vedi Pulizia.
Prima di iniziare
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, Fleet (GKE Hub), and Cloud Service Mesh APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, Fleet (GKE Hub), and Cloud Service Mesh APIs.
- Prendi nota dei tuoi progetto ID.
Installa gli strumenti necessari
Puoi eseguire lo strumento su Cloud Shell o sul tuo computer locale. Cloud Shell preinstalla tutti gli strumenti necessari.
Cloud Shell
Cloud Shell esegue il provisioning Macchina virtuale (VM) Compute Engine g1-small con un sistema operativo Linux basato su Debian. I vantaggi dell'utilizzo di Cloud Shell:
Cloud Shell include
gcloud
,kubectl
,git
e gli altri strumenti a riga di comando di cui hai bisogno.La directory $HOME di Cloud Shell ha 5 GB di spazio di archiviazione permanente.
Puoi scegliere tra editor di testo:
Editor di codice, a cui puoi accedere tramite facendo clic su edit nella parte superiore dello finestra di Cloud Shell.
Emacs, Vim o Nano, a cui si accede dalla riga di comando in Cloud Shell.
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Computer locale
Assicurati di aver installato i seguenti utensili:
Esegui l'autenticazione con Google Cloud CLI:
gcloud auth login --project PROJECT_ID
Aggiorna i componenti:
gcloud components update
Crea un cluster GKE
Esegui questo comando per creare il cluster con il numero minimo di vCPU richieste da Cloud Service Mesh. Nel comando, sostituisci i segnaposto con le seguenti informazioni:
- CLUSTER_NAME: il nome del tuo cluster. Il nome può
contenere solo caratteri alfanumerici minuscoli e
-
, deve iniziare con una lettera e terminare con un carattere alfanumerico e non deve superare i 40 caratteri. - PROJECT_ID: l'ID progetto che costituirà il cluster in cui è stato creato.
- CLUSTER_LOCATION: il
zona per il cluster, ad esempio
us-central1-a
.
gcloud container clusters create CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION \ --machine-type=e2-standard-4 \ --num-nodes=2 \ --workload-pool=PROJECT_ID.svc.id.goog
La creazione del cluster richiede diversi minuti. Mentre il cluster creato, il comando
gcloud
visualizza quanto segue:Creating cluster CLUSTER_NAME in CLUSTER_LOCATION...working...
L'output previsto per una creazione riuscita è simile al seguente:
Creating cluster CLUSTER_NAME in CLUSTER_LOCATION...done. Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/CLUSTER_LOCATION/clusters/CLUSTER_NAME]. To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/CLUSTER_LOCATION/CLUSTER_NAME?project=PROJECT_ID kubeconfig entry generated for CLUSTER_NAME. NAME: CLUSTER_NAME LOCATION: CLUSTER_LOCATION MASTER_VERSION: 1.20.10-gke.1600 MASTER_IP: 198.51.100.1 MACHINE_TYPE: e2-standard-4 NODE_VERSION: 1.20.10-gke.1600 NUM_NODES: 2 STATUS: RUNNING
- CLUSTER_NAME: il nome del tuo cluster. Il nome può
contenere solo caratteri alfanumerici minuscoli e
Scarica credenziali di autenticazione per interagire con il cluster.
gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
Output previsto:
Fetching cluster endpoint and auth data. kubeconfig entry generated for CLUSTER_NAME.
Imposta il contesto attuale per
kubectl
sul cluster.kubectl config set-context CLUSTER_NAME
Output previsto:
Context "CLUSTER_NAME" created.
Esegui il provisioning di Cloud Service Mesh
Se non hai chiuso questa pagina dalla creazione del cluster, i segnaposto
contengono i valori che hai inserito per gcloud container clusters create
.
Abilita Cloud Service Mesh sul parco risorse del tuo progetto.
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_NAME-membership \ --gke-cluster=CLUSTER_LOCATION/CLUSTER_NAME \ --enable-workload-identity \ --project PROJECT_ID
L'output è simile a questo:
Waiting for membership to be created...done. Finished registering to the Fleet.
Esegui il provisioning di Cloud Service Mesh gestito sul cluster utilizzando l'API Fleet:
gcloud container fleet mesh update \ --management automatic \ --memberships CLUSTER_NAME-membership \ --project PROJECT_ID
L'output è simile a questo:
Waiting for Feature Service Mesh to be updated...done.
Verifica che Cloud Service Mesh gestito sia stato abilitato per il cluster e che sia pronto per l'uso:
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/your-cluster-membership: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/123456789123/locations/global/memberships/your-cluster-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'
Scarica il codice campione
Clona il repository Git che contiene il codice di esempio utilizzato in questo tutorial:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git
Le sezioni successive di questo tutorial usano una variabile DIR_PATH.
Imposta questa variabile sul percorso del repository anthos-service-mesh-packages
che hai clonato (ad esempio ./anthos-service-mesh-packages
).
Esegui il deployment di un gateway in entrata
Cloud Service Mesh ti offre la possibilità di eseguire il deployment e gestire i gateway come parte mesh di servizi. Un gateway descrive un bilanciatore del carico che opera a livello perimetrale mesh che riceve connessioni HTTP/TCP in entrata o in uscita. I gateway sono Envoy che forniscono un controllo granulare sul traffico in entrata e escono dalla rete.
Crea uno spazio dei nomi per il gateway in entrata, se non ne hai già uno. I gateway sono carichi di lavoro dell'utente e, come best practice, non dovrebbero essere di cui è stato eseguito il deployment nello spazio dei nomi del piano di controllo. Sostituisci
GATEWAY_NAMESPACE
con il nome del tuo spazio dei nomi.kubectl create namespace GATEWAY_NAMESPACE
Output previsto:
namespace/GATEWAY_NAMESPACE created
Abilita l'inserimento automatico nel gateway. I passaggi richiesti variano a seconda che vuoi utilizzare etichette di inserimento predefinite (ad es.
istio-injection=enabled
) o etichetta di revisione sul gateway nello spazio dei nomi. Il tag di revisione e l'etichetta di revisione predefiniti vengono utilizzati webhook di inserimento del sidecar per associare i proxy inseriti a un determinato la revisione del piano di controllo.Etichette di inserimento predefinite
Applica le etichette di inserimento predefinite allo spazio dei nomi.
kubectl label namespace GATEWAY_NAMESPACE istio-injection=enabled istio.io/rev-
Etichetta di revisione
Usa questo comando per individuare l'etichetta di revisione su
istiod
:kubectl get deploy -n istio-system -l app=istiod -o \ "jsonpath={.items[*].metadata.labels['istio\.io/rev']}{'\n'}"
Il comando restituisce l'etichetta di revisione che corrisponde Versione di Cloud Service Mesh, ad esempio:
asm-1242-1
Applica l'etichetta di revisione allo spazio dei nomi. Nel comando seguente,
REVISION
è il valore della revisioneistiod
che hai annotato nel passaggio precedente.kubectl label namespace GATEWAY_NAMESPACE \ istio.io/rev=REVISION --overwrite
Output previsto:
namespace/GATEWAY_NAMESPACE labeled
Puoi ignorare il messaggio
"istio.io/rev" not found
nel come output. Ciò significa che in precedenza lo spazio dei nomi non aveva Etichettaistio.io/rev
, prevista nelle nuove installazioni di Cloud Service Mesh o nuovi deployment. Perché l'inserimento automatico non riesce se uno spazio dei nomi contiene siaistio.io/rev
cheistio-injection
tutti i comandikubectl label
in Cloud Service Mesh documentazione specificano in modo esplicito entrambe le etichette.Se lo spazio dei nomi del gateway non è etichettato, i pod
istio-ingressgateway
non riuscirà con un erroreImagePullBackOff
quando il gateway tenta di eseguire il pull e l'immagineauto
. Questa immagine deve essere sostituita dal webhook.Scarica il file di configurazione .yaml del gateway in entrata di esempio dal Repository
anthos-service-mesh-packages
.Applica la configurazione .yaml del gateway in entrata di esempio così com'è o modificala come necessaria.
kubectl apply -n GATEWAY_NAMESPACE \ -f CONFIG_PATH/istio-ingressgateway
Output previsto:
deployment.apps/istio-ingressgateway created poddisruptionbudget.policy/istio-ingressgateway created horizontalpodautoscaler.autoscaling/istio-ingressgateway created role.rbac.authorization.k8s.io/istio-ingressgateway created rolebinding.rbac.authorization.k8s.io/istio-ingressgateway created service/istio-ingressgateway created serviceaccount/istio-ingressgateway created
Scopri di più sulle best practice per i gateway.
Esegui il deployment dell'esempio di Online Boutique
L'applicazione di esempio Online Boutique nel
anthos-service-mesh-packages
il repository viene modificato rispetto all'insieme originale di manifest
microservices-demo
un repository. Seguendo le best practice, il deployment di ogni servizio viene eseguito in uno spazio dei nomi separato
con un account di servizio univoco.
Crea gli spazi dei nomi per l'applicazione:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
Output previsto:
namespace/ad created namespace/cart created namespace/checkout created namespace/currency created namespace/email created namespace/frontend created namespace/loadgenerator created namespace/payment created namespace/product-catalog created namespace/recommendation created namespace/shipping created
Attiva l'inserimento automatico del file collaterale (inserimento automatico). Il comando richiesto varia a seconda che tu voglia utilizzare etichette di inserimento predefinite (ad esempio
istio-injection=enabled
) o la stessa etichetta di revisione che hai utilizzato per annotare lo spazio dei nomi del gateway in entrataEtichette di inserimento predefinite
Applica le etichette di inserimento predefinite allo spazio dei nomi. Nel seguente , GATEWAY_NAMESPACE è lo stesso valore specificato utilizzata per annotare lo spazio dei nomi del gateway in entrata.
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns istio-injection=enabled istio.io/rev- done;
Output previsto:
namespace/ad labeled namespace/cart labeled namespace/checkout labeled namespace/currency labeled namespace/email labeled namespace/frontend labeled namespace/loadgenerator labeled namespace/payment labeled namespace/product-catalog labeled namespace/recommendation labeled namespace/shipping labeled
Etichetta di revisione
Applica l'etichetta di revisione agli spazi dei nomi dell'applicazione. Nel comando seguente, REVISION è lo stesso valore utilizzato per annotare lo spazio dei nomi del gateway in entrata.
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns istio.io/rev=REVISION --overwrite done;
Output previsto:
namespace/ad labeled namespace/cart labeled namespace/checkout labeled namespace/currency labeled namespace/email labeled namespace/frontend labeled namespace/loadgenerator labeled namespace/payment labeled namespace/product-catalog labeled namespace/recommendation labeled namespace/shipping labeled
Esegui il deployment dell'applicazione di esempio nel cluster.
Crea gli account di servizio e i deployment:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/deployments
Output previsto:
serviceaccount/ad created deployment.apps/adservice created serviceaccount/cart created deployment.apps/cartservice created serviceaccount/checkout created deployment.apps/checkoutservice created serviceaccount/currency created deployment.apps/currencyservice created serviceaccount/email created deployment.apps/emailservice created serviceaccount/frontend created deployment.apps/frontend created serviceaccount/loadgenerator created deployment.apps/loadgenerator created serviceaccount/payment created deployment.apps/paymentservice created serviceaccount/product-catalog created deployment.apps/productcatalogservice created serviceaccount/recommendation created deployment.apps/recommendationservice created serviceaccount/shipping created deployment.apps/shippingservice created
Crea i servizi:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/services
Output previsto:
service/adservice created service/cartservice created service/checkoutservice created service/currencyservice created service/emailservice created service/frontend created service/frontend-external created service/paymentservice created service/productcatalogservice created service/recommendationservice created service/shippingservice created
Crea le voci di servizio:
kubectl apply -f \ DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
Output previsto:
serviceentry.networking.istio.io/allow-egress-googleapis created serviceentry.networking.istio.io/allow-egress-google-metadata created
Esposizione e accesso all'applicazione
Esistono diversi modi per esporre l'applicazione. In questa guida utilizzeremo il gateway in entrata di cui abbiamo eseguito il deployment. Per altri modi per esporre Per l'applicazione Online Boutique si intendono la visualizzazione e l'accesso all'applicazione della guida sul deployment dell'applicazione di esempio Online Boutique.
Esegui il deployment di
Gateway
eVirtualService
per il servizio di frontendkubectl apply -f \ DIR_PATH/samples/online-boutique/istio-manifests/frontend-gateway.yaml
Output previsto:
gateway.networking.istio.io/frontend-gateway created virtualservice.networking.istio.io/frontend-ingress created
Ottieni l'indirizzo IP esterno del gateway in entrata, sostituisci i segnaposto con le seguenti informazioni:
- GATEWAY_SERVICE_NAME: il nome del gateway in entrata
completamente gestito di Google Cloud. Se hai eseguito il deployment del gateway di esempio senza modifiche,
istio-ingressgateway
. - GATEWAY_NAMESPACE: lo spazio dei nomi in cui hai eseguito il deployment il gateway in entrata:
kubectl get service GATEWAY_SERVICE_NAME \ -n GATEWAY_NAMESPACE
L'output è simile a questo:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.19.247.233 35.239.7.64 80:31380/TCP,443:31390/TCP,31400:31400/TCP 27m
In questo esempio, l'indirizzo IP del gateway in entrata è
35.239.7.64
.- GATEWAY_SERVICE_NAME: il nome del gateway in entrata
completamente gestito di Google Cloud. Se hai eseguito il deployment del gateway di esempio senza modifiche,
Visita l'applicazione sul tuo browser per confermare l'installazione:
http://EXTERNAL_IP/
Visualizza le dashboard di Service Mesh
Dopo aver eseguito il deployment dei carichi di lavoro nel cluster con i proxy sidecar puoi esplorare le pagine Cloud Service Mesh nella console Google Cloud per vedere tutte le funzionalità di osservabilità offerte da Cloud Service Mesh. Tieni presente che sono necessari circa uno o due minuti per visualizzare i dati di telemetria nel nella console Google Cloud dopo il deployment dei carichi di lavoro.
L'accesso a Cloud Service Mesh nella console Google Cloud è controllato Identity and Access Management (IAM). Per accedere al nelle pagine Cloud Service Mesh, un Proprietario progetto deve concedere agli utenti il ruolo di Editor o Visualizzatore di progetto oppure i ruoli più restrittivi descritti in Controllo dell'accesso a Cloud Service Mesh nella console Google Cloud
Nella console Google Cloud, vai a Cloud Service Mesh.
Seleziona il progetto Google Cloud dall'elenco a discesa sulla barra dei menu.
Se hai più di un mesh di servizi, selezionalo dall'elenco Mesh di servizi.
Per saperne di più, vedi Esplorazione di Cloud Service Mesh nella console Google Cloud.
Esegui la pulizia
Prima di eseguire la pulizia, se vuoi saperne di più TLS reciproco, consulta Cloud Service Mesh, ad esempio: mTLS.
Se vuoi conservare il cluster e rimuovere l'esempio di Boutique online:
Elimina gli spazi dei nomi dell'applicazione:
kubectl delete -f DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
Output previsto:
namespace "ad" deleted namespace "cart" deleted namespace "checkout" deleted namespace "currency" deleted namespace "email" deleted namespace "frontend" deleted namespace "loadgenerator" deleted namespace "payment" deleted namespace "product-catalog" deleted namespace "recommendation" deleted namespace "shipping" deleted
Elimina le voci di servizio:
kubectl delete -f DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
Output previsto:
serviceentry.networking.istio.io "allow-egress-googleapis" deleted serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
Se vuoi evitare addebiti aggiuntivi, elimina il cluster:
Esegui questo comando:
gcloud container clusters delete CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
Al prompt Vuoi continuare (Y/n)?, inserisci y.
Dopo alcuni minuti, viene visualizzato il seguente output:
Deleting cluster CLUSTER_NAME...done. Deleted [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/CLUSTER_LOCATION/clusters/CLUSTER_NAME].
Passaggi successivi
- Per saperne di più su Managed Cloud Service Mesh, consulta Provisioning di Cloud Service Mesh gestito
- Per una rapida introduzione a gcloud CLI utilizzata in questo tutorial, consulta i comandi
gcloud
- Per scoprire come esplorare Cloud Service Mesh nella console Google Cloud, consulta Esplorazione di Cloud Service Mesh nella console Google Cloud
- Per esplorare le funzionalità facoltative di Cloud Service Mesh, come Cloud Trace, immagini proxy senza distro e autenticazione dell'utente finale, vedi Abilita funzionalità facoltative su Cloud Service Mesh gestito
- Per saperne di più sulla sicurezza in Cloud Service Mesh, consulta la panoramica sulla sicurezza di Cloud Service Mesh e best practice per la sicurezza di Cloud Service Mesh
- Per saperne di più sulla telemetria in Cloud Service Mesh, consulta Panoramica dell'osservabilità