Configura Traffic Director con implementación manual de Envoy y VM

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

Descripción general del proceso de configuración

En esta sección, se proporciona el proceso de configuración manual para los servicios que se ejecutan en las VM de Compute Engine. El proceso de configuración para las VM cliente consiste en configurar un proxy de sidecar y la interceptación de tráfico en un host de VM de Compute Engine. Luego, configura el balanceo de cargas con las API de balanceo de cargas de Google Cloud.

En esta sección, se proporciona información sobre cómo obtener y, luego, insertar proxies de Envoy de fuentes de terceros que no administra Google.

Cuando una aplicación envía tráfico al servicio configurado en Traffic Director, el tráfico se intercepta y redirecciona al proxy de sidecar compatible con la API de xDS y, luego, se balancea la carga a los backends según la configuración de los componentes de balanceo de cargas de GCP. Para obtener más información sobre las redes de host y la intercepción de tráfico, consulta Cómo funcionan la intercepción de tráfico y el balanceo de cargas en Traffic Director.

Para cada host de VM que requiere acceso a los servicios de Traffic Director, sigue estos pasos:

  1. Asigna una cuenta de servicio a la VM.

  2. Configura el permiso de acceso a la API de la VM para permitir el acceso completo a las API de Google Cloud.

    • Cuando crees las VM, en Identidad y acceso a la API, haz clic en Permitir el acceso total a todas las API de Cloud.

      Ir a la página Instancias de VM

    • Con la herramienta de línea de comandos de gcloud, especifica lo siguiente:

      --scopes=https://www.googleapis.com/auth/cloud-platform.

  3. Permite conexiones salientes a trafficdirector.googleapis.com (TCP, puerto 443) desde la VM, para que el proxy de sidecar pueda conectarse al plano de control de Traffic Director mediante gRPC. Las conexiones salientes al puerto 443 están habilitadas de forma predeterminada.

  4. Implementa un proxy de sidecar compatible con la API de xDS (como Envoy), con una configuración de arranque que apunte a trafficdirector.googleapis.com:443 como su servidor xDS. Consulta este archivo de configuración de arranque de muestra como ejemplo.

  5. Redirecciona el tráfico de IP que está destinado a los servicios hacia el puerto del objeto de escucha de intercepción del proxy de sidecar.

    1. El puerto del objeto de escucha de intercepción del proxy de sidecar se define como TRAFFICDIRECTOR_INTERCEPTION_PORT en la configuración de metadatos de arranque del proxy y se establece en 15001 en el archivo de configuración de arranque de muestra.
    2. La secuencia de comandos iptables de Istio se puede usar para configurar la intercepción de tráfico.

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
    • Permisos 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 de 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 como 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 de forma manual una plantilla de instancias y un grupo de instancias administrado para Traffic Director.

Los grupos de instancias administrados crean VM de backend nuevas mediante el ajuste de escala automático.

En este ejemplo, se muestra cómo realizar las siguientes acciones:

  • Crear una plantilla de VM con una configuración completa de Envoy y un servicio de muestra que entregue su nombre de host mediante el protocolo HTTP
  • Configurar un grupo de instancias administrado con esta plantilla

Crea la plantilla de instancias

Primero, crea la plantilla de instancia de VM de Compute Engine. Esta plantilla configura de forma automática el proxy de sidecar de Envoy y el servicio web de muestra de Apache2 a través del 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. Completa los campos de la siguiente manera:

    • Nombre: td-vm-template
    • Disco de arranque: Debian GNU/Linux 9 (stretch)
    • Cuenta de servicio: Cuenta de servicio predeterminada de Compute Engine
    • Permisos de acceso: Permitir el acceso total a todas las API de Cloud
  4. En Firewall, selecciona las casillas junto a Permitir tráfico HTTP y Permitir tráfico HTTPS.

  5. Haz clic en Administración, seguridad, discos, redes, usuario único.

  6. En la pestaña Administración, copia la siguiente secuencia de comandos en el campo Secuencia de comandos de inicio.

    
    #! /bin/bash
    # Add a system user to run Envoy binaries. Login is disabled for this user
    sudo adduser --system --disabled-login envoy
    # Download and extract the Traffic Director tar.gz file
    sudo wget -P /home/envoy https://storage.googleapis.com/traffic-director/traffic-director.tar.gz
    sudo tar -xzf /home/envoy/traffic-director.tar.gz -C /home/envoy
    sudo cat << END > /home/envoy/traffic-director/sidecar.env
    ENVOY_USER=envoy
    # Exclude the proxy user from redirection so that traffic doesn't loop back
    # to the proxy
    EXCLUDE_ENVOY_USER_FROM_INTERCEPT='true'
    # Intercept all traffic by default
    SERVICE_CIDR='*'
    GCP_PROJECT_NUMBER=''
    VPC_NETWORK_NAME=''
    ENVOY_PORT='15001'
    ENVOY_ADMIN_PORT='15000'
    LOG_DIR='/var/log/envoy/'
    LOG_LEVEL='info'
    XDS_SERVER_CERT='/etc/ssl/certs/ca-certificates.crt'
    END
    sudo apt-get update -y
    sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y
    sudo curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
    sudo add-apt-repository 'deb [arch=amd64] https://download.docker.com/linux/debian stretch stable' -y
    sudo apt-get update -y
    sudo apt-get install docker-ce apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html
    sudo /home/envoy/traffic-director/pull_envoy.sh
    sudo /home/envoy/traffic-director/run.sh start
    
    
  7. Haz clic en Crear para crear la plantilla.

gcloud

  1. Crea la plantilla de instancias.

    
    gcloud compute instance-templates create td-vm-template \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=http-td-tag,http-server,https-server \
      --image-family=debian-9 \
      --image-project=debian-cloud \
      --metadata=startup-script="#! /bin/bash
    
    # Add a system user to run Envoy binaries. Login is disabled for this user
    sudo adduser --system --disabled-login envoy
    # Download and extract the Traffic Director tar.gz file
    sudo wget -P /home/envoy https://storage.googleapis.com/traffic-director/traffic-director.tar.gz
    sudo tar -xzf /home/envoy/traffic-director.tar.gz -C /home/envoy
    sudo cat << END > /home/envoy/traffic-director/sidecar.env
    ENVOY_USER=envoy
    # Exclude the proxy user from redirection so that traffic doesn't loop back
    # to the proxy
    EXCLUDE_ENVOY_USER_FROM_INTERCEPT='true'
    # Intercept all traffic by default
    SERVICE_CIDR='*'
    GCP_PROJECT_NUMBER=''
    VPC_NETWORK_NAME=''
    ENVOY_PORT='15001'
    ENVOY_ADMIN_PORT='15000'
    LOG_DIR='/var/log/envoy/'
    LOG_LEVEL='info'
    XDS_SERVER_CERT='/etc/ssl/certs/ca-certificates.crt'
    END
    sudo apt-get update -y
    sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y
    sudo curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
    sudo add-apt-repository 'deb [arch=amd64] https://download.docker.com/linux/debian stretch stable' -y
    sudo apt-get update -y
    sudo apt-get install docker-ce apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html
    sudo /home/envoy/traffic-director/pull_envoy.sh
    sudo /home/envoy/traffic-director/run.sh start"
    
    

Crea el grupo de instancias administrado

Si no tienes un grupo de instancias administrado con servicios en ejecución, crea un grupo de instancias administrado con una plantilla de VM como la que se muestra en la sección anterior. En este ejemplo, se usa la plantilla de instancias que se creó en la sección anterior para demostrar la funcionalidad. No tienes que usar la plantilla de instancias.

Console

  1. Ve a la página Grupos de instancias en Cloud Console.

    Ir a la página Grupos de instancias

  2. Haz clic en Crear un grupo de instancias. De forma predeterminada, verás la página para crear un grupo de instancias administrado.
  3. Ingresa td-vm-mig-us-central1 como el nombre del grupo de instancias administrado y selecciona la zona us-central1-a.
  4. En Plantilla de instancias, selecciona la plantilla que creaste.
  5. Especifica 2 como la cantidad de instancias que deseas crear en el grupo.
  6. 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-vm-mig-us-central1 \
    --zone us-central1-a --size=2 --template=td-vm-template

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 los 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
  1. Crea la regla de firewall.

    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 http-td-tag,http-server,https-server \
      --rules tcp
    

Crea el servicio de backend

Si usas la herramienta de línea de comandos de gcloud, debes designar el servicio de backend 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 el grupo de instancias administrado que creaste.

  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.

  12. Haz clic en Guardar y continuar.

  13. Haz clic en Crear.

gcloud

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.

Usa estas instrucciones a fin de crear la regla de enrutamiento, la regla de reenvío, el proxy de destino y la dirección IP interna para la configuración de Traffic Director.

El proxy de Envoy intercepta el tráfico que se envía a la dirección IP interna 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.

Puedes configurar la dirección de la regla de reenvío como 0.0.0.0. Si lo haces, el tráfico se enruta según el nombre de host HTTP y la información de la ruta configurada en el mapa de URL, sin importar la dirección IP de destino real de la solicitud. En este caso, los nombres de host de los servicios, como se configuran en las reglas del host, deben ser únicos dentro de la configuración de la malla de servicios. Es decir, no puedes tener dos servicios diferentes, con conjuntos de backends diferentes, que tengan el mismo nombre de host.

Como alternativa, puedes habilitar el enrutamiento según la VIP de destino real del servicio. Si configuras el VIP del servicio como un parámetro address de la regla de reenvío, solo las solicitudes dirigidas a esta dirección se enrutan según los parámetros HTTP especificados en el mapa de URL.

En este ejemplo, se usa 0.0.0.0 como el parámetro de dirección, lo que significa que el enrutamiento del servicio solo se realiza según los parámetros de rutas de acceso y los nombres de host HTTP.

Console

En Cloud Console, el proxy de destino se combina con la regla 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 lo 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.

    gcloud compute url-maps create td-vm-url-map \
       --default-service td-vm-service
    
  2. Crea un comparador de rutas de acceso de mapa de URL y una regla de host para enrutar el tráfico del 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 hace coincidir 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 --hosts service-test \
       --path-matcher-name td-vm-path-matcher
       --new-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 cliente destinado a la VIP de la regla de reenvío se intercepte y redireccione al proxy de Envoy, que, luego, enrutará la solicitud a las VM que alojan al servicio Hello World.

A fin de hacer esto, debes acceder a la VM cliente que se configuró para interceptar el tráfico y redireccionarlo a Envoy. Debes enviar una solicitud curl a la VIP asociada con el 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 Conectar, haz clic en SSH.
  4. Después de acceder a la VM cliente, usa la herramienta 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:

Verifica la configuración

Cuando se completa la configuración, cada VM de Compute Engine que tiene un proxy de sidecar puede acceder a los servicios configurados en Traffic Director mediante el protocolo HTTP.

Si seguiste los ejemplos específicos de esta guía, con la plantilla de VM de Compute Engine con el servidor HTTP de demostración y el nombre de host service-test del servicio, sigue estos pasos para verificar la configuración.

  1. Accede a uno de los hosts de VM que tenga instalado un proxy de sidecar.
  2. Ejecuta el comando curl -H 'Host: service-test' 10.0.0.1: Esta solicitud muestra el nombre de host del backend del grupo de instancias administrado que entregó la solicitud.

En el paso 2, ten en cuenta que puedes usar cualquier dirección IP. Por ejemplo, el comando curl -I -H 'Host: service-test' 1.2.3.4 funcionaría en el paso 2.

Esto se debe a que la regla de reenvío tiene configurado el parámetro de dirección en 0.0.0.0, lo que indica a Traffic Director que debe hacer coincidir en función del host definido en el mapa de URL. En la configuración de ejemplo, el nombre del host es service-test.