Deployment dell'esempio Bookinfo

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

L'installazione di Cloud Service Mesh include diverse applicazioni di esempio. Questa guida illustra la procedura di deployment dell'esempio BookInfo. Questa è una semplice applicazione di libreria di simulazione composta da quattro servizi che forniscono una pagina web di prodotto, dettagli dei libri, recensioni (con diverse versioni di il servizio di recensione) e le valutazioni, il tutto gestito mediante Cloud Service Mesh. Puoi il codice sorgente e tutti gli altri file utilizzati in questo esempio nel Directory di installazione di Cloud Service Mesh in samples/bookinfo.

Attivazione dell'inserimento automatico di file collaterali

Per abilitare l'inserimento automatico dei file collaterali, devi etichettare gli spazi dei nomi in modo che il webhook di iniettore sidecar associa i sidecar iniettati a un particolare controllo la revisione del piano d'azione. Se configuri il tag predefinito, etichetta gli spazi dei nomi con le etichette di inserimento predefinite. In caso contrario, etichetta gli spazi dei nomi con l'etichetta di revisione. Inoltre, l'etichetta che aggiunti dipende anche dal fatto che tu abbia implementato Cloud Service Mesh gestito o installato il control plane in-cluster.

Gestito

  1. Puoi usare l'etichetta di inserimento predefinita o l'etichetta di revisione per lo spazio dei nomi

    Etichette di inserimento predefinite

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

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

    Etichetta di 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 modificarlo in un'etichetta di revisione specifica, fai clic su REVISION_LABEL e sostituisci con l'etichetta applicabile: asm-managed-rapid per canale rapido, asm-managed per canale regolare o asm-managed-stable per canale stabile.

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

    Etichetta di 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 implementato anche il piano di dati gestito facoltativo, annota lo spazio dei nomi NAMESPACE come segue:

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

All'interno del cluster

  1. Utilizza il seguente comando 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-11910-9,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-173-3-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-11910-9,istio=istiod,pod-template-hash=5788d57586
    

    Nell'output, sotto la colonna LABELS, prendi nota del valore del parametro istiod etichetta di revisione, che segue il prefisso istio.io/rev=. In questo esempio, il valore è asm-11910-9.

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

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

    Puoi ignorare il messaggio "istio-injection not found" nel come output. Ciò significa che in precedenza lo spazio dei nomi non aveva Etichetta istio-injection, prevista nelle nuove di Cloud Service Mesh o di nuovi deployment. Poiché il comportamento di istio-injection non è definito quando uno spazio dei nomi ha sia l'etichetta istio-injection che l'etichetta di revisione, tutti i comandi kubectl label nella documentazione di Cloud Service Mesh assicurano esplicitamente che ne sia impostato solo uno.

Implementazione dell'applicazione

Ora che l'inserimento automatico è abilitato nello spazio dei nomi default, quando esegui il deployment ai servizi dell'applicazione BookInfo, i proxy collaterali vengono inseriti insieme completamente gestito di Google Cloud.

  1. Nella riga di comando del computer in cui hai installato Cloud Service Mesh, vai alla directory principale della directory di installazione di Cloud 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 il comando seguenti 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 di ingresso 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 se l'applicazione BookInfo funziona, devi inviare il traffico a il gateway in entrata.

  • Se hai installato Cloud Service Mesh su Google Distributed Cloud, ottieni l'indirizzo IP esterno per il gateway di ingresso che hai configurato dopo l'installazione di Cloud Service Mesh

  • Se hai installato Cloud Service Mesh su GKE, ottieni l'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

  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 Cloud Service Mesh.

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

    http://EXTERNAL_IP/productpage
    

    Se aggiorni la pagina più volte, dovresti vedere diverse versioni delle recensioni mostrate nella pagina del prodotto, presentate in un ordine casuale (stelle rosse, stelle nere, nessuna stella).

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

Pulizia

Quando hai terminato l'esperimento con l'esempio di Bookinfo, rimuovilo da nel tuo cluster.

  1. Disinstalla Bookinfo utilizzando lo script seguente:

    samples/bookinfo/platform/kube/cleanup.sh
    
  2. Conferma chiusura:

    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.