Guida rapida di Anthos Service Mesh per GKE

In questo tutorial installerai Anthos Service Mesh 1.12.9-asm.3 utilizzando uno strumento fornito da Google, asmcli, su un nuovo cluster Google Kubernetes Engine (GKE). Questo tutorial illustra:

  1. È in corso la configurazione del progetto Google Cloud.
  2. Creazione di un cluster GKE con il numero minimo di vCPU richiesto da Anthos Service Mesh.
  3. Installazione di Anthos Service Mesh con un piano di controllo nel cluster.
  4. Deployment di un'applicazione di esempio in modo da poter visualizzare i dati di telemetria sulle dashboard di Anthos Service Mesh nella console Google Cloud.
  5. Esposizione e accesso all'applicazione di esempio.

Per semplificare la guida rapida e non avere più percorsi diversi, sono state effettuate le seguenti scelte:

  • Attivazione dell'autorità di certificazione Anthos Service Mesh (Mesh CA).
  • Deployment di un gateway in entrata per esporre l'applicazione.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Al termine di questa guida rapida, puoi evitare di continuare la fatturazione eliminando il cluster. Per ulteriori informazioni, consulta Pulizia.

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Kubernetes Engine API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Kubernetes Engine API.

    Enable the API

  8. Prendi nota dell'ID progetto.

Sebbene Anthos Service Mesh richieda altre API, asmcli le consente al posto tuo. Per mantenere bassi i costi di fatturazione, lo script asmcli non abilita l'API GKE Enterprise. Esistono alcune piccole differenze nella console Google Cloud quando è abilitata l'API GKE Enterprise. Per saperne di più su queste differenze, consulta Differenze tra le UI di GKE Enterprise e Anthos Service Mesh.

Installa gli strumenti richiesti

Puoi eseguire lo strumento su Cloud Shell o sulla tua macchina locale che esegue Linux. Cloud Shell preinstalla tutti gli strumenti necessari. Tieni presente che macOS non è supportato perché include una versione precedente di bash.

Cloud Shell

Cloud Shell esegue il provisioning di una macchina virtuale (VM) Compute Engine g1-small che esegue un sistema operativo Linux basato su Debian. I vantaggi dell'utilizzo di Cloud Shell sono:

  • Cloud Shell include gcloud, kubectl, kpt e gli altri strumenti a riga di comando necessari.

  • La directory $HOME di Cloud Shell ha 5 GB di spazio di archiviazione permanente.

  • Puoi scegliere gli editor di testo:

    • Editor di codice, a cui puoi accedere facendo clic su nella parte superiore della finestra di Cloud Shell.

    • Emacs, Vim o Nano, a cui accedi dalla riga di comando in Cloud Shell.

In the Google Cloud console, activate Cloud Shell.

Activate Cloud Shell

At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

Computer Linux locale

  1. Assicurati di avere installato i seguenti strumenti:

  2. Esegui l'autenticazione con Google Cloud CLI:

    gcloud auth login --project PROJECT_ID
    
  3. Aggiorna i componenti:

    gcloud components update
    
  4. Assicurati che git sia nel tuo percorso in modo che kpt possa trovarlo.

crea un cluster GKE

  1. Esegui questo comando per creare il cluster con il numero minimo di vCPU richieste da Anthos Service Mesh. Nel comando, sostituisci i segnaposto con le seguenti informazioni:

    • CLUSTER_NAME: il nome del tuo cluster. Il nome può contenere solo caratteri alfanumerici minuscoli e -, deve iniziare con una lettera, terminare con un carattere alfanumerico e non deve superare i 40 caratteri.
    • PROJECT_ID: l'ID progetto in cui verrà creato il cluster.
    • CLUSTER_LOCATION: la zona per il cluster, ad esempio us-central1-a.
    gcloud container clusters create CLUSTER_NAME \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION \
        --machine-type=e2-standard-4 \
        --num-nodes=2 \
        --workload-pool=PROJECT_ID.svc.id.goog
    

    La creazione del cluster richiede diversi minuti. Durante la creazione del cluster, il comando gcloud mostra quanto segue:

    Creating cluster CLUSTER_NAME in CLUSTER_LOCATION...working...
    

    L'output previsto una volta creata correttamente è simile al seguente:

    Creating cluster CLUSTER_NAME in CLUSTER_LOCATION...done.
    Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/CLUSTER_LOCATION/clusters/CLUSTER_NAME].
    To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/CLUSTER_LOCATION/CLUSTER_NAME?project=PROJECT_ID
    kubeconfig entry generated for CLUSTER_NAME.
    NAME: CLUSTER_NAME
    LOCATION: CLUSTER_LOCATION
    MASTER_VERSION: 1.20.10-gke.1600
    MASTER_IP: 198.51.100.1
    MACHINE_TYPE: e2-standard-4
    NODE_VERSION: 1.20.10-gke.1600
    NUM_NODES: 2
    STATUS: RUNNING
    
  2. Ottieni credenziali di autenticazione per interagire con il cluster.

    gcloud container clusters get-credentials CLUSTER_NAME \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION
    

    Output previsto:

    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for CLUSTER_NAME.
    
  3. Imposta il contesto attuale per kubectl nel cluster.

    kubectl config set-context CLUSTER_NAME
    

    Output previsto:

    Context "CLUSTER_NAME" created.
    

Scarica asmcli

In questa sezione viene descritto come scaricare asmcli.

  1. Scarica la versione che installa Anthos Service Mesh 1.12.9 nella directory di lavoro attuale:

    curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.12 > asmcli
    

    Output previsto:

    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
    100  167k  100  167k    0     0   701k      0 --:--:-- --:--:-- --:--:--  701k
    
  2. Rendi eseguibile lo script:

    chmod +x asmcli
    

Installazione di Anthos Service Mesh

Esegui lo strumento asmcli con le seguenti opzioni per installare Anthos Service Mesh sul cluster che hai creato in precedenza. Se non hai chiuso questa pagina da quando hai creato il cluster, i segnaposto contengono i valori che hai inserito per il comando gcloud container clusters create.

./asmcli install \
  --project_id PROJECT_ID \
  --cluster_name CLUSTER_NAME \
  --cluster_location CLUSTER_LOCATION \
  --fleet_id FLEET_PROJECT_ID \
  --output_dir DIR_PATH \
  --enable_all \
  --ca mesh_ca
  • --project_id, --cluster_name e --cluster_location Specifica l'ID progetto in cui si trova il cluster, il nome del cluster e la zona o la regione del cluster.
  • --fleet_id L'ID progetto del progetto host del parco risorse. Se non includi questa opzione, asmcli utilizza il progetto in cui è stato creato il cluster durante la registrazione del cluster.
  • --output_dir Includi questa opzione per specificare una directory in cui asmcli scarica il pacchetto anthos-service-mesh ed estrae il file di installazione, che contiene istioctl, esempi e file manifest. In caso contrario, asmcli scarica i file in una directory tmp. Puoi specificare un percorso relativo o un percorso completo. La variabile di ambiente $PWD non funziona in questo caso.
  • --enable_all Consente allo script di:
    • Concedi le autorizzazioni IAM richieste.
    • Abilita le API di Google richieste.
    • Imposta un'etichetta sul cluster che identifica il mesh.
    • Registra il cluster nel parco risorse, se non è già registrato.

    Il completamento dello strumento asmcli può richiedere diversi minuti. Lo strumento genera messaggi informativi in modo che tu possa seguirne l'avanzamento.

    Output previsto al termine dell'installazione:

    asmcli: Successfully installed ASM.
    

    Esegui il deployment di un gateway in entrata

    Anthos Service Mesh ti offre la possibilità di eseguire il deployment e gestire gateway come parte del tuo mesh di servizi. Un gateway descrive un bilanciatore del carico che opera sul perimetro della rete mesh che riceve connessioni HTTP/TCP in entrata o in uscita. I gateway sono proxy Envoy che ti forniscono un controllo granulare sul traffico in entrata e in uscita dal mesh.

    1. Crea uno spazio dei nomi per il gateway in entrata, se non ne hai già uno. I gateway sono carichi di lavoro degli utenti e, come best practice, non deve essere eseguito il deployment nello spazio dei nomi del piano di controllo. Sostituisci GATEWAY_NAMESPACE con il nome del tuo spazio dei nomi.

      kubectl create namespace GATEWAY_NAMESPACE
      

      Output previsto:

      namespace/GATEWAY_NAMESPACE created
      
    2. Attiva l'inserimento automatico sul gateway. I passaggi richiesti variano a seconda che tu voglia utilizzare le etichette di inserimento predefinite (ad esempio istio-injection=enabled) o l'etichetta di revisione nello spazio dei nomi del gateway. Il tag di revisione e l'etichetta di revisione predefiniti vengono utilizzati dal webhook dell'iniettore sidecar per associare i proxy inseriti a una determinata revisione del piano di controllo.

      Etichette di iniezione predefinite

      Applica le etichette di inserimento predefinite allo spazio dei nomi.

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

      Etichetta revisione

      1. Utilizza il seguente 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'}"
        

        Il comando restituisce l'etichetta di revisione che corrisponde alla versione di Anthos Service Mesh, ad esempio: asm-1129-3

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

        kubectl label namespace GATEWAY_NAMESPACE \
          istio.io/rev=REVISION --overwrite
        

        Output previsto:

        namespace/GATEWAY_NAMESPACE labeled
        
    3. Puoi eseguire il deployment della configurazione del gateway in entrata di esempio che si trova nella directory samples/gateways/istio-ingressgateway/ così com'è oppure modificarla in base alle tue esigenze.

      kubectl apply -n GATEWAY_NAMESPACE \
        -f DIR_PATH/samples/gateways/istio-ingressgateway
      

      Output previsto:

      deployment.apps/istio-ingressgateway created
      poddisruptionbudget.policy/istio-ingressgateway created
      horizontalpodautoscaler.autoscaling/istio-ingressgateway created
      role.rbac.authorization.k8s.io/istio-ingressgateway created
      rolebinding.rbac.authorization.k8s.io/istio-ingressgateway created
      service/istio-ingressgateway created
      serviceaccount/istio-ingressgateway created
      

    Scopri di più sulle best practice per i gateway.

    Esegui il deployment dell'esempio di Boutique online

    L'applicazione di esempio Online Boutique nel repository anthos-service-mesh-packages viene modificata rispetto all'insieme originale di manifest nel repository microservices-demo. Seguendo le best practice, il deployment di ogni servizio viene eseguito in uno spazio dei nomi separato con un account di servizio univoco.

    1. Crea gli spazi dei nomi per l'applicazione:

      kubectl apply -f \
        DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
      

      Output 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
      
    2. Attiva l'iniezione automatica del sidecar (inserimento automatica). L'etichetta di revisione utilizzata qui è la stessa utilizzata per annotare lo spazio dei nomi del gateway in entrata. Applica l'etichetta di revisione agli spazi dei nomi dell'applicazione. Nel seguente comando, REVISION è lo stesso valore che hai utilizzato per annotare lo spazio dei nomi del gateway in entrata.

      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
      
    3. Eseguire il deployment dell'applicazione di esempio nel cluster.

      1. Crea gli account di servizio e i deployment:

        kubectl apply -f \
         DIR_PATH/samples/online-boutique/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
        
      2. Crea i servizi:

        kubectl apply -f \
         DIR_PATH/samples/online-boutique/kubernetes-manifests/services
        

        Output 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 di servizio:

        kubectl apply -f \
         DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
        

        Output previsto:

        serviceentry.networking.istio.io/allow-egress-googleapis created
        serviceentry.networking.istio.io/allow-egress-google-metadata created
        

    Esposizione e accesso all'applicazione

    Esistono diversi modi per esporre l'applicazione. In questa guida, utilizzeremo il gateway in entrata di cui abbiamo eseguito il deployment. Per altri modi per esporre l'applicazione Online Boutique, consulta la sezione Esposizione e accesso all'applicazione nella guida Deployment dell'applicazione di esempio Online Boutique.

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

      kubectl apply -f \
          DIR_PATH/samples/online-boutique/istio-manifests/frontend-gateway.yaml
      

      Output previsto:

      gateway.networking.istio.io/frontend-gateway created
      virtualservice.networking.istio.io/frontend-ingress created
      
    2. Recupera l'indirizzo IP esterno del gateway in entrata e sostituisci i segnaposto con le seguenti informazioni:

      • GATEWAY_SERVICE_NAME: il nome del servizio gateway in entrata. Se hai eseguito il deployment del gateway di esempio senza modifiche, sarebbe istio-ingressgateway.
      • GATEWAY_NAMESPACE: lo spazio dei nomi in cui hai eseguito il deployment del gateway in entrata:
      kubectl get service GATEWAY_SERVICE_NAME \
          -n GATEWAY_NAMESPACE
      

      L'output è simile a questo:

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

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

      http://EXTERNAL_IP/
      

    Visualizza le dashboard del mesh di servizi

    Dopo aver eseguito il deployment dei carichi di lavoro nel tuo cluster con i proxy sidecar inseriti, puoi esplorare le pagine Anthos Service Mesh nella console Google Cloud per vedere tutte le funzionalità di osservabilità offerte da Anthos Service Mesh. Tieni presente che sono necessari circa uno o due minuti per la visualizzazione dei dati di telemetria nella console Google Cloud dopo il deployment dei carichi di lavoro.

    L'accesso ad Anthos Service Mesh nella console Google Cloud è controllato da Identity and Access Management (IAM). Per accedere alle pagine di Anthos Service Mesh, un Proprietario progetto deve concedere agli utenti il ruolo Editor di progetto o Visualizzatore oppure i ruoli più restrittivi descritti in Controllare l'accesso ad Anthos Service Mesh nella console Google Cloud.

    1. Nella console Google Cloud, vai ad Anthos Service Mesh.

      Vai ad Anthos Service Mesh

    2. Seleziona il progetto Google Cloud dall'elenco a discesa nella barra dei menu.

    3. Se disponi di più mesh di servizi, selezionalo dall'elenco a discesa Mesh di servizi.

    Per scoprire di più, consulta Esplorazione di Anthos Service Mesh nella console Google Cloud.

    Esegui la pulizia

    Prima di ripulire, se ti interessa saperne di più sulla TLS reciproca, vedi Anthos Service Mesh con l'esempio: mTLS.

    • Se vuoi mantenere il cluster e rimuovere l'esempio di Boutique online:

      1. Elimina gli spazi dei nomi dell'applicazione:

        kubectl delete -f DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
        

        Output 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 di servizio:

        kubectl delete -f DIR_PATH/samples/online-boutique/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
        
    • Per evitare addebiti aggiuntivi, elimina il cluster:

      1. Esegui questo comando:

        gcloud container clusters delete  CLUSTER_NAME \
            --project=PROJECT_ID \
            --zone=CLUSTER_LOCATION
        
      2. Al prompt Vuoi continuare (Y/n)?, inserisci y.

        Dopo qualche minuto, viene visualizzato il seguente output:

        Deleting cluster CLUSTER_NAME...done.
        Deleted [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/CLUSTER_LOCATION/clusters/CLUSTER_NAME].
        

    Passaggi successivi

    Scopri di più su: