Esegui il provisioning di Cloud Service Mesh su un cluster GKE Autopilot


Questa guida descrive come configurare Cloud Service Mesh gestito su una Cluster Autopilot di Google Kubernetes Engine (GKE). Cloud Service Mesh è un mesh di servizi completamente gestiti basato su Istio.

Questo tutorial mostra come configurare un mesh di servizi pronto per la produzione in esecuzione su un singolo cluster GKE Autopilot con impostazioni predefinite. Ti consigliamo di consultare anche la versione Guida al provisioning di Cloud Service Mesh quando progetti il tuo ambiente.

Vantaggi dell'esecuzione di Cloud Service Mesh gestito con GKE Autopilot

Quando usi GKE in modalità Autopilot, Google gestisce per configurare e gestire il cluster automaticamente. Modalità Autopilot semplifica l'esperienza di gestione di un cluster e ti consente di concentrarti diverse applicazioni. Allo stesso modo, Cloud Service Mesh gestito è un servizio mesh di servizi di cui puoi eseguire il provisioning seguendo alcuni passaggi.

  • Esegui il provisioning di Cloud Service Mesh gestito utilizzando API Fleet, senza la necessità per gli strumenti lato client come istioctl.
  • Cloud Service Mesh inserisce automaticamente i proxy sidecar nei carichi di lavoro senza dover concedere privilegi elevati ai container.
  • Puoi visualizzare dashboard avanzate per la tua rete mesh e i tuoi servizi senza alcun bisogno configurazione aggiuntiva e poi utilizzare queste metriche per configurare il livello di servizio (SLO) e avvisi per monitorare l'integrità delle tue applicazioni
  • L'upgrade del piano di controllo Cloud Service Mesh gestito viene eseguito automaticamente a assicurati di avere a disposizione le patch e le funzionalità di sicurezza più recenti
  • Il piano dati gestito di Cloud Service Mesh esegue automaticamente l'upgrade del file collaterale nei tuoi carichi di lavoro, in modo che non sia necessario riavviare i servizi quando sono disponibili upgrade del proxy e patch di sicurezza
  • Cloud Service Mesh è un prodotto supportato e può essere configurato utilizzando le API Istio open source standard. Consulta: funzionalità supportate.

Obiettivi

  • Crea un cluster GKE Autopilot
  • Esegui il provisioning di Cloud Service Mesh gestito utilizzando l'API Fleet
  • Esegui il deployment dei gateway mesh in entrata in uno spazio dei nomi dedicato
  • Deployment di un'applicazione di esempio
  • Configurare Cloud Service Mesh per applicare il protocollo TLS reciproco rigoroso (mTLS) autenticazione per le comunicazioni tra servizi
  • Visualizzare le dashboard di Cloud Service Mesh e verificare che i servizi si connettano mTLS

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

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

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

Cloud Shell è preinstallato con il software di cui hai bisogno per questo tutorial, inclusi kubectl, gcloud CLI, Helm, e Terraform. Se non utilizzi Cloud Shell, devi installare gcloud CLI.

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  6. Install the Google Cloud CLI.
  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  9. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  10. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/container.containerAdmin, roles/gkehub.admin, roles/serviceusage.serviceUsageAdmin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:[email protected].

    • Replace ROLE with each individual role.

Configura l'ambiente

Puoi configurare il tuo ambiente utilizzando gcloud CLI o Terraform.

gcloud

  1. Imposta le variabili di ambiente:

    PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    
  2. Abilita l'API Mesh:

    gcloud services enable mesh.googleapis.com
    

    L'abilitazione di mesh.googleapis.com abilita le seguenti API:

    API Finalità Può essere disattivato
    meshconfig.googleapis.com Cloud Service Mesh utilizza l'API di configurazione mesh per inoltrare di configurazione automatica dal mesh a Google Cloud. Inoltre, l'abilitazione dell'API Mesh Configuration ti consente di accedere ai alle pagine Cloud Service Mesh nella console Google Cloud e per utilizzare dell'autorità di certificazione Cloud Service Mesh. No
    meshca.googleapis.com Contenuti correlati all'autorità di certificazione Cloud Service Mesh utilizzata da Cloud Service Mesh gestito. No
    container.googleapis.com Necessaria per creare cluster Google Kubernetes Engine (GKE). No
    gkehub.googleapis.com Necessaria per gestire la rete mesh come flotta. No
    monitoring.googleapis.com Necessaria per acquisire dati di telemetria per i carichi di lavoro mesh. No
    stackdriver.googleapis.com Necessaria per utilizzare l'UI dei Servizi. No
    opsconfigmonitoring.googleapis.com Richiesta per utilizzare l'interfaccia utente dei servizi al di fuori di Google Cloud cluster. No
    connectgateway.googleapis.com Obbligatorio per il piano di controllo Cloud Service Mesh gestito possono accedere ai carichi di lavoro mesh. Sì*
    trafficdirector.googleapis.com Abilita un piano di controllo gestito scalabile e a disponibilità elevata. Sì*
    networkservices.googleapis.com Abilita un piano di controllo gestito scalabile e a disponibilità elevata. Sì*
    networksecurity.googleapis.com Abilita un piano di controllo gestito scalabile e a disponibilità elevata. Sì*

Terraform

gcloud config set project PROJECT_ID
GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
export GOOGLE_CLOUD_PROJECT

Crea un cluster GKE

Crea un cluster GKE in modalità Autopilot.

gcloud

  1. Crea un cluster, registrato come membro di un parco risorse:

    gcloud container clusters create-auto asm-cluster \
        --location="us-central1" \
        --enable-fleet
    
  2. Verifica che il cluster sia registrato nel parco risorse:

    gcloud container fleet memberships list
    

    L'output è simile al seguente:

    NAME: asm-cluster
    EXTERNAL_ID: 
    LOCATION: us-central1
    

    Prendi nota del nome dell'appartenenza, perché ti serve per configurare Cloud Service Mesh.

Terraform

Per creare un cluster GKE, puoi utilizzare google_container_cluster risorsa. Hai impostato il blocco fleet in modo che viene aggiunto a un parco risorse quando viene creato.

resource "google_container_cluster" "cluster" {
  name                = "asm-cluster"
  location            = var.region
  deletion_protection = false # Warning: Do not set deletion_protection to false for production clusters

  enable_autopilot = true
  fleet {
    project = data.google_project.project.name
  }
}

data "google_project" "project" {}

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta: Comandi Terraform di base.

Esegui il provisioning del mesh di servizi Cloud gestito

Esegui il provisioning di Cloud Service Mesh gestito utilizzando la funzionalità servicemesh nella l'abbonamento al parco risorse per il tuo cluster.

gcloud

  1. Abilita la funzionalità del parco risorse Cloud Service Mesh sul progetto:

    gcloud container fleet mesh enable
    
  2. Abilita la gestione automatica del mesh:

    gcloud container fleet mesh update \
        --management=automatic \
        --memberships=MEMBERSHIP_NAME \
        --location=us-central1
    

    Sostituisci MEMBERSHIP_NAME con l'abbonamento indicato quando hai verificato che il cluster è registrato nell'istanza parco risorse.

Terraform

Per abilitare l'API mesh, puoi utilizzare la risorsa google_project_service.

Utilizzi la google_gke_hub_feature e google_gke_hub_feature_membership per configurare Cloud Service Mesh gestito sul tuo cluster.

resource "google_project_service" "mesh_api" {
  service = "mesh.googleapis.com"

  disable_dependent_services = true
}

resource "google_gke_hub_feature" "feature" {
  name     = "servicemesh"
  location = "global"

  depends_on = [
    google_project_service.mesh_api
  ]
}

resource "google_gke_hub_feature_membership" "feature_member" {
  location   = "global"
  feature    = google_gke_hub_feature.feature.name
  membership = google_container_cluster.cluster.fleet.0.membership
  membership_location = google_container_cluster.cluster.location
  mesh {
    management = "MANAGEMENT_AUTOMATIC"
  }
}

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta: Comandi Terraform di base.

Verifica che il piano di controllo sia attivo

Attendi fino a quando controlPlaneManagement.state non è ACTIVE. Questo potrebbe possono richiedere fino a 15 minuti.

watch -n 30 gcloud container fleet mesh describe

L'output è simile a questo:

membershipSpecs:
  projects/746296320118/locations/us-central1/memberships/asm-cluster:
    mesh:
      management: MANAGEMENT_AUTOMATIC
membershipStates:
  projects/746296320118/locations/us-central1/memberships/asm-cluster:
    servicemesh:
      controlPlaneManagement:
        details:
        - code: REVISION_READY
          details: 'Ready: asm-managed'
        state: ACTIVE
      dataPlaneManagement:
        details:
        - code: PROVISIONING
          details: Service is provisioning.
        state: PROVISIONING
    state:
      code: OK
      description: 'Revision(s) ready for use: asm-managed.'

La sezione dataPlaneManagement rimane nello stato PROVISIONING fino a quando esegui il deployment del gateway in entrata, perché i cluster Autopilot non dei nodi fino al deployment di un carico di lavoro.

Esegui il deployment di un gateway mesh in entrata

In questa sezione eseguirai il deployment di un gateway mesh in entrata per gestire il traffico in entrata per l'applicazione di esempio. Un gateway in entrata è un bilanciatore del carico che opera al perimetro della rete mesh, riceve connessioni HTTP/TCP in entrata o in uscita.

Esegui il deployment del gateway in uno spazio dei nomi dedicato ed etichetti il deployment in assicurati che il gateway possa essere gestito in modo sicuro e aggiornato automaticamente dal piano di controllo Cloud Service Mesh.

  1. Scarica le credenziali per accedere al cluster:

    gcloud container clusters get-credentials asm-cluster --location=us-central1
    
  2. Crea uno spazio dei nomi per il deployment del gateway:

    kubectl create namespace bank-gateways
    
  3. Aggiungi un'etichetta allo spazio dei nomi in modo che il piano di controllo Cloud Service Mesh venga automaticamente inserisce la configurazione del gateway nel deployment.

    kubectl label namespace bank-gateways istio-injection=enabled
    
  4. Esegui il deployment del gateway in entrata nello spazio dei nomi:

    Helm

    helm repo add istio https://istio-release.storage.googleapis.com/charts
    helm repo update
    helm install --wait --namespace bank-gateways \
        --set resources.requests.cpu=250m \
        --set resources.requests.memory=512Mi \
        --set resources.requests.ephemeral-storage=1Gi \
        --set resources.limits.cpu=250m \
        --set resources.limits.memory=512Mi \
        --set resources.limits.ephemeral-storage=1Gi \
        istio-ingressgateway istio/gateway
    

    kubectl

    kubectl apply -n bank-gateways \
        -k https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages/tree/main/samples/gateways/istio-ingressgateway
    kubectl -n bank-gateway wait "deployment/istio-ingressgateway"  \
        --for=condition=available --timeout=240s
    

    Assicurati di impostare richieste di risorse adeguate quando esegui il deployment in un nell'ambiente di produzione. GKE Autopilot prende in considerazione solo valori delle risorse impostati in requests e non in limits. Il progetto Istio pubblica informazioni su prestazioni e scalabilità.

Esegui il deployment dell'applicazione di esempio

  1. Crea uno spazio dei nomi Kubernetes per il deployment:

    kubectl create namespace bank-sample
    
  2. Aggiungi un'etichetta allo spazio dei nomi in modo che Cloud Service Mesh esegua automaticamente inserisce proxy sidecar nei pod di esempio:

    kubectl label namespace bank-sample istio-injection=enabled
    
  3. Esegui il deployment dell'applicazione di esempio:

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git
    kubectl apply -n bank-sample -f bank-of-anthos/extras/jwt/jwt-secret.yaml
    kubectl apply -n bank-sample -f bank-of-anthos/kubernetes-manifests/
    
  4. Attendi che l'applicazione sia pronta. L'operazione richiederà alcuni minuti.

    watch kubectl -n bank-sample get pods
    

    Quando l'applicazione è pronta, l'output è simile al seguente:

    NAME                                 READY   STATUS    RESTARTS   AGE
    accounts-db-0                        2/2     Running   0          2m16s
    balancereader-5c695f78f5-x4wlz       2/2     Running   0          3m8s
    contacts-557fc79c5-5d7fg             2/2     Running   0          3m7s
    frontend-7dd589c5d7-b4cgq            2/2     Running   0          3m7s
    ledger-db-0                          2/2     Running   0          3m6s
    ledgerwriter-6497f5cf9b-25c6x        2/2     Running   0          3m5s
    loadgenerator-57f6896fd6-lx5df       2/2     Running   0          3m5s
    transactionhistory-6c498965f-tl2sk   2/2     Running   0          3m4s
    userservice-95f44b65b-mlk2p          2/2     Running   0          3m4s
    
  5. Crea risorse Istio Gateway e VirtualService per esporre dietro il gateway in entrata:

    kubectl apply -n bank-sample -f bank-of-anthos/extras/istio/frontend-ingress.yaml
    
  6. Ottieni un link all'applicazione di esempio:

    INGRESS_HOST=$(kubectl -n bank-gateways get service istio-ingressgateway \
        -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo "http://$INGRESS_HOST"
    
  7. In un browser, segui il link per aprire l'applicazione di esempio. Accedi con nome utente e password predefiniti per visualizzare l'applicazione.

Forza l'applicazione di TLS reciproci

Assicurati che sia attivata la modalità TLS reciproco (mTLS) STRICT. Applica un valore predefinito Criterio PeerAuthentication per il mesh nello spazio dei nomi del sistema Istio.

  1. Salva il seguente manifest come mesh-peer-authn.yaml:

    apiVersion: "security.istio.io/v1beta1"
    kind: "PeerAuthentication"
    metadata:
      name: "default"
      namespace: "istio-system"
    spec:
      mtls:
        mode: STRICT
    
  2. Applica il manifest al cluster:

    kubectl apply -f mesh-peer-authn.yaml
    

Puoi eseguire l'override di questa configurazione creando PeerAuthentication risorse in spazi dei nomi specifici.

Esplora le dashboard di Cloud Service Mesh

  1. Nella console Google Cloud, vai a Cloud Service Mesh per visualizzare dashboard per la tua rete mesh:

    Vai a Cloud Service Mesh

  2. Seleziona il progetto dall'elenco a discesa sulla barra dei menu.

    Viene visualizzata una tabella panoramica con tutti i microservizi nel tuo mesh e una visualizzazione grafica delle connessioni tra i microservizi. Per per ogni microservizio, la tabella mostra tre "indicatori aurei":

    • Traffico - richieste al secondo
    • Tasso di errori - una percentuale
    • Latenza: millisecondi

    Queste metriche si basano sul traffico effettivo gestito dalla di microservizi. Il traffico di prova costante viene inviato automaticamente Servizio frontend di un client loadgenerator di cui è stato eseguito il deployment nell'ambito di dell'applicazione di esempio. Cloud Service Mesh invia automaticamente le metriche, log e (facoltativamente) analisi di Google Cloud Observability.

  3. Fai clic sul servizio frontend nella tabella per vedere una dashboard di panoramica per il servizio. Vedi metriche aggiuntive per il servizio e una visualizzazione dei dati e connessioni in uscita. Puoi anche creare un oggetto livello di servizio (SLO) per il monitoraggio e gli avvisi sul servizio.

Verifica che mTLS sia abilitato

Fai clic sul link per la sicurezza. nel riquadro per vedere una panoramica della sicurezza per il servizio frontend. La tabella e la visualizzazione mostrano un'icona lucchetto verde per ogni richiesta in entrata e in uscita tra microservizi. Questa icona indica che utilizza mTLS per l'autenticazione e la crittografia.

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate. in questo tutorial:

Elimina il progetto

    Elimina un progetto Google Cloud:

    gcloud projects delete PROJECT_ID

Elimina le singole risorse

Se hai utilizzato un progetto esistente e non vuoi eliminarlo, elimina il alle singole risorse.

gcloud

  1. Elimina l'applicazione e i gateway di esempio:

    kubectl delete namespace bank-sample
    kubectl delete namespace bank-gateways
    
  2. Segui le istruzioni per disinstallare Cloud Service Mesh

  3. Elimina il cluster GKE:

    gcloud container clusters delete --region us-central1 asm-cluster --quiet
    

Terraform

Elimina le risorse che hai creato con Terraform:

  terraform destroy

Passaggi successivi