Deployment dell'esempio Bookinfo

Questa pagina spiega come eseguire il deployment di un'applicazione di esempio per dimostrare Cloud Service Mesh. Se non hai eseguito l'onboarding in Cloud Service Mesh, consulta le Guida alle operazioni preliminari.

L'installazione di Cloud Service Mesh include diverse applicazioni di esempio. Questo ti illustrerà come implementare BookInfo campione. Si tratta di una semplice applicazione simulata di una libreria composta da quattro servizi che forniscono una pagina di prodotto web, dettagli dei libri, recensioni (con diverse versioni del servizio di recensione) e valutazioni, il tutto gestito utilizzando 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

  1. Attiva lo spazio dei nomi per l'iniezione. I passaggi dipendono dall'implementazione del piano di controllo.

    Gestito (TD)

    1. Applica l'etichetta di inserimento predefinita allo spazio dei nomi:
    kubectl label namespace default \
        istio.io/rev- istio-injection=enabled --overwrite
    

    Gestito (Istiod)

    Consigliato: esegui il seguente comando per applicare l'etichetta di inserimento predefinita allo spazio dei nomi:

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

    Se sei un utente esistente con il piano di controllo Managed Istiod: Ti consigliamo di usare l'inserimento predefinito, ma l'inserimento basato sulle revisioni supportati. Segui queste istruzioni:

    1. Esegui il comando seguente per individuare i canali di rilascio disponibili:

      kubectl -n istio-system get controlplanerevision
      

      L'output è simile al seguente:

      NAME                AGE
      asm-managed-rapid   6d7h
      

      NOTA: se nell'elenco riportato sopra sono presenti due revisioni del piano di controllo, rimuovine una. La presenza di più canali del control plane nel cluster non è supportata.

      Nell'output, il valore nella colonna NAME è l'etichetta di revisione corrispondente al canale di rilascio disponibile per la versione di Cloud Service Mesh.

    2. Applica l'etichetta di revisione allo spazio dei nomi:

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

    All'interno del cluster

    Consigliato: esegui il seguente comando per applicare l'etichetta di inserimento predefinita allo spazio dei nomi:

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

    Consigliamo di utilizzare l'inserimento predefinito, ma l'inserimento basato sulle revisioni è supportato: Segui queste istruzioni:

    1. 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"}'
      
    2. Applica l'etichetta di revisione allo spazio dei nomi. Nel seguente comando, REVISION_LABEL è il valore dell'etichetta della revisione istiod che hai annotato nel passaggio precedente.

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

Implementazione dell'applicazione

Ora che l'iniezione automatica è attivata nello spazio dei nomi default, quando esegui il deployment dei servizi dell'applicazione BookInfo, i proxy sidecar vengono iniettati insieme a ciascun servizio.

  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 in cluster, che include l'applicazione di esempio bookinfo, ed estrailo.

  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 (solo software) per VMware, ottieni il l'indirizzo IP del gateway in entrata che 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 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 Bookinfo.