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 i manifest di Boutique online dal repo anthos-service-mesh-packages utilizzando kpt. L'applicazione di esempio Online Boutique nel repository anthos-service-mesh-packages è stata modificata dall'insieme originale di manifest nel repository microservices-demo. Seguendo le best practice, ogni servizio viene disegnato in un ambito distinto con un account di servizio univoco.

  1. Se non l'hai ancora fatto, installa kpt:

    gcloud components install kpt
    
  2. Scarica il sample 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).
    
  3. Vai alla directory online-boutique:

    cd online-boutique
    
  4. 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
    
  5. Esegui il deployment del sample nel cluster.

    1. Crea gli account di servizio e i deployment:

      kubectl apply -f kubernetes-manifests/deployments
      

      Risultato 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
      
    2. 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
      
    3. 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 attivare l'iniezione automatica, etichetta gli spazi dei nomi con le etichette di inserimento predefinite se è configurato il tag predefinito o con la etichetta di revisione per lo 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 dall'webhook dell'iniettore di sidecar per associare i sidecar iniettati con una determinata revisione del piano di controllo.

All'interno del cluster

  1. 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-1157-23

  2. Applica l'etichetta della revisione agli spazi dei nomi dell'applicazione. Nel seguente comando, REVISION è il valore dell'etichetta di revisione istiod che hai annotato 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;
    

    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
    
  3. 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

  1. Applica l'etichetta della revisione agli spazi dei nomi dell'applicazione. Nel seguente comando, l'etichetta REVISION deve essere il valore del canale di rilascio di Cloud Service Mesh gestito: asm-managed per regolare, asm-managed-rapid per rapido o asm-managed-stable per 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
    
  2. Se hai implementato anche il piano di dati gestito facoltativo, 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;
    
  3. 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
    

Esposizione e accesso all'applicazione

Il modo in cui esponi l'applicazione all'esterno del mesh dipende dal fatto che hai eseguito il deployment di un gateway in entrata. Puoi scegliere di esporre l'applicazione utilizzando un gateway di ingresso Istio o un servizio Kubernetes.

Utilizzo del gateway di ingresso

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.

  1. Esegui il deployment di un Gateway e un VirtualService per il servizio frontend

    kubectl apply -f istio-manifests/frontend-gateway.yaml
    

    Risultato previsto:

    gateway.networking.istio.io/frontend-gateway created
    virtualservice.networking.istio.io/frontend-ingress created
    
  2. Ottieni l'indirizzo IP esterno del gateway di ingresso. Sostituisci i segnaposto con le seguenti informazioni:

    • GATEWAY_SERVICE_NAME : il nome del servizio gateway di ingresso. Se hai disegnato il gateway di esempio senza modifiche o se hai disegnato il gateway di ingresso predefinito, il nome è istio-ingressgateway.

    • GATEWAY_NAMESPACE: lo spazio dei nomi in cui hai eseguito il deployment del gateway di ingresso. 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.

  3. Visita l'applicazione sul browser per confermare l'installazione:

    http://EXTERNAL_IP/
    

Nessun gateway in entrata

Se non hai eseguito il deployment di un gateway di ingresso o hai scelto di esporre l'applicazione utilizzando un servizio Kubernetes, svolgi i seguenti passaggi:

  1. Esegui il deployment di un servizio di tipo LoadBalancer per esporre il servizio frontend

    kubectl apply -f frontend-external.yaml
    
  2. Trova l'indirizzo IP esterno del servizio frontend-external:

    kubectl get service frontend-external -n frontend
    
  3. 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 consultare Cloud Service Mesh tramite esempi: mTLS, che utilizza il sample. Al termine dell'esplorazione, utilizza i seguenti comandi per rimuovere l'esempio Online Boutique:

  1. 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
    
  2. Elimina le voci del servizio:

    kubectl delete -f istio-manifests/allow-egress-googleapis.yaml
    

    Risultato previsto:

    serviceentry.networking.istio.io "allow-egress-googleapis" deleted
    serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
    

Passaggi successivi