Configuración de Traffic Director con VM e implementación automatizada de Envoy

Antes de seguir las instrucciones de esta guía, revisa Prepárate para la configuración de Traffic Director y asegúrate de que completaste las tareas de requisitos previos descritas en ese documento.

En esta guía, se muestra cómo implementar de forma automática un plano de datos que consiste en proxies de sidecar de Envoy, configurarlo con Traffic Director y verificar la configuración para garantizar que funcione de forma correcta. Este proceso implica lo siguiente:

  1. Crear un servicio de prueba
  2. Implementar un plano de datos simple en Compute Engine con proxies de Envoy
  3. Configurar Traffic Director mediante las API de Compute Engine, que permiten que Traffic Director configure los proxies de sidecar de Envoy
  4. Acceder a una VM que ejecuta un proxy de Envoy y enviar una solicitud a un backend con balanceo de cargas a través del proxy de Envoy

Los ejemplos de configuración en este documento se usan a modo de demostración. Para un entorno de producción, es posible que debas implementar componentes adicionales según el entorno y los requisitos.

Crea el servicio de prueba Hello World

En esta sección, se muestra cómo crear un servicio de prueba simple que muestra el nombre de host de la VM que entregó la solicitud del cliente. El servicio de prueba es simple; es un servidor web implementado en un grupo de instancias administrado de Compute Engine.

Crea la plantilla de instancias para el servicio de prueba Hello World

La plantilla de instancias que crees configura un servidor web de muestra de Apache2 mediante el parámetro startup-script.

Console

  1. En Cloud Console, ve a la página Plantillas de instancias.

    Ir a la página Plantillas de instancias

  2. Haz clic en Crear plantilla de instancias.
  3. En los campos, ingresa la siguiente información:
    • Nombre: td-demo-hello-world-template
    • Disco de arranque: Debian GNU/Linux 10 (buster)
    • Cuenta de servicio: Cuenta de servicio predeterminada de Compute Engine
    • Permiso de acceso: Permitir el acceso total a todas las API de Cloud
  4. Haz clic en Administración, seguridad, discos, redes, usuario único. 1 En la pestaña Herramientas de redes, en el campo Etiquetas de red, agrega la etiqueta td-http-server.
  5. En la pestaña Administración, copia la siguiente secuencia de comandos en el campo Secuencia de comandos de inicio.

    #!/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
    
  6. Haz clic en Crear.

gcloud

Para crear la plantilla de instancias, ingresa el siguiente comando:

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 el grupo de instancias administrado para el servicio Hello World

En esta sección, debes especificar que el grupo de instancias administrado siempre tenga dos instancias del servicio de prueba. Es una sección con fines de demostración. Traffic Director admite grupos de instancias administrados con ajuste de escala automático.

Console

  1. En Cloud Console, ve a la página Grupos de instancias.

    Ir a la página Grupos de instancias

  2. Haz clic en Crear grupo de instancias.
  3. Asegúrate de que esté seleccionado New managed instance group.
  4. Ingresa td-demo-hello-world-mig para el nombre del grupo de instancias administrado y selecciona la zona us-central1-a.
  5. En Plantilla de instancias, selecciona td-demo-hello-world-template, que es la plantilla de instancias que creaste.
  6. En Modo de ajuste de escala automático, selecciona Sin ajuste de escala automático.
  7. En Cantidad de instancias, especifica al menos dos como la cantidad de instancias que deseas crear en el grupo.
  8. Haz clic en Crear.

gcloud

Usa la herramienta de línea de comandos de gcloud para crear un grupo de instancias administrado con la plantilla de instancias que creaste antes.

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

Crea la plantilla de instancias y el grupo de instancias administrado en el que se implementa Envoy

Usa las instrucciones de esta sección a fin de crear una plantilla de instancias y un grupo de instancias administrado para Traffic Director con los proxies de Envoy implementados de forma automática. Los grupos de instancias administrados crean VM de backend nuevas mediante el ajuste de escala automático.

Componentes de software que se ejecutan en tus VM

Los siguientes componentes se instalan en tus VM cuando creas una plantilla de instancias con --service-proxy=enabled.

  • El proxy de Envoy, que configura Traffic Director, se descarga desde un depósito de Cloud Storage dedicado. El depósito contiene objetos binarios del proxy de Envoy de las versiones oficiales de Istio.
  • El agente del proxy de servicio, que inicializa el proxy de Envoy y los componentes del proxy. El agente del proxy de servicio configura la interceptación de tráfico y supervisa el estado del proxy de Envoy cuando se ejecuta una VM. El agente del proxy de servicio también se descarga desde un depósito de Cloud Storage.

Crea la plantilla de instancias

Una plantilla de instancias especifica la configuración de las instancias de VM que se crean en un grupo de instancias administrado. Las marcas que pasas a la plantilla de instancias instalan Envoy y configuran tus instancias de VM de modo que estén listas para Traffic Director.

Para crear una plantilla de instancias de este tipo, ejecuta el siguiente comando:

  gcloud beta compute instance-templates create td-vm-template-auto \
    --service-proxy=enabled
 

Para personalizar la implementación de Envoy, consulta la guía de referencia de la implementación automatizada de Envoy.

Crea el grupo de instancias administrado

Console

  1. En Cloud Console, ve a la página Grupos de instancias.

    Ir a la página Grupos de instancias

  2. Haz clic en Crear un grupo de instancias.
  3. Ingresa td-vm-mig-us-central1 para el nombre del grupo de instancias administrado y selecciona la zona us-central1-a.
  4. En Tipo de grupo, selecciona Managed instance group.
  5. En Plantilla de instancias, selecciona td-vm-template-auto, que es la plantilla de instancias que creaste.
  6. Especifica 2 como la cantidad de instancias que deseas crear en el grupo.
  7. Haz clic en Crear para crear el grupo nuevo.

gcloud

Usa la herramienta de línea de comandos de gcloud para crear un grupo de instancias administrado con la plantilla de instancias que creaste antes.

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

Configura Traffic Director con componentes del balanceo de cargas de Google Cloud

En las instrucciones de esta sección, se muestra cómo configurar Traffic Director para que tus proxies de Envoy balanceen las cargas del tráfico saliente en dos instancias de backend. Debes configurar los siguientes componentes:

Crea la verificación de estado

Usa las siguientes instrucciones para crear una verificación de estado. Para obtener más información, consulta Crea verificaciones de estado.

Console

  1. Ve a la página Verificaciones de estado en Google Cloud Console.
    Ir a la página Verificaciones de estado
  2. Haz clic en Crear verificación de estado.
  3. En el nombre, ingresa td-vm-health-check.
  4. En el protocolo, selecciona HTTP.
  5. Haz clic en Crear.

gcloud

  1. Crea la verificación de estado.

    gcloud compute health-checks create http td-vm-health-check
    
  2. Crea la regla de firewall para la verificación de estado.

    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 td-http-server \
      --rules tcp:80
    

Crea el servicio de backend

Crea el servicio de backend. Si usas la herramienta de línea de comandos de gcloud, debes designarlo como un servicio de backend global con un esquema de balanceo de cargas de INTERNAL_SELF_MANAGED. Agrega la verificación de estado y un grupo de instancias administrado o no administrado al servicio de backend. Ten en cuenta que, en este ejemplo, se usa el grupo de instancias administrado con la plantilla de VM de Compute Engine que ejecuta el servicio HTTP de muestra que se creó con Crea el grupo de instancias administrado.

Console

  1. Ve a la página de Traffic Director en Cloud Console.

    Ir a la página de Traffic Director

  2. En la pestaña Servicios, haz clic en Crear servicio.

  3. Haz clic en Continuar.

  4. Para el nombre del servicio, ingresa td-vm-service.

  5. Selecciona la red de VPC correcta.

  6. Asegúrate de que el Tipo de backend sea Grupos de instancias.

  7. Selecciona td-demo-hello-world-mig, que es el grupo de instancias administrado que creaste y que contiene los backends para el servicio de prueba Hello World.

  8. Ingresa los Números de puerto correctos.

  9. Elige Utilización o Tasa como el Modo de balanceo. El valor predeterminado es Tasa.

  10. Haz clic en Listo.

  11. Selecciona la verificación de estado que creaste o haz clic en Crear otra comprobación de estado y asegúrate de seleccionar HTTP como el protocolo.

  12. En Tiempo de espera para el vaciado de conexiones, establece el valor en 30 segundos o más.

  13. Haz clic en Continuar.

  14. Haz clic en Crear.

gcloud

  1. Crea el servicio de backend.

    gcloud compute backend-services create td-vm-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED \
     --connection-draining-timeout=30s \
     --health-checks td-vm-health-check
    
  2. Agrega los backends al servicio de 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 el mapa de reglas de enrutamiento

El mapa de reglas de enrutamiento define la forma en que Traffic Director enruta el tráfico en tu malla. Como parte del mapa de reglas de enrutamiento, configura una dirección IP virtual (VIP) y un conjunto de reglas de administración de tráfico asociadas, como el enrutamiento basado en el host. Cuando una aplicación envía una solicitud a la VIP, el proxy de Envoy realiza las siguientes acciones:

  1. Intercepta la solicitud.
  2. La evalúa según las reglas de administración de tráfico en el mapa de URL.
  3. Selecciona un servicio de backend basado en el nombre de host de la solicitud.
  4. Elige un backend o extremo asociado con el servicio de backend que se seleccionó.
  5. Envía tráfico a ese backend o extremo.

Para obtener más información sobre la administración del tráfico, consulta Administración avanzada del tráfico.

Console

En Cloud Console, la creación del proxy de destino se combina con la creación de reglas de reenvío. Cuando creas la regla de reenvío, Google Cloud crea de forma automática un proxy HTTP de destino y lo adjunta al mapa de URL.

  1. Ve a la página de Traffic Director en Cloud Console.

    Ir a la página de Traffic Director

  2. En la pestaña Mapas de reglas de enrutamiento, haz clic en Crear mapa de reglas de enrutamiento.

  3. Ingresa un nombre.

  4. Haz clic en Agregar una regla de reenvío.

  5. Para el nombre de la regla de reenvío, ingresa td-vm-forwarding-rule.

  6. Selecciona tu red.

  7. Selecciona tu IP interna. El proxy de Envoy intercepta el tráfico que se envía a esta dirección IP y lo envía al servicio correspondiente, de acuerdo con las reglas de host y de ruta de acceso.

    La regla de reenvío se crea como una regla de reenvío global con load-balancing-scheme configurado como INTERNAL_SELF_MANAGED.

  8. En el campo IP personalizada, escribe 10.0.0.1. Cuando la VM envía tráfico a esta dirección IP, el proxy de Envoy lo intercepta y envía al extremo del servicio de backend correspondiente, de acuerdo con las reglas de administración de tráfico definidas en el mapa de URL.

    Cada regla de reenvío en una red de VPC debe tener una dirección IP y un puerto únicos por red de VPC. Si creas más de una regla de reenvío con la misma dirección IP y puerto en una red de VPC en particular, solo la primera regla de reenvío es válida. Las demás se ignoran. Si 10.0.0.1 no está disponible en tu red, elige una dirección IP diferente.

  9. Asegúrate de que el Puerto esté establecido en 80.

  10. Haz clic en Guardar.

  11. En la sección Reglas de enrutamiento, selecciona Regla sencilla de host y ruta de acceso.

  12. En la sección Reglas de host y ruta de acceso, selecciona td-vm-service como el servicio.

  13. Haz clic en Agregar regla de host y ruta de acceso.

  14. En Hosts, ingresa hello-world.

  15. En Servicio, selecciona td-vm-service.

  16. Haz clic en Guardar.

gcloud

  1. Crea un mapa de URL que use el servicio de backend td-vm-service como la configuración predeterminada.

    gcloud compute url-maps create td-vm-url-map \
       --default-service td-vm-service
    
  2. Crea un comparador de rutas de acceso y una regla de host para enrutar el tráfico de tu servicio según el nombre de host y una ruta. En este ejemplo, se usa service-test como el nombre del servicio y un comparador de rutas de acceso predeterminado que coincide con todas las solicitudes de ruta de acceso para este 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 \
       --path-matcher-name=td-vm-path-matcher \
       --hosts=hello-world
    
  3. Crea el proxy HTTP de destino.

    gcloud compute target-http-proxies create td-vm-proxy \
       --url-map=td-vm-url-map
    
  4. Crea la regla de reenvío.

    La regla de reenvío debe ser global y debe crearse con el valor de load-balancing-scheme establecido como 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
    

En este punto, Traffic Director está configurado para balancear las cargas del tráfico de los servicios especificados en el mapa de URL en los backends del grupo de instancias administrado.

Verifica la configuración

En esta parte final de la guía de configuración de Traffic Director para las VM de Compute Engine, debes probar que el tráfico enviado desde la VM de cliente destinado a la VIP de la regla de reenvío se intercepte y redireccione al proxy de Envoy, que, luego, enrutará tu solicitud a las VM en las que se encuentra el servicio Hello World.

Para hacerlo, debes acceder a la VM de cliente que se configuró a fin de interceptar el tráfico y redireccionarlo a Envoy. Debes enviar una solicitud curl a la VIP asociada con tu mapa de reglas de enrutamiento. Envoy inspecciona la solicitud curl, determina en qué servicio se debe resolver y envía la solicitud a un backend asociado con ese servicio.

  1. En Cloud Console, ve a la página Grupos de instancias.

    Ir a la página Grupos de instancias

  2. Selecciona el grupo de instancias td-vm-mig-us-central1.
  3. En la sección Resumen de la VM, en Conectar, haz clic en SSH.
  4. Después de acceder a la VM de cliente, usa la herramienta de curl para enviar una solicitud al servicio Hello World a través de Envoy:
curl -H "Host: hello-world" http://10.0.0.1/

Si emites este comando repetidas veces, deberías ver diferentes respuestas HTML que contengan los nombres de host de los backends en el grupo de instancias administrado de Hello World. Esto se debe a que Envoy usa el balanceo de cargas round robin, el algoritmo de balanceo de cargas predeterminado, cuando envía tráfico a los backends del servicio Hello World.

Próximos pasos

Según la distribución de los microservicios en la red, es posible que debas agregar más reglas de reenvío o más reglas de host y ruta de acceso al mapa de URL. Para obtener más información sobre las reglas de reenvío y los mapas de URL, consulta los siguientes documentos: