Configurazione di Traffic Director per proxy Envoy con servizi HTTP

Questa guida illustra come configurare Traffic Director con un mesh di servizi basati su proxy Envoy, servizi HTTP e risorse Mesh e HTTPRoute.

Proxy Envoy con risorse HTTPRoute e Mesh
Proxy Envoy con risorse HTTPRoute e Mesh (fai clic per ingrandire)

Assicurati di aver rispettato i prerequisiti nelle seguenti guide:

Configurazione della risorsa Mesh

I proxy Envoy in esecuzione come proxy sidecar ricevono la configurazione del routing dei servizi da Traffic Director. Il nome Mesh è la chiave utilizzata dal proxy sidecar per richiedere la configurazione associata alla risorsa Mesh. Traffic Director fornisce la configurazione del routing al proxy. Il proxy sidecar quindi indirizza il traffico al servizio di backend corretto, affidandosi a parametri delle richieste come nome host, intestazioni e altri configurati nelle risorse Route.

  1. Crea la specifica della risorsa Mesh e salvala in un file denominato mesh.yaml.

    name: sidecar-mesh
    interception_port: 15001
    

Se non lo specifichi nel file mesh.yaml, la porta di intercettazione viene impostata su 15001 per impostazione predefinita.

  1. Crea la risorsa Mesh utilizzando la specifica mesh.yaml.

    gcloud alpha network-services meshes import sidecar-mesh \
      --source=mesh.yaml \
      --location=global
    

Dopo aver creato la risorsa Mesh, Traffic Director è pronto per pubblicare la configurazione, ma poiché non sono ancora definiti servizi, la configurazione è vuota. Il passaggio successivo consiste nella definizione dei servizi e degli allegati.

Configurazione del server HTTP

A scopo dimostrativo, crei un servizio di backend con VM a scalabilità automatica utilizzando i gruppi di istanze gestite come backend. Le VM pubblicano una frase hello world utilizzando il protocollo HTTP sulla porta 80.

  1. Crea il modello di istanza con un servizio HTTP helloworld sulla porta 80.

    gcloud compute instance-templates create td-httpd-vm-template \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=http-td-server \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --metadata=startup-script="#! /bin/bash
    sudo apt-get update -y
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype <html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html"
    
  2. Crea un gruppo di istanze gestite basato sul modello.

    gcloud compute instance-groups managed create http-td-mig-us-east1 \
      --zone=${ZONE} \
      --size=2 \
      --template=td-httpd-vm-template
    
  3. Crea un controllo di integrità.

    gcloud compute health-checks create http http-helloworld-health-check
    
  4. Crea una regola firewall per consentire le connessioni di controllo di integrità in entrata alle istanze nella rete.

    gcloud compute firewall-rules create http-vm-allow-health-checks \
      --network=default \
      --action=ALLOW \
      --direction=INGRESS \
      --source-ranges=35.191.0.0/16,209.85.152.0/22,209.85.204.0/22 \
      --target-tags=http-td-server \
      --rules=tcp:80
    
  5. Crea un servizio di backend globale con uno schema di bilanciamento del carico di INTERNAL_SELF_MANAGED e aggiungi il controllo di integrità.

    gcloud compute backend-services create http-helloworld-service \
      --global \
      --load-balancing-scheme=INTERNAL_SELF_MANAGED \
      --protocol=HTTP \
      --health-checks http-helloworld-health-check
    
  6. Aggiungi il gruppo di istanze gestite al servizio di backend. L'esempio seguente utilizza il gruppo di istanze gestite che hai creato in precedenza. Le VM nel gruppo di istanze gestite eseguono il servizio HTTP di esempio che hai creato.

    gcloud compute backend-services add-backend http-helloworld-service \
      --instance-group=http-td-mig-us-east1 \
      --instance-group-zone=${ZONE} \
      --global
    

Configurazione del routing con HTTPRoute

La risorsa e i servizi Mesh sono configurati. Connettili con una risorsa HTTPRoute che associa un nome host a un servizio di backend.

  1. Crea la specifica HTTPRoute e salvala in un file denominato http_route.yaml.

    name: helloworld-http-route
    hostnames:
    - helloworld-gce
    meshes:
    - projects/$PROJECT_NUMBER/locations/global/meshes/sidecar-mesh
    rules:
    - action:
       destinations:
       - serviceName: "projects/$PROJECT_NUMBER/locations/global/backendServices/http-helloworld-service"
    
  2. Crea la risorsa HTTPRoute utilizzando le specifiche nel file http_route.yaml.

    gcloud alpha network-services http-routes import helloworld-http-route \
      --source=http_route.yaml \
      --location=global
    

Traffic Director è ora configurato per caricare il bilanciamento del traffico dei servizi specificati nella risorsa HTTPRoute tra le VM nel gruppo di istanze gestite.

Creazione di un client HTTP con un proxy sidecar Envoy

Puoi verificare il deployment creando una VM client con un proxy sidecar Envoy che richiede la configurazione di Traffic Director creata in precedenza. Il parametro mesh nel comando gcloud si riferisce alla risorsa Mesh che hai già creato.

  1. Crea un modello di istanza.

    gcloud beta compute instance-templates create td-vm-client-template \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --service-proxy=enabled,mesh=sidecar-mesh
    
  2. Crea una VM con un proxy Envoy connesso a Traffic Director.

    gcloud compute instances create td-vm-client \
      --zone=${ZONE} \
      --source-instance-template td-vm-client-template
    
  3. Accedi alla VM.

    gcloud compute ssh td-vm-client
    
  4. Esegui il comando curl per verificare la connettività HTTP ai servizi di test.

    curl -H "Host: helloworld-gce" http://10.0.0.1/
    

Il comando dovrebbe restituire una risposta da una delle VM nel gruppo di istanze gestite, con il relativo nome host stampato sulla console.