Configura le VM di Compute Engine utilizzando il deployment automatico di Envoy

Prima di seguire le istruzioni di questa guida, consulta Preparazione per la configurazione di Cloud Service Mesh e assicurati di aver completato le attività preliminari descritte nel documento. Questo documento riguarda le API precedenti. Se esegui il deployment con le nuove API di routing dei servizi, che sono in anteprima, consulta Configurazione di Cloud Service Mesh per proxy Envoy con servizi HTTP

Questa guida mostra come eseguire automaticamente il deployment di un piano dati composto da proxy sidecar di Envoy, configurarlo utilizzando Cloud Service Mesh e verificare la configurazione per garantire che funzioni correttamente. Questa procedura prevede quanto segue:

  1. Abilitazione dell'API Cloud OS Config.
  2. Creazione di un servizio di test.
  3. Deployment di un piano dati semplice su Compute Engine mediante proxy Envoy (versione 1.18.4 di Envoy, che supporta solo xDS v3).
  4. Configurazione di Cloud Service Mesh utilizzando le API di Compute Engine, che consentono a Cloud Service Mesh di configurare i proxy sidecar di Envoy.
  5. Accedere a una VM che esegue un proxy Envoy e inviare una richiesta a un backend con bilanciamento del carico tramite il proxy Envoy.

Gli esempi di configurazione in questo documento sono a scopo dimostrativo. Per un ambiente di produzione, potrebbe essere necessario eseguire il deployment di componenti aggiuntivi, in base al tuo ambiente e ai tuoi requisiti.

Abilitazione dell'API Cloud OS Config

Assicurati di abilitare l'API Cloud OS Config. Se non lo fai, non puoi installare i componenti richiesti sulle tue VM.

Per farlo:

Console

  1. Nella console Google Cloud, vai ad API e servizi.
    Vai alla pagina della Libreria API
  2. Seleziona il progetto corretto.
  3. Nella casella di ricerca, inserisci API Cloud OS Config e premi Invio.
  4. Seleziona API Cloud OS Config.
  5. Fai clic su Abilita.

gcloud

gcloud services enable osconfig.googleapis.com

Creazione del servizio di test Hello World in corso...

Questa sezione mostra come creare un semplice servizio di test che restituisca il nome host della VM che ha gestito la richiesta dal client. Il servizio di test non è complicato: si tratta di un server web di cui è stato eseguito il deployment in un gruppo di istanze gestite di Compute Engine.

Creazione del modello di istanza per il servizio di test Hello World in corso...

Il modello di istanza creato configura un server web apache2 di esempio utilizzando il parametro startup-script.

Console

  1. Nella console Google Cloud, vai alla pagina Modelli di istanza.

    Vai ai modelli di istanza

  2. Fai clic su Crea modello istanza.
  3. Nei campi, inserisci le seguenti informazioni:
    • Nome: td-demo-hello-world-template
    • Disco di avvio: scegli un sistema operativo e la versione.
    • Account di servizio: account di servizio predefinito di Compute Engine.
    • Ambiti di accesso: consenti l'accesso completo a tutte le API Cloud
  4. Fai clic su Gestione, sicurezza, dischi, networking, single-tenancy. 1 Nella scheda Networking, nel campo Tag di rete, aggiungi il tag td-http-server.
  5. Nella scheda Gestione, copia il seguente script nel campo Script di avvio.

    #!/bin/bash
    sudo apt-get update -y
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html
    
  6. Fai clic su Crea.

gcloud

Puoi scegliere tra le numerose versioni del sistema operativo. Questo esempio utilizza il valore predefinito Debian 10.

Per creare un modello di istanza:

gcloud compute instance-templates create td-demo-hello-world-template \
  --machine-type=n1-standard-1 \
  --boot-disk-size=20GB \
  --image-family=debian-10  \
  --image-project=debian-cloud \
  --scopes=https://www.googleapis.com/auth/cloud-platform \
  --tags=td-http-server \
  --metadata=startup-script="#! /bin/bash
sudo apt-get update -y
sudo apt-get install apache2 -y
sudo service apache2 restart
sudo mkdir -p /var/www/html/
echo '<!doctype html><html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html"

Creazione del gruppo di istanze gestite per il servizio Hello World

In questa sezione specifichi che il gruppo di istanze gestite ha sempre due istanze del servizio di test. a scopo dimostrativo. Cloud Service Mesh supporta i gruppi di istanze gestite con scalabilità automatica.

Console

  1. Nella console Google Cloud, vai alla pagina Gruppi di istanze.

    Vai alla pagina Gruppi di istanze

  2. Fai clic su Crea gruppo di istanze.
  3. Seleziona Nuovo gruppo di istanze gestite (stateless). Per ulteriori informazioni, consulta la pagina sui MIG stateless o stateful.
  4. Inserisci td-demo-hello-world-mig come nome del gruppo di istanze gestite e seleziona la zona us-central1-a.
  5. In Modello di istanza, seleziona td-demo-hello-world-template, ovvero il modello di istanza che hai creato.
  6. In Modalità di scalabilità automatica, seleziona Off:do not autoscale.
  7. In Numero massimo di istanze, specifica almeno due come numero di istanze da creare nel gruppo.
  8. Fai clic su Crea.

gcloud

Usa gcloud CLI per creare un gruppo di istanze gestite con il modello di istanza che hai creato in precedenza.

gcloud compute instance-groups managed create td-demo-hello-world-mig \
  --zone us-central1-a \
  --size=2 \
  --template=td-demo-hello-world-template

Creazione del modello di istanza e del gruppo di istanze gestite in cui viene eseguito il deployment di Envoy

Utilizza le istruzioni in questa sezione per creare un modello di istanza e un gruppo di istanze gestite per Cloud Service Mesh con proxy Envoy di cui è stato eseguito il deployment automatico. I gruppi di istanze gestite creano nuove VM di backend utilizzando la scalabilità automatica.

Componenti software in esecuzione sulle VM

I componenti seguenti vengono installati sulle VM quando crei un modello di istanza con --service-proxy=enabled.

  • Il proxy Envoy, che è configurato da Cloud Service Mesh, viene scaricato da un bucket Cloud Storage dedicato. Il bucket contiene una build del proxy Envoy fornita da Google.
  • L'agente proxy di servizio, che inizializza il proxy Envoy e i suoi componenti. L'agente proxy di servizio configura l'intercettazione del traffico e monitora l'integrità del proxy Envoy mentre è in esecuzione una VM. L'agente proxy di servizio viene scaricato anche da un bucket Cloud Storage.

L'unica versione di Envoy disponibile è il programma binario di Envoy più recente ospitato in una posizione di Cloud Storage dedicata. Questa versione di Envoy è supportata su Compute Engine Debian, CentOS 7/8 e RHEL 7/8. Durante la riparazione automatica e lo scale up, il gruppo di istanze gestite installa una versione recente di Envoy sulla VM. In alcuni casi, questa versione potrebbe essere più recente rispetto all'Envoy di cui è stato eseguito il deployment in istanze VM create in precedenza. Ciò potrebbe causare un'incoerenza nelle versioni installate nelle VM di un gruppo di istanze gestite. Le versioni incoerenti funzionano correttamente insieme. In caso di aggiornamento della sicurezza per Envoy, ti consigliamo di eseguire l'upgrade del gruppo di istanze gestite utilizzando una sostituzione in sequenza.

Creazione del modello di istanza

Un modello di istanza specifica la configurazione delle istanze VM create in un gruppo di istanze gestite. I flag che passi al modello di istanza installano Envoy e configurano le tue istanze VM in modo che siano pronte per Cloud Service Mesh.

Puoi utilizzare Debian 10/11, CentOS 7/8 o RHEL 7/8 per l'immagine disco di avvio nel modello di istanza.

Per creare questo modello di istanza:

  gcloud compute instance-templates create td-vm-template-auto \
    --image-family=[ debian-10 | centos-7 | centos-8 | rhel-7 | rhel-8 ]  \
    --image-project=[ debian-cloud | centos-cloud |rhel-cloud ] \
    --service-proxy=enabled
 

Per personalizzare il deployment di Envoy, consulta la Guida di riferimento per il deployment di Envoy automatico.

Creazione del gruppo di istanze gestite

Console

  1. Nella console Google Cloud, vai alla pagina Gruppi di istanze.

    Vai a Gruppi di istanze

  2. Fai clic su Crea un gruppo di istanze.
  3. Inserisci td-vm-mig-us-central1 come nome del gruppo di istanze gestite e seleziona la zona us-central1-a.
  4. In Tipo di gruppo, seleziona Gruppo di istanze gestite.
  5. In Modello di istanza, seleziona td-vm-template-auto, il modello di istanza che hai creato.
  6. Specifica 2 come numero di istanze da creare nel gruppo.
  7. Fai clic su Crea per creare il nuovo profilo.

gcloud

Usa gcloud CLI per creare un gruppo di istanze gestite con il modello di istanza che hai creato in precedenza.

 gcloud compute instance-groups managed create td-vm-mig-us-central1 \
    --zone us-central1-a --size=2 --template=td-vm-template-auto

Configurazione di Cloud Service Mesh con i componenti di bilanciamento del carico di Google Cloud

Le istruzioni in questa sezione mostrano come configurare Cloud Service Mesh in modo che i proxy Envoy bilanciano il carico del traffico in uscita tra due istanze di backend. Puoi configurare i seguenti componenti:

Creazione del controllo di integrità

Segui queste istruzioni per creare un controllo di integrità. Per saperne di più, consulta Creazione dei controlli di integrità.

Console

  1. Vai alla pagina Controlli di integrità nella console Google Cloud.
    Vai alla pagina Controlli di integrità
  2. Fai clic su Crea controllo di integrità.
  3. Come nome, inserisci td-vm-health-check.
  4. Come protocollo, seleziona HTTP.
  5. Fai clic su Crea.

gcloud

  1. Crea il controllo di integrità.

    gcloud compute health-checks create http td-vm-health-check
    

Creazione della regola firewall in corso...

Utilizza le istruzioni riportate di seguito per creare la regola firewall necessaria per i probe del controllo di integrità. Per maggiori informazioni, consulta Regole firewall per i controlli di integrità.

Console

  1. Vai alla pagina Criteri firewall nella console Google Cloud.
    Vai alla pagina Criteri firewall
  2. Fai clic su Crea regola firewall.
  3. Nella pagina Crea una regola firewall, fornisci le seguenti informazioni:
    • Nome: fw-allow-health-checks
    • Rete: scegli la rete VPC.
    • Priority. Inserisci un numero per la priorità o 1000 per impostazione predefinita.
    • Direzione del traffico: scegli In entrata.
    • Azione in caso di corrispondenza: scegli consenti.
    • Target: scegli Tag di destinazione specificati e poi inserisci td-http-server nella casella di testo Tag di destinazione.
    • Filtro di origine: scegli il tipo di intervallo IP corretto.
    • Intervalli IP di origine: 35.191.0.0/16,130.211.0.0/22
    • Filtro di destinazione: seleziona il tipo di IP.
    • Protocolli e porte: fai clic su Porte e protocolli specificati, quindi seleziona tcp digita la porta 80

gcloud

  1. Crea la regola firewall per il controllo di integrità.

    gcloud compute firewall-rules create fw-allow-health-checks \
      --action ALLOW \
      --direction INGRESS \
      --source-ranges 35.191.0.0/16,130.211.0.0/22 \
      --target-tags td-http-server \
      --rules tcp:80
    

Creazione del servizio di backend

Creare il servizio di backend. Se utilizzi Google Cloud CLI, devi designarlo come servizio di backend globale con uno schema di bilanciamento del carico di INTERNAL_SELF_MANAGED. Aggiungere il controllo di integrità e un gruppo di istanze gestite o non gestite al servizio di backend. Tieni presente che in questo esempio viene utilizzato il gruppo di istanze gestite con il modello VM di Compute Engine che esegue il servizio HTTP di esempio creato nella sezione Creazione del gruppo di istanze gestite.

Console

  1. Vai alla pagina Cloud Service Mesh nella console Google Cloud.

    Vai alla pagina di Cloud Service Mesh

  2. Nella scheda Servizi, fai clic su Crea servizio.

  3. Fai clic su Continua.

  4. Come nome del servizio, inserisci td-vm-service.

  5. Seleziona la rete VPC corretta.

  6. Assicurati che il Tipo di backend sia Gruppi di istanze.

  7. Seleziona td-demo-hello-world-mig, ovvero il gruppo di istanze gestite che hai creato, contenente i backend per il servizio di test Hello World.

  8. Inserisci i Numeri di porta corretti.

  9. Scegli Utilizzo o Tariffa come Modalità di bilanciamento. Il valore predefinito è Tariffa.

  10. Fai clic su Fine.

  11. Seleziona il controllo di integrità che hai creato o fai clic su Crea un altro controllo di integrità e assicurati di selezionare HTTP come protocollo.

  12. In Timeout per svuotamento della connessione, imposta il valore su 30 secondi o più.

  13. Fai clic su Continua.

  14. Fai clic su Crea.

gcloud

  1. Creare il servizio di backend.

    gcloud compute backend-services create td-vm-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED \
     --connection-draining-timeout=30s \
     --health-checks td-vm-health-check
    
  2. Aggiungi i backend al servizio di backend.

    gcloud compute backend-services add-backend td-vm-service \
      --instance-group td-demo-hello-world-mig \
      --instance-group-zone us-central1-a \
      --global
    

Creazione della mappa di regole di routing

La mappa di regole di routing definisce il modo in cui Cloud Service Mesh instrada il traffico nella tua mesh. Nell'ambito della mappa di regole di routing, devi configurare un indirizzo IP virtuale (VIP) e un insieme di regole di gestione del traffico associate, ad esempio il routing basato su host. Quando un'applicazione invia una richiesta al VIP, il proxy Envoy:

  1. Intercetta la richiesta.
  2. La valuta in base alle regole di gestione del traffico nella mappa URL.
  3. Elegge un servizio di backend in base al nome host nella richiesta.
  4. Sceglie un backend o un endpoint associato al servizio di backend selezionato.
  5. Invia il traffico al backend o all'endpoint.

Per ulteriori informazioni sulla gestione del traffico, vedi Gestione avanzata del traffico.

Console

Nella console Google Cloud, la creazione del proxy di destinazione è combinata con la creazione di regola di forwarding. Quando crei la regola di forwarding, Google Cloud crea automaticamente un proxy HTTP di destinazione e lo allega alla mappa URL.

  1. Vai alla pagina Cloud Service Mesh nella console Google Cloud.

    Vai alla pagina di Cloud Service Mesh

  2. Nella scheda Mappe di regole di routing, fai clic su Crea mappa di regole di routing.

  3. Inserisci un nome.

  4. Fai clic su Aggiungi regola di forwarding.

  5. Come nome della regola di forwarding, inserisci td-vm-forwarding-rule.

  6. Seleziona la tua rete.

  7. Seleziona il tuo IP interno. Il traffico inviato a questo indirizzo IP viene intercettato dal proxy Envoy e inviato al servizio appropriato in base alle regole host e percorso.

    La regola di forwarding viene creata come regola di forwarding globale con load-balancing-scheme impostato su INTERNAL_SELF_MANAGED.

  8. Nel campo IP personalizzato, digita 10.0.0.1. Quando la VM viene inviata a questo indirizzo IP, il proxy Envoy lo intercetta e lo invia all'endpoint del servizio di backend appropriato in base alle regole di gestione del traffico definite nella mappa URL.

    Ogni regola di forwarding in una rete VPC deve avere un indirizzo IP e una porta univoci per ogni rete VPC. Se crei più di una regola di forwarding con lo stesso indirizzo IP e la stessa porta in una determinata rete VPC, sarà valida solo la prima regola di forwarding. Altre vengono ignorate. Se 10.0.0.1 non è disponibile nella tua rete, scegli un indirizzo IP diverso.

  9. Assicurati che la Porta sia impostata su 80.

  10. Fai clic su Salva.

  11. Nella sezione Regole di routing, seleziona Regola host e percorso semplice.

  12. Nella sezione Regole host e percorso, seleziona td-vm-service come servizio.

  13. Fai clic su Aggiungi regola host e percorso.

  14. In Host, inserisci hello-world.

  15. In Servizio, seleziona td-vm-service.

  16. Fai clic su Salva.

gcloud

  1. Crea una mappa URL che utilizzi il servizio di backend td-vm-service come predefinito.

    gcloud compute url-maps create td-vm-url-map \
       --default-service td-vm-service
    
  2. Crea un matcher di percorso e una regola host per instradare il traffico verso il tuo servizio in base al nome host e a un percorso. In questo esempio viene utilizzato td-vm-service come nome del servizio e un matcher di percorso predefinito che soddisfa tutte le richieste di percorso per questo host (/*).

    gcloud compute url-maps add-path-matcher td-vm-url-map \
       --default-service td-vm-service \
       --path-matcher-name td-vm-path-matcher
    
    gcloud compute url-maps add-host-rule td-vm-url-map \
       --path-matcher-name=td-vm-path-matcher \
       --hosts=hello-world
    
  3. Crea il proxy HTTP di destinazione.

    gcloud compute target-http-proxies create td-vm-proxy \
       --url-map=td-vm-url-map
    
  4. Crea la regola di forwarding.

    La regola di forwarding deve essere globale e deve essere creata con il valore load-balancing-scheme impostato su INTERNAL_SELF_MANAGED.

    gcloud compute forwarding-rules create td-vm-forwarding-rule \
       --global \
       --load-balancing-scheme=INTERNAL_SELF_MANAGED \
       --address=10.0.0.1 \
       --target-http-proxy=td-vm-proxy \
       --ports=80 \
       --network=default
    

A questo punto, Cloud Service Mesh è configurato per bilanciare il carico del traffico per i servizi specificati nella mappa URL tra i backend nel gruppo di istanze gestite.

Verifica della configurazione in corso...

In questa parte finale della guida alla configurazione di Cloud Service Mesh per le VM di Compute Engine, verificherai che il traffico inviato dalla VM client destinata al VIP della regola di forwarding viene intercettato e reindirizzato al proxy Envoy, che inoltra la richiesta alle VM che ospitano il servizio Hello World.

Per farlo, accedi alla VM client, che è stata configurata per intercettare il traffico e reindirizzarlo a Envoy. Invia una richiesta curl al VIP associato alla mappa di regole di routing. Envoy controlla la richiesta curl, determina il servizio in cui deve risolversi e invia la richiesta a un backend associato al servizio.

  1. Nella console Google Cloud, vai alla pagina Gruppi di istanze.

    Vai alla pagina Gruppi di istanze

  2. Seleziona il gruppo di istanze td-vm-mig-us-central1.
  3. Nella sezione del riepilogo della VM, in Connetti, fai clic su SSH.
  4. Dopo aver eseguito l'accesso alla VM client, utilizza lo strumento curl per inviare una richiesta al servizio Hello World tramite Envoy:
curl -H "Host: hello-world" http://10.0.0.1/

Quando esegui ripetutamente questo comando, dovresti vedere diverse risposte HTML contenenti i nomi host dei backend nel gruppo di istanze gestite Hello World. Questo perché Envoy utilizza il bilanciamento del carico "round robin", l'algoritmo di bilanciamento del carico predefinito, per l'invio del traffico ai backend del servizio Hello World.

Passaggi successivi