Configurare le VM utilizzando il deployment manuale di Envoy

Questo documento è rivolto agli amministratori di rete che vogliono configurare manualmente Traffic Director. Il processo manuale è un meccanismo legacy destinato solo agli utenti avanzati che configurano Traffic Director con le API di bilanciamento del carico.

Ti consigliamo vivamente di configurare Traffic Director utilizzando le API di routing dei servizi anziché le API di bilanciamento del carico precedenti. Se devi utilizzare le API di bilanciamento del carico, ti consigliamo di utilizzare il deployment automatico di Envoy anziché il processo manuale descritto in questa pagina.

Prima di seguire le istruzioni in questa guida, consulta Prepararsi a configurare Traffic Director con Envoy e assicurati di aver completato le attività preliminari descritte nel documento.

Questa guida mostra come eseguire manualmente il deployment di un piano dati composto da proxy collaterali Envoy con macchine virtuali (VM) Compute Engine, configurarlo utilizzando Traffic Director e come verificare la configurazione per assicurarti che funzioni correttamente. Questa procedura prevede:

  1. Creazione di un servizio di test in corso...
  2. Deployment di un semplice piano dati su Compute Engine mediante proxy Envoy.
  3. È in corso la configurazione di Traffic Director utilizzando le API di Compute Engine, che consentono a Traffic Director di configurare i proxy collaterali di Envoy.
  4. Accedi a una VM che esegue un proxy Envoy e invia 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 all'ambiente e ai requisiti.

Panoramica del processo di configurazione

Questa sezione fornisce il processo di configurazione manuale per i servizi eseguiti sulle VM di Compute Engine. Il processo di configurazione delle VM client consiste nell'impostazione di un proxy sidecar e dell'intercettazione del traffico su un host VM di Compute Engine. Poi configurerai il bilanciamento del carico utilizzando le API di bilanciamento del carico di Google Cloud.

Questa sezione fornisce informazioni su come ottenere e inserire proxy Envoy da origini di terze parti non gestite da Google.

Quando un'applicazione invia traffico al servizio configurato in Traffic Director, il traffico viene intercettato e reindirizzato al proxy sidecar compatibile con l'API xDS, quindi bilanciato il carico verso i backend in base alla configurazione nei componenti di bilanciamento del carico di Google Cloud. Per saperne di più sul networking di host e sull'intercettazione del traffico, consulta Intercettazione del traffico proxy Sidecar in Traffic Director.

Per ogni host di VM che richiede l'accesso ai servizi Traffic Director, esegui questi passaggi:

  1. Assegna un account di servizio alla VM.

  2. Imposta l'ambito di accesso API della VM per consentire l'accesso completo alle API Google Cloud.

    • Quando crei le VM, in Identità e accesso API, fai clic su Consenti l'accesso completo a tutte le API Cloud.

      Vai alla pagina Istanze VM.

    • Con gcloud CLI, specifica quanto segue:

      --scopes=https://www.googleapis.com/auth/cloud-platform.

  3. Consenti le connessioni in uscita a trafficdirector.googleapis.com (TCP, porta 443) dalla VM, in modo che il proxy sidecar possa connettersi al piano di controllo Traffic Director tramite gRPC. Le connessioni in uscita sulla porta 443 sono abilitate per impostazione predefinita.

  4. Esegui il deployment di un proxy sidecar compatibile con l'API xDS (come Envoy), con una configurazione bootstrap che punta a trafficdirector.googleapis.com:443 come il suo server xDS. Per ottenere un file di configurazione di bootstrap di esempio, apri il file fil traffic-director-xdsv3.tar.gz compresso e modifica il file bootstrap_template.yaml in base alle tue esigenze.

  5. Reindirizza il traffico IP destinato ai servizi alla porta del listener di intercettazione proxy sidecar.

Crea il servizio di test Hello World

Questa sezione mostra come creare un semplice servizio di test che restituisca il nome host della VM che ha pubblicato la richiesta del 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 da Compute Engine.

Crea il modello di istanza

Il modello di istanza che crei 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 a Modelli di istanza

  2. Fai clic su Crea modello istanza.
  3. Inserisci le seguenti informazioni nei campi:
    • Nome: td-demo-hello-world-template
    • Disco di avvio: Debian GNU/Linux 10 (buster)
    • 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.
  5. Nella scheda Networking, nel campo Tag di rete, aggiungi il tag td-http-server.
  6. Nella scheda Gestione, copia lo script seguente 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
    
  7. Fai clic su Crea.

gcloud

Crea il 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"

Crea il gruppo di istanze gestite

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

Console

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

    Vai a 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 relativa a 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, ossia il modello di istanza che hai creato.
  6. In Modalità di scalabilità automatica, seleziona Non scalare automaticamente.
  7. In Numero di istanze, specifica almeno due come numero di istanze che vuoi creare nel gruppo.
  8. Fai clic su Crea.

gcloud

Utilizza gcloud CLI per creare un gruppo di istanze gestite con il modello di istanza 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

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

Utilizza le istruzioni in questa sezione per creare manualmente un modello di istanza e un gruppo di istanze gestite per Traffic Director. I gruppi di istanze gestite creano nuove VM di backend utilizzando la scalabilità automatica.

Questo esempio mostra come:

  • Creare un modello di VM con una configurazione Envoy completa e un servizio di esempio che gestisce il suo nome host utilizzando il protocollo HTTP.
  • Configura un gruppo di istanze gestite utilizzando questo modello.

Crea il modello di istanza

Per prima cosa, crea il modello di istanza VM di Compute Engine. Questo modello configura automaticamente il proxy sidecar Envoy e il servizio web apache2 di esempio tramite il parametro startup-script.

Console

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

    Vai a Modelli di istanza

  2. Fai clic su Crea modello istanza.
  3. Compila i campi come segue:

    • Nome: td-vm-template
    • Disco di avvio: Debian GNU/Linux 10 (buster)
    • Account di servizio: account di servizio predefinito di Compute Engine
    • Ambiti di accesso: consenti l'accesso completo a tutte le API Cloud
  4. In Firewall, seleziona le caselle accanto a Consenti traffico HTTP e Consenti traffico HTTPS.

  5. Fai clic su Gestione, Sicurezza, Dischi, Networking, Single-tenancy.

  6. Nella scheda Gestione, copia lo script seguente nel campo Script di avvio.

    #! /usr/bin/env bash
    
    # Set variables
    export ENVOY_USER="envoy"
    export ENVOY_USER_UID="1337"
    export ENVOY_USER_GID="1337"
    export ENVOY_USER_HOME="/opt/envoy"
    export ENVOY_CONFIG="${ENVOY_USER_HOME}/config.yaml"
    export ENVOY_PORT="15001"
    export ENVOY_ADMIN_PORT="15000"
    export ENVOY_TRACING_ENABLED="false"
    export ENVOY_XDS_SERVER_CERT="/etc/ssl/certs/ca-certificates.crt"
    export ENVOY_ACCESS_LOG="/dev/stdout"
    export ENVOY_NODE_ID="$(cat /proc/sys/kernel/random/uuid)~$(hostname -i)"
    export BOOTSTRAP_TEMPLATE="${ENVOY_USER_HOME}/bootstrap_template.yaml"
    export GCE_METADATA_SERVER="169.254.169.254/32"
    export INTERCEPTED_CIDRS="*"
    export GCP_PROJECT_NUMBER=PROJECT_NUMBER
    export VPC_NETWORK_NAME=NETWORK_NAME
    export GCE_ZONE=$(curl -sS -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/zone | cut -d"/" -f4)
    
    # Create system user account for Envoy binary
    sudo groupadd ${ENVOY_USER} \
     --gid=${ENVOY_USER_GID} \
     --system
    sudo adduser ${ENVOY_USER} \
     --uid=${ENVOY_USER_UID} \
     --gid=${ENVOY_USER_GID} \
     --home=${ENVOY_USER_HOME} \
     --disabled-login \
     --system
    
    # Download and extract the Traffic Director tar.gz file
    cd ${ENVOY_USER_HOME}
    sudo curl -sL https://storage.googleapis.com/traffic-director/traffic-director-xdsv3.tar.gz -o traffic-director-xdsv3.tar.gz
    sudo tar -xvzf traffic-director-xdsv3.tar.gz traffic-director-xdsv3/bootstrap_template.yaml \
     -C bootstrap_template.yaml \
     --strip-components 1
    sudo tar -xvzf traffic-director-xdsv3.tar.gz traffic-director-xdsv3/iptables.sh \
     -C iptables.sh \
     --strip-components 1
    sudo rm traffic-director-xdsv3.tar.gz
    
    # Generate Envoy bootstrap configuration
    cat "${BOOTSTRAP_TEMPLATE}" \
     | sed -e "s|ENVOY_NODE_ID|${ENVOY_NODE_ID}|g" \
     | sed -e "s|ENVOY_ZONE|${GCE_ZONE}|g" \
     | sed -e "s|VPC_NETWORK_NAME|${VPC_NETWORK_NAME}|g" \
     | sed -e "s|CONFIG_PROJECT_NUMBER|${GCP_PROJECT_NUMBER}|g" \
     | sed -e "s|ENVOY_PORT|${ENVOY_PORT}|g" \
     | sed -e "s|ENVOY_ADMIN_PORT|${ENVOY_ADMIN_PORT}|g" \
     | sed -e "s|XDS_SERVER_CERT|${ENVOY_XDS_SERVER_CERT}|g" \
     | sed -e "s|TRACING_ENABLED|${ENVOY_TRACING_ENABLED}|g" \
     | sed -e "s|ACCESSLOG_PATH|${ENVOY_ACCESS_LOG}|g" \
     | sed -e "s|BACKEND_INBOUND_PORTS|${BACKEND_INBOUND_PORTS}|g" \
     | sudo tee "${ENVOY_CONFIG}"
    
    # Install Envoy binary
    curl -sL "https://deb.dl.getenvoy.io/public/gpg.8115BA8E629CC074.key" | sudo gpg --dearmor -o /usr/share/keyrings/getenvoy-keyring.gpg
    echo a077cb587a1b622e03aa4bf2f3689de14658a9497a9af2c427bba5f4cc3c4723 /usr/share/keyrings/getenvoy-keyring.gpg | sha256sum --check
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/getenvoy-keyring.gpg] https://deb.dl.getenvoy.io/public/deb/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/getenvoy.list
    sudo apt update
    sudo apt -y install getenvoy-envoy
    
    # Run Envoy as systemd service
    sudo systemd-run --uid=${ENVOY_USER_UID} --gid=${ENVOY_USER_GID} \
     --working-directory=${ENVOY_USER_HOME} --unit=envoy.service \
     bash -c "/usr/bin/envoy --config-path ${ENVOY_CONFIG} | tee"
    
    # Configure iptables for traffic interception and redirection
    sudo ${ENVOY_USER_HOME}/iptables.sh \
     -p "${ENVOY_PORT}" \
     -u "${ENVOY_USER_UID}" \
     -g "${ENVOY_USER_GID}" \
     -m "REDIRECT" \
     -i "${INTERCEPTED_CIDRS}" \
     -x "${GCE_METADATA_SERVER}"
    
  7. Fai clic su Crea per creare il modello.

gcloud

Crea il modello di istanza.

gcloud compute instance-templates create td-vm-template \
  --scopes=https://www.googleapis.com/auth/cloud-platform \
  --tags=http-td-tag,http-server,https-server \
  --image-family=debian-10 \
  --image-project=debian-cloud \
  --metadata=startup-script='#! /usr/bin/env bash

# Set variables
export ENVOY_USER="envoy"
export ENVOY_USER_UID="1337"
export ENVOY_USER_GID="1337"
export ENVOY_USER_HOME="/opt/envoy"
export ENVOY_CONFIG="${ENVOY_USER_HOME}/config.yaml"
export ENVOY_PORT="15001"
export ENVOY_ADMIN_PORT="15000"
export ENVOY_TRACING_ENABLED="false"
export ENVOY_XDS_SERVER_CERT="/etc/ssl/certs/ca-certificates.crt"
export ENVOY_ACCESS_LOG="/dev/stdout"
export ENVOY_NODE_ID="$(cat /proc/sys/kernel/random/uuid)~$(hostname -i)"
export BOOTSTRAP_TEMPLATE="${ENVOY_USER_HOME}/bootstrap_template.yaml"
export GCE_METADATA_SERVER="169.254.169.254/32"
export INTERCEPTED_CIDRS="*"
export GCP_PROJECT_NUMBER=PROJECT_NUMBER
export VPC_NETWORK_NAME=NETWORK_NAME
export GCE_ZONE=$(curl -sS -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/zone | cut -d"/" -f4)

# Create system user account for Envoy binary
sudo groupadd ${ENVOY_USER} \
  --gid=${ENVOY_USER_GID} \
  --system
sudo adduser ${ENVOY_USER} \
  --uid=${ENVOY_USER_UID} \
  --gid=${ENVOY_USER_GID} \
  --home=${ENVOY_USER_HOME} \
  --disabled-login \
  --system
# Download and extract the Traffic Director tar.gz file
cd ${ENVOY_USER_HOME}
sudo curl -sL https://storage.googleapis.com/traffic-director/traffic-director-xdsv3.tar.gz -o traffic-director-xdsv3.tar.gz
sudo tar -xvzf traffic-director-xdsv3.tar.gz traffic-director-xdsv3/bootstrap_template.yaml \
  -C bootstrap_template.yaml \
  --strip-components 1
sudo tar -xvzf traffic-director-xdsv3.tar.gz traffic-director-xdsv3/iptables.sh \
  -C iptables.sh \
  --strip-components 1
sudo rm traffic-director-xdsv3.tar.gz

# Generate Envoy bootstrap configuration
cat "${BOOTSTRAP_TEMPLATE}" \
  | sed -e "s|ENVOY_NODE_ID|${ENVOY_NODE_ID}|g" \
  | sed -e "s|ENVOY_ZONE|${GCE_ZONE}|g" \
  | sed -e "s|VPC_NETWORK_NAME|${VPC_NETWORK_NAME}|g" \
  | sed -e "s|CONFIG_PROJECT_NUMBER|${GCP_PROJECT_NUMBER}|g" \
  | sed -e "s|ENVOY_PORT|${ENVOY_PORT}|g" \
  | sed -e "s|ENVOY_ADMIN_PORT|${ENVOY_ADMIN_PORT}|g" \
  | sed -e "s|XDS_SERVER_CERT|${ENVOY_XDS_SERVER_CERT}|g" \
  | sed -e "s|TRACING_ENABLED|${ENVOY_TRACING_ENABLED}|g" \
  | sed -e "s|ACCESSLOG_PATH|${ENVOY_ACCESS_LOG}|g" \
  | sed -e "s|BACKEND_INBOUND_PORTS|${BACKEND_INBOUND_PORTS}|g" \
  | sudo tee "${ENVOY_CONFIG}"

# Install Envoy binary
curl -sL "https://deb.dl.getenvoy.io/public/gpg.8115BA8E629CC074.key" | sudo gpg --dearmor -o /usr/share/keyrings/getenvoy-keyring.gpg
echo a077cb587a1b622e03aa4bf2f3689de14658a9497a9af2c427bba5f4cc3c4723 /usr/share/keyrings/getenvoy-keyring.gpg | sha256sum --check
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/getenvoy-keyring.gpg] https://deb.dl.getenvoy.io/public/deb/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/getenvoy.list
sudo apt update
sudo apt -y install getenvoy-envoy

# Run Envoy as systemd service
sudo systemd-run --uid=${ENVOY_USER_UID} --gid=${ENVOY_USER_GID} \
  --working-directory=${ENVOY_USER_HOME} --unit=envoy.service \
  bash -c "/usr/bin/envoy --config-path ${ENVOY_CONFIG} | tee"

# Configure iptables for traffic interception and redirection
sudo ${ENVOY_USER_HOME}/iptables.sh \
  -p "${ENVOY_PORT}" \
  -u "${ENVOY_USER_UID}" \
  -g "${ENVOY_USER_GID}" \
  -m "REDIRECT" \
  -i "${INTERCEPTED_CIDRS}" \
  -x "${GCE_METADATA_SERVER}"
'

Crea il gruppo di istanze gestite

Se non hai un gruppo di istanze gestite con servizi in esecuzione, crea un gruppo di istanze gestite utilizzando un modello di VM come quello mostrato nella sezione precedente. Questo esempio utilizza il modello di istanza creato nella sezione precedente per dimostrare la funzionalità. Non è necessario utilizzare il modello di istanza.

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. Per impostazione predefinita, viene visualizzata la pagina per la creazione di un gruppo di istanze gestite.
  3. Scegli Nuovo gruppo di istanze gestite (stateless). Per ulteriori informazioni, consulta la pagina relativa a MIG stateless o stateful.
  4. Inserisci td-vm-mig-us-central1 come nome del gruppo di istanze gestite e seleziona la zona us-central1-a.
  5. In Modello di istanza, seleziona il modello di istanza che hai creato.
  6. Specifica 2 come numero di istanze che vuoi creare nel gruppo.
  7. Fai clic su Crea.

gcloud

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

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

Configura Traffic Director con i componenti di bilanciamento del carico di Google Cloud

Le istruzioni riportate in questa sezione mostrano come configurare Traffic Director in modo che Envoy esegua il proxy del carico del traffico in uscita tra due istanze di backend. Puoi configurare i seguenti componenti:

Crea il controllo di integrità

Segui le istruzioni riportate di seguito per creare un controllo di integrità. Per saperne di più, consulta Creare controlli di integrità.

Console

  1. Nella console Google Cloud, vai alla pagina Controlli di integrità.

    Vai a 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
    
  2. Crea la regola firewall:

    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 http-td-tag,http-server,https-server \
      --rules tcp
    

Crea il servizio di backend

Se utilizzi Google Cloud CLI, devi designare il servizio di backend come servizio di backend globale con uno schema di bilanciamento del carico pari a INTERNAL_SELF_MANAGED. Aggiungi il controllo di integrità e un gruppo di istanze gestite o non gestite al servizio di backend. Tieni presente che questo esempio utilizza il gruppo di istanze gestite con il modello di VM di Compute Engine che esegue il servizio HTTP di esempio creato in Crea il gruppo di istanze gestite.

Console

  1. Nella console Google Cloud, vai alla pagina Traffic Director.

    Vai a Traffic Director

  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 il gruppo di istanze gestite che hai creato.
  8. Inserisci i Numeri di porta corretti.
  9. Scegli Utilizzo o Tariffa come Modalità Bilanciamento. Il valore predefinito è Tariffa.
  10. Fai clic su Fine.
  11. Seleziona il controllo di integrità che hai creato.
  12. Fai clic su Salva e continua.
  13. Fai clic su Crea.

gcloud

  1. Crea il servizio di backend:

    gcloud compute backend-services create td-vm-service \
      --global \
      --load-balancing-scheme=INTERNAL_SELF_MANAGED \
      --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
    

Crea la mappa di regole di routing

La mappa delle regole di routing definisce il modo in cui Traffic Director instrada il traffico nella tua rete mesh.

Utilizza queste istruzioni per creare la regola di route, la regola di forwarding, il proxy di destinazione e l'indirizzo IP interno per la configurazione di Traffic Director.

Il traffico inviato all'indirizzo IP interno 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.

Puoi impostare l'indirizzo della regola di forwarding su 0.0.0.0. In questo caso, il traffico viene instradato in base al nome host HTTP e alle informazioni sul percorso configurate nella mappa dell'URL, a prescindere dall'indirizzo IP di destinazione effettivo della richiesta. In questo caso, i nomi host dei servizi, come configurati nelle regole dell'host, devono essere univoci all'interno della configurazione del mesh di servizi. ovvero non puoi avere due servizi diversi, con insiemi di backend diversi, che utilizzano entrambi lo stesso nome host.

In alternativa, puoi abilitare il routing in base al VIP di destinazione effettivo del servizio. Se configuri il VIP del tuo servizio come parametro address della regola di forwarding, solo le richieste destinate a questo indirizzo vengono instradate in base ai parametri HTTP specificati nella mappa URL.

Questo esempio utilizza 10.0.0.1 come parametro dell'indirizzo, il che significa che il routing per il tuo servizio viene eseguito in base al VIP di destinazione effettivo del servizio.

Console

Nella console Google Cloud, il proxy di destinazione viene combinato con la regola di forwarding. Quando crei la regola di forwarding, Google Cloud crea automaticamente un proxy HTTP di destinazione e lo associa alla mappa URL.

  1. Nella console Google Cloud, vai alla pagina Traffic Director.

    Vai a Traffic Director

  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 Add Forwarding Rule (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 invia a questo indirizzo IP, il proxy Envoy la 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 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. Le 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 utilizza il servizio di backend:

    gcloud compute url-maps create td-vm-url-map \
       --default-service td-vm-service
    
  2. Crea un matcher del percorso della mappa URL e una regola dell'host per instradare il traffico per il tuo servizio in base al nome host e a un percorso. In questo esempio viene utilizzato service-test come nome del servizio e un matcher percorso predefinito che corrisponde a 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 --hosts service-test \
       --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, Traffic Director è configurato per bilanciare il carico del traffico per i servizi specificati nella mappa URL nei backend nel gruppo di istanze gestite.

Verificare la configurazione

In questa parte finale della guida alla configurazione di Traffic Director per le VM di Compute Engine, verificherai che il traffico inviato dalla VM client destinata al VIP della regola di forwarding venga intercettato e reindirizzato al proxy Envoy, che a sua volta instrada la tua richiesta alle VM che ospitano il servizio Hello World.

Per prima cosa, verifica che i backend siano integri seguendo questa procedura:

Console

  1. Nella console Google Cloud, vai alla pagina Traffic Director.

    Vai a Traffic Director

    Il Riepilogo indica se i servizi sono integri.

  2. Fai clic sul nome di un servizio. La pagina Dettagli servizio contiene informazioni sull'integrità dei backend.
  3. Se i backend non sono integri, puoi reimpostarli facendo clic sul nome dei backend e poi su Reimposta nella pagina dei dettagli dell'istanza VM.

gcloud

Utilizza il comando compute backend-services get-health per verificare che i backend siano integri:

gcloud compute backend-services get-health td-vm-service \
    --global \
    --format=get(name, healthStatus)

Dopo aver verificato gli stati di integrità dei backend, accedi alla VM client configurata per intercettare il traffico e reindirizzarlo a Envoy. Invia una richiesta curl al VIP associato alla mappa delle regole di routing. Envoy esamina la richiesta curl, determina a quale servizio deve risolvere e invia la richiesta a un backend associato a quel servizio.

Console

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

    Vai a Gruppi di istanze

  2. Seleziona il gruppo di istanze td-vm-mig-us-central1.
  3. 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/
    

Se invii questo comando ripetutamente, vedrai 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, durante l'invio del traffico ai backend del servizio Hello World.

Al termine della configurazione, ogni VM di Compute Engine che dispone di un proxy sidecar può accedere ai servizi configurati in Traffic Director utilizzando il protocollo HTTP.

Se hai seguito gli esempi specifici riportati in questa guida utilizzando il modello di VM di Compute Engine con il server HTTP dimostrativo e il nome host del servizio service-test, segui questi passaggi per verificare la configurazione:

  1. Accedi a uno degli host VM in cui è installato un proxy sidecar.
  2. Esegui il comando curl -H 'Host: service-test' 10.0.0.1. Questa richiesta restituisce il nome host del backend del gruppo di istanze gestite che ha pubblicato la richiesta.

Nel passaggio 2, puoi utilizzare qualsiasi indirizzo IP. Ad esempio, il comando curl -I -H 'Host: service-test' 1.2.3.4 funzionerebbe nel passaggio 2.

Questo perché la regola di forwarding ha il parametro indirizzo impostato su 0.0.0.0, che indica a Traffic Director di creare una corrispondenza in base all'host definito nella mappa URL. Nella configurazione di esempio, il nome host è service-test.

Passaggi successivi