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
.
Assicurati di aver rispettato i prerequisiti nelle seguenti guide:
- Preparazione alla configurazione di Traffic Director con Envoy
- Guide alla configurazione del routing del servizio Traffic Director
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
.
Crea la specifica della risorsa
Mesh
e salvala in un file denominatomesh.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.
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
.
Crea il modello di istanza con un servizio HTTP
helloworld
sulla porta80
.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"
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
Crea un controllo di integrità.
gcloud compute health-checks create http http-helloworld-health-check
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
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
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.
Crea la specifica
HTTPRoute
e salvala in un file denominatohttp_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"
Crea la risorsa
HTTPRoute
utilizzando le specifiche nel filehttp_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.
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
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
Accedi alla VM.
gcloud compute ssh td-vm-client
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.