Configuración de Traffic Director para proxies de Envoy con servicios HTTP
En esta guía, se muestra cómo configurar Traffic Director con una malla de servicios basada en proxy de Envoy, servicios HTTP y recursos Mesh
y HTTPRoute
.
HTTPRoute
yMesh
Recursos (haz clic para ampliar)Asegúrate de haber seguido los requisitos de las siguientes guías:
- Prepárate para configurar Traffic Director con Envoy
- Guías de configuración de enrutamiento de servicio de Traffic Director
Configura el recurso Mesh
Los proxies de Envoy que se ejecutan como sidecars reciben la configuración de enrutamiento del servicio de Traffic Director. El nombre Mesh
es la clave que usa el proxy de sidecar para solicitar la configuración asociada con el recurso Mesh
.
Traffic Director proporciona la configuración de enrutamiento al proxy. Luego, el proxy de sidecar dirige el tráfico al servicio de backend correcto y depende de parámetros de solicitud, como el nombre de host, los encabezados y otros que se configuran en los recursos Route
.
Crea la especificación del recurso
Mesh
y guárdala en un archivo llamadomesh.yaml
.name: sidecar-mesh interception_port: 15001
El puerto de intercepción se establece de forma predeterminada en 15001
si no se especifica en el archivo mesh.yaml
.
Crea el recurso
Mesh
con la especificación de Mesh.yaml.gcloud alpha network-services meshes import sidecar-mesh \ --source=mesh.yaml \ --location=global
Después de crear el recurso Mesh
, Traffic Director está listo para entregar la configuración, pero, como aún no hay servicios definidos, la configuración está vacía. El siguiente paso es definir los servicios y el adjunto.
Configura el servidor HTTP
A modo de demostración, crearás un servicio de backend con VM con ajuste de escala automático mediante grupos de instancias administrados como backends. Las VM entregan una frase hello world
mediante el protocolo HTTP en el puerto 80
.
Crea la plantilla de instancias con un servicio HTTP
helloworld
en el puerto80
.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 grupo de instancias administrado basado en la plantilla.
gcloud compute instance-groups managed create http-td-mig-us-east1 \ --zone=${ZONE} \ --size=2 \ --template=td-httpd-vm-template
Cree una verificación de estado.
gcloud compute health-checks create http http-helloworld-health-check
Crea una regla de firewall para permitir conexiones de verificación de estado entrantes a instancias en tu red.
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 servicio de backend global con un esquema de balanceo de cargas de
INTERNAL_SELF_MANAGED
y agrega la verificación de estado.gcloud compute backend-services create http-helloworld-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --protocol=HTTP \ --health-checks http-helloworld-health-check
Agrega el grupo de instancias administrado al servicio de backend. En el siguiente ejemplo, se usa el grupo de instancias administrado que creaste antes. Las VM en el grupo de instancias administrado ejecutan el servicio HTTP de muestra que creaste.
gcloud compute backend-services add-backend http-helloworld-service \ --instance-group=http-td-mig-us-east1 \ --instance-group-zone=${ZONE} \ --global
Configure el enrutamiento con HTTPRoute
El recurso y los servicios de Mesh
están configurados. Conéctalos mediante un recurso HTTPRoute que asocie un nombre de host con un servicio de backend.
Crea la especificación
HTTPRoute
y guárdala en un archivo llamadohttp_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 el recurso
HTTPRoute
mediante la especificación en el archivohttp_route.yaml
.gcloud alpha network-services http-routes import helloworld-http-route \ --source=http_route.yaml \ --location=global
Traffic Director ahora está configurado para balancear las cargas del tráfico de los servicios especificados en el recurso HTTPRoute en las VM del grupo de instancias administrado.
Crea un cliente HTTP con un sidecar de Envoy
Puedes verificar la implementación mediante la creación de una VM de cliente con un proxy de sidecar de Envoy que solicite la configuración de Traffic Director que se creó antes. El parámetro mesh
en el comando gcloud
hace referencia al recurso Mesh
que ya creaste.
Cree una plantilla de instancias.
gcloud beta compute instance-templates create td-vm-client-template \ --image-family=debian-10 \ --image-project=debian-cloud \ --service-proxy=enabled,mesh=sidecar-mesh
Crear una VM con un proxy de Envoy que esté conectado a Traffic Director
gcloud compute instances create td-vm-client \ --zone=${ZONE} \ --source-instance-template td-vm-client-template
Accede a la VM.
gcloud compute ssh td-vm-client
Ejecuta el comando
curl
para verificar la conectividad HTTP con los servicios de prueba.curl -H "Host: helloworld-gce" http://10.0.0.1/
El comando debe mostrar una respuesta de una de las VM en el grupo de instancias administrado, con su nombre de host impreso en la consola.