Deployment dell'esempio Bookinfo

Questa pagina spiega come eseguire il deployment di un'applicazione di esempio per dimostrare Anthos Service Mesh. Se non hai installato Anthos Service Mesh, consulta la guida all'installazione.

Diverse applicazioni di esempio includono l'installazione di Anthos Service Mesh. Questa guida illustra il deployment dell'esempio BookInfo. Si tratta di una semplice applicazione di simulazione di libreria composta da quattro servizi che forniscono una pagina di prodotto web, dettagli del libro, recensioni (con diverse versioni del servizio di recensioni) e valutazioni, il tutto gestito con Anthos Service Mesh. Puoi trovare il codice sorgente e tutti gli altri file utilizzati in questo esempio nella directory di installazione di Anthos Service Mesh in samples/bookinfo.

Abilitazione dell'inserimento automatico sidecar

Per abilitare l'inserimento automatico del sidecar, devi etichettare gli spazi dei nomi in modo che il webhook iniettore del sidecar possa associare i sidecar inseriti a una determinata revisione del piano di controllo. Se configuri il tag predefinito, etichetta gli spazi dei nomi con le etichette di iniezione predefinite. In caso contrario, etichetta gli spazi dei nomi con l'etichetta della revisione. Inoltre, l'etichetta da aggiungere dipende anche dal fatto che tu abbia eseguito il deployment del piano di servizio Anthos gestito o che tu abbia installato il piano di controllo nel cluster.

Gestita

  1. Puoi utilizzare l'etichetta di iniezione predefinita o l'etichetta di revisione per lo spazio dei nomi

    Etichette di iniezione predefinite

    Applica l'etichetta di iniezione predefinita allo spazio dei nomi.

    kubectl label namespace NAMESPACE istio-injection=enabled istio.io/rev-
    

    Etichetta revisione

    Prima di eseguire il deployment delle applicazioni, rimuovi eventuali etichette istio-injection precedenti dai relativi spazi dei nomi e imposta l'etichetta istio.io/rev=REVISION_LABEL.

    Per modificarla su un'etichetta di revisione specifica, fai clic su REVISION_LABEL e sostituiscila con l'etichetta applicabile: asm-managed-rapid per il canale rapido, asm-managed per il canale normale o asm-managed-stable per il canale stabile.

    L'etichetta di revisione corrisponde a un canale di rilascio:

    Etichetta revisione Canale
    asm-managed Normale
    asm-managed-rapid Rapida
    asm-managed-stable Stabile
    kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION_LABEL --overwrite
    
  2. Se hai eseguito anche il deployment del piano dati gestito facoltativo, annota lo NAMESPACEspazio dei nomi come segue:

    kubectl annotate --overwrite namespace NAMESPACE \
    mesh.cloud.google.com/proxy='{"managed":"true"}'
    

In-cluster

  1. Utilizza il comando seguente per individuare l'etichetta su istiod:

    kubectl -n istio-system get pods -l app=istiod --show-labels
    

    L'output è simile al seguente:

    NAME                                READY   STATUS    RESTARTS   AGE   LABELS
    istiod-asm-173-3-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-1157-23,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-173-3-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-1157-23,istio=istiod,pod-template-hash=5788d57586
    

    Nell'output, nella colonna LABELS, prendi nota del valore dell'etichetta di revisione istiod, che segue il prefisso istio.io/rev=. In questo esempio, il valore è asm-1157-23.

  2. Applica l'etichetta di revisione allo spazio dei nomi predefinito. Nel comando seguente, REVISION è il valore dell'etichetta di revisione istiod che hai annotato nel passaggio precedente.

    kubectl label namespace default istio-injection- istio.io/rev=REVISION --overwrite
    

    Puoi ignorare il messaggio "istio-injection not found" nell'output. Ciò significa che in precedenza lo spazio dei nomi non aveva l'etichetta istio-injection, un comportamento previsto nelle nuove installazioni di Anthos Service Mesh o nei nuovi deployment. Poiché l'inserimento automatico non riesce se uno spazio dei nomi ha sia l'etichetta istio-injection sia l'etichetta di revisione, tutti i comandi kubectl label nella documentazione di Anthos Service Mesh specificano esplicitamente entrambe le etichette.

Implementazione dell'applicazione

Ora che l'inserimento automatico è abilitato nello spazio dei nomi default, quando esegui il deployment dei servizi dell'applicazione BookInfo, i proxy sidecar vengono inseriti accanto a ciascun servizio.

  1. Sulla riga di comando sul computer in cui hai installato Anthos Service Mesh, vai alla directory di installazione di Anthos Service Mesh. Se necessario, scarica il file di installazione.

  2. Esegui il deployment dell'applicazione nello spazio dei nomi predefinito utilizzando kubectl:

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
    
  3. Verifica che il deployment dell'applicazione sia stato eseguito correttamente eseguendo questi comandi:

    kubectl get services
    

    Output:

    NAME                       CLUSTER-IP   EXTERNAL-IP   PORT(S)              AGE
    details                    10.0.0.31    <none>        9080/TCP             6m
    kubernetes                 10.0.0.1     <none>        443/TCP              7d
    productpage                10.0.0.120   <none>        9080/TCP             6m
    ratings                    10.0.0.15    <none>        9080/TCP             6m
    reviews                    10.0.0.170   <none>        9080/TCP             6m

    e

    kubectl get pod
    

    Output:

    NAME                                        READY     STATUS    RESTARTS   AGE
    details-v1-1520924117-48z17                 2/2       Running   0          6m
    productpage-v1-560495357-jk1lz              2/2       Running   0          6m
    ratings-v1-734492171-rnr5l                  2/2       Running   0          6m
    reviews-v1-874083890-f0qf0                  2/2       Running   0          6m
    reviews-v2-1343845940-b34q5                 2/2       Running   0          6m
    reviews-v3-1813607990-8ch52                 2/2       Running   0          6m
  4. Infine, definisci il routing del gateway in entrata per l'applicazione:

    kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
    

    Output:

    gateway.networking.istio.io/bookinfo-gateway created
    virtualservice.networking.istio.io/bookinfo created

Convalida del deployment dell'applicazione

Per verificare che l'applicazione BookInfo funzioni, devi inviare il traffico al gateway in entrata.

  • Se hai installato Anthos Service Mesh su Cluster Anthos su VMware, recupera l'indirizzo IP esterno del gateway in entrata configurato dopo l'installazione di Anthos Service Mesh

  • Se hai installato Anthos Service Mesh su GKE, recupera l'indirizzo IP esterno del gateway in entrata come segue:

    kubectl get service istio-ingressgateway -n istio-system
    

    Output:

    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 servizio in entrata è 35.239.7.64.

Prova dell'applicazione in corso

  1. Verifica che l'app BookInfo sia in esecuzione con curl:

    curl -I http://EXTERNAL_IP/productpage
    

    Se la risposta mostra 200, significa che l'applicazione funziona correttamente con Anthos Service Mesh.

  2. Per visualizzare la pagina web BookInfo, inserisci il seguente indirizzo nel tuo browser:

    http://EXTERNAL_IP/productpage
    

    Se aggiorni la pagina più volte, dovresti vedere diverse versioni delle recensioni mostrate nella pagina del prodotto, presentate in stile round robin (stelle rosse, stelle nere, senza stelle).

Ora che disponi di un'applicazione che genera traffico, puoi esplorare le pagine di Anthos Service Mesh nella console Google Cloud per visualizzare le metriche e le altre funzionalità di osservabilità.

Eseguire la pulizia

Al termine dell'esperimento con l'esempio Bookinfo, rimuovilo dal cluster.

  1. Disinstalla Bookinfo utilizzando il seguente script:

    samples/bookinfo/platform/kube/cleanup.sh
    
  2. Conferma l'arresto:

    kubectl get virtualservices   #-- there should be no virtual services
    kubectl get destinationrules  #-- there should be no destination rules
    kubectl get gateway           #-- there should be no gateway
    kubectl get pods              #-- the Bookinfo pods should be deleted
    

Passaggi successivi

Scopri di più sull'esempio di Bookinfo.