Deployment dell'applicazione di esempio Online Boutique
Questa guida spiega come installare l'applicazione di esempio Online Boutique per dimostrare Cloud Service Mesh. Se non hai installato Cloud Service Mesh, consulta la guida all'installazione.
Download ed esecuzione del deployment del sample
Per eseguire il deployment dell'applicazione, devi prima scaricare Online Boutique
da anthos-service-mesh-packages
repository utilizzando kpt
. L'applicazione di esempio Online Boutique nel
repo anthos-service-mesh-packages
è stata modificata dall'insieme originale di
manifest nel repo microservices-demo
. Seguendo le best practice, ogni servizio viene disegnato in un ambito distinto con un account di servizio univoco.
Installa
kpt
se non l'hai ancora fatto:gcloud components install kpt
Scarica l'esempio utilizzando
kpt
:kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/samples/online-boutique \ online-boutique
Risultato previsto
Package "online-boutique": Fetching https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages@main From https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages * branch main -> FETCH_HEAD Adding package "samples/online-boutique". Fetched 1 package(s).
Vai alla directory
online-boutique
:cd online-boutique
Crea gli spazi dei nomi per l'applicazione:
kubectl apply -f kubernetes-manifests/namespaces
Risultato 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
Esegui il deployment del sample nel cluster.
Crea gli account di servizio e i deployment:
kubectl apply -f 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 kubernetes-manifests/services
Risultato 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 del servizio:
kubectl apply -f istio-manifests/allow-egress-googleapis.yaml
Risultato previsto:
serviceentry.networking.istio.io/allow-egress-googleapis created serviceentry.networking.istio.io/allow-egress-google-metadata created
Attivazione dell'iniezione automatica di sidecar
Per abilitare l'inserimento automatico, etichetta gli spazi dei nomi con il etichette di inserimento predefinite se è configurato il tag predefinito o con il rivedere l'etichetta nello spazio dei nomi. L'etichetta aggiunta dipende anche dal fatto che tu abbia eseguito il deployment di Cloud Service Mesh gestito o abbia installato il control plane in-cluster. L'etichetta viene utilizzata dal webhook di iniettori collaterali per associare i file collaterali inseriti con una particolare revisione del piano di controllo.
All'interno del cluster
Utilizza il seguente comando per individuare l'etichetta 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 corrispondente alla versione di Cloud Service Mesh, ad esempio:
asm-1232-2
Applica l'etichetta della revisione agli spazi dei nomi dell'applicazione. Nel seguente REVISION è il valore dell'attributo
istiod
l'etichetta di revisione annotata nel passaggio precedente.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
Riavvia i pod:
for ns in ad cart checkout currency email frontend loadgenerator \ payment product-catalog recommendation shipping; do kubectl rollout restart deployment -n ${ns} done;
Risultato previsto:
deployment.apps/adservice restarted deployment.apps/cartservice restarted deployment.apps/checkoutservice restarted deployment.apps/currencyservice restarted deployment.apps/emailservice restarted deployment.apps/frontend restarted deployment.apps/loadgenerator restarted deployment.apps/paymentservice restarted deployment.apps/productcatalogservice restarted deployment.apps/recommendationservice restarted deployment.apps/shippingservice restarted
Mesh di servizi gestito
Applica l'etichetta di revisione agli spazi dei nomi dell'applicazione. Nel seguente l'etichetta REVISION deve essere il valore del tuo canale di rilascio Cloud Service Mesh gestito:
asm-managed
per la versione regolare,asm-managed-rapid
per la modalità rapida oasm-managed-stable
per la modalità stabile.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;
Risultato 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
Se hai eseguito anche il deployment della piano dati gestito, annota gli spazi dei nomi dell'applicazione come segue:
for ns in ad cart checkout currency email frontend loadgenerator \ payment product-catalog recommendation shipping; do kubectl annotate --overwrite namespace $ns mesh.cloud.google.com/proxy='{"managed":"true"}' done;
Riavvia i pod:
for ns in ad cart checkout currency email frontend loadgenerator \ payment product-catalog recommendation shipping; do kubectl rollout restart deployment -n ${ns} done;
Output previsto:
deployment.apps/adservice restarted deployment.apps/cartservice restarted deployment.apps/checkoutservice restarted deployment.apps/currencyservice restarted deployment.apps/emailservice restarted deployment.apps/frontend restarted deployment.apps/loadgenerator restarted deployment.apps/paymentservice restarted deployment.apps/productcatalogservice restarted deployment.apps/recommendationservice restarted deployment.apps/shippingservice restarted
Esposizione e accesso all'applicazione
Il modo in cui esponi l'applicazione all'esterno del mesh dipende dal fatto che tu abbia eseguito il deployment di un gateway in entrata. Puoi scegliere di esporre l'applicazione utilizzando un o un gateway istio in entrata utilizzando un servizio Kubernetes.
Utilizzo del gateway in entrata
Se hai eseguito il deployment di un gateway di ingresso nel cluster come specificato nel prerequisito, svolgi i seguenti passaggi per esporre l'applicazione utilizzando il gateway.
Esegui il deployment di un
Gateway
e unVirtualService
per il servizio frontendkubectl apply -f 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 di ingresso. Sostituisci i segnaposto con le seguenti informazioni:
GATEWAY_SERVICE_NAME : il nome del traffico in entrata gateway VPN ad alta disponibilità. Se hai eseguito il deployment del gateway di esempio senza o se hai eseguito il deployment gateway in entrata predefinito, il nome è
istio-ingressgateway
.GATEWAY_NAMESPACE: lo spazio dei nomi in cui ha eseguito il deployment del gateway in entrata. Se hai disegnato il gateway di accesso predefinito, lo spazio dei nomi è
istio-system
.
kubectl get service GATEWAY_SERVICE_NAME -n GATEWAY_NAMESPACE
L'output è simile al seguente:
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 di ingresso è
35.239.7.64
.Visita l'applicazione sul tuo browser per confermare l'installazione:
http://EXTERNAL_IP/
Nessun gateway in entrata
Se non hai eseguito il deployment di un gateway in entrata o scegli di esporre l'applicazione utilizzando un servizio Kubernetes, segui questi passaggi:
Esegui il deployment di un servizio di tipo
LoadBalancer
per esporre il servizio frontendkubectl apply -f frontend-external.yaml
Trova l'indirizzo IP esterno del servizio
frontend-external
:kubectl get service frontend-external -n frontend
Visita l'applicazione sul browser per confermare l'installazione:
http://EXTERNAL_IP/
Puoi esplorare le funzionalità di osservabilità di Cloud Service Mesh nella console Google Cloud. Tieni presente che possono essere necessari fino a 10 minuti prima che il grafico della topologia mostri i servizi nel tuo mesh.
Esegui la pulizia
Prima di eliminare Online Boutique, ti consigliamo di Cloud Service Mesh, ad esempio: mTLS, che utilizza il campione. Al termine dell'esplorazione, utilizza i seguenti comandi per rimuovere l'esempio Online Boutique:
Elimina gli spazi dei nomi dell'applicazione:
kubectl delete -f kubernetes-manifests/namespaces
Risultato 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 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