Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

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.

Proxies de Envoy con recursos HTTPRoute y Mesh
Proxies de Envoy conHTTPRoute yMesh Recursos (haz clic para ampliar)

Asegúrate de haber seguido los requisitos de las siguientes guías:

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.

  1. Crea la especificación del recurso Mesh y guárdala en un archivo llamado mesh.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.

  1. 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.

  1. Crea la plantilla de instancias con un servicio HTTP helloworld en el puerto 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 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
    
  3. Cree una verificación de estado.

    gcloud compute health-checks create http http-helloworld-health-check
    
  4. 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
    
  5. 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
    
  6. 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.

  1. Crea la especificación HTTPRoute y guárdala en un archivo llamado 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 el recurso HTTPRoute mediante la especificación en el archivo http_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.

  1. 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
    
  2. 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
    
  3. Accede a la VM.

    gcloud compute ssh td-vm-client
    
  4. 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.