Configura VM de Compute Engine con la implementación automática de Envoy

Este documento se aplica a las API anteriores. Si implementas con las nuevas APIs de enrutamiento de servicios, que están en vista previa, consulta Configuración de Cloud Service Mesh para proxies de Envoy con servicios HTTP.

Antes de seguir las instrucciones de esta guía, completa las tareas de requisitos previos que se describen en Prepárate para configurar las APIs de enrutamiento de servicios con Envoy y cargas de trabajo sin proxy.

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 Cloud Service Mesh y verificar la configuración para garantizar que funcione de forma correcta. Este proceso implica lo siguiente:

  1. Habilita la API de configuración del SO de Cloud.
  2. Crear un servicio de prueba
  3. Implementar un plano de datos simple en Compute Engine con proxies de Envoy (versión 1.18.4 de Envoy, que solo admite xDS v3).
  4. Configurar Cloud Service Mesh con las APIs de Compute Engine, que permiten que Cloud Service Mesh configure los proxies de sidecar de Envoy
  5. 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.

Habilita la API de configuración del SO de Cloud

Asegúrate de habilitar la API de configuración del SO de Cloud. Si no lo haces, no podrás instalar los componentes obligatorios en las VM.

Para ello, haz lo siguiente:

Consola

  1. En la consola de Google Cloud, ve a API y servicios.
    Ir a la página Biblioteca de API
  2. Selecciona el proyecto correcto.
  3. En el cuadro de búsqueda, ingresa Cloud OS Config API y presiona Intro.
  4. Selecciona Cloud OS Config API.
  5. Haz clic en Habilitar.

gcloud

gcloud services enable osconfig.googleapis.com

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 la consola de Google Cloud, ve a la página Plantillas de instancia.

    Ir a Plantillas de instancias

  2. Haga clic en Crear plantilla de instancias.
  3. En los campos, ingresa la siguiente información:
    • Name: td-demo-hello-world-template
    • Disco de arranque: Elige un sistema operativo y una versión.
    • 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

Puedes elegir entre muchas versiones de sistema operativo. En este ejemplo, se usa el valor predeterminado de Debian 10.

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. Cloud Service Mesh admite grupos de instancias administrados con ajuste de escala automático.

Console

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

    Ir a la página Grupos de instancias

  2. Haga clic en Crear grupo de instancias.
  3. Selecciona Nuevo grupo de instancias administrado (sin estado). Para obtener más información, consulta MIG sin estado o con estado.
  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 Off:do not autoscale.
  7. En Número máximo de instancias, especifica al menos dos como la cantidad de instancias que deseas crear en el grupo.
  8. Haga clic en Crear.

gcloud

Usa la herramienta 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 para crear una plantilla de instancias y un grupo de instancias administrado para Cloud Service Mesh 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 Cloud Service Mesh, se descarga desde un bucket de Cloud Storage dedicado. El bucket contiene una compilación proporcionada por Google del proxy de Envoy.
  • 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 bucket de Cloud Storage.

La única versión disponible de Envoy es el objeto binario de Envoy de Istio más reciente que se aloja en una ubicación dedicada de Cloud Storage. Esta versión de Envoy es compatible con las imágenes de Debian de Compute Engine, CentOS 7/8 y RHEL 7/8. Durante la reparación automática y el escalamiento vertical, el grupo de instancias administrado instala una versión reciente de Envoy en la VM. En algunos casos, esta versión podría ser más reciente que la de Envoy que se implementa en las instancias de VM creadas anteriormente. Esto puede generar una incoherencia en las versiones instaladas en las VM de un grupo de instancias administrado. Las versiones incoherentes funcionan en conjunto de forma correcta. Si hay una actualización de seguridad para Envoy, te recomendamos actualizar el grupo de instancias administrado mediante un reemplazo progresivo.

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 Cloud Service Mesh.

Puedes usar Debian 10/11, CentOS 7/8 o RHEL 7/8 para la imagen del disco de arranque en la plantilla de instancias.

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

  gcloud compute instance-templates create td-vm-template-auto \
    --image-family=[ debian-10 | centos-7 | centos-8 | rhel-7 | rhel-8 ]  \
    --image-project=[ debian-cloud | centos-cloud |rhel-cloud ] \
    --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

Consola

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

    Ir a 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 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 Cloud Service Mesh con componentes del balanceo de cargas de Google Cloud

En las instrucciones de esta sección, se muestra cómo configurar Cloud Service Mesh 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.

Consola

  1. Ve a la página Verificaciones de estado en la consola de Google Cloud.
    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. Haga clic en Crear.

gcloud

  1. Crea la verificación de estado.

    gcloud compute health-checks create http td-vm-health-check
    

Crea la regla de firewall

Usa las siguientes instrucciones para crear la regla de firewall necesaria para los sondeos de verificación de estado. SI quieres obtener más información, consulta las Reglas de firewall para las verificaciones de estado.

Console

  1. Ve a la página de políticas de firewall en la consola de Google Cloud.
    Ir a la página Políticas de firewall
  2. Haz clic en Crear regla de firewall.
  3. En la página Crear una regla de firewall, proporciona la siguiente información:
    • Nombre: fw-allow-health-checks
    • Red: Elige la red de VPC
    • Prioridad: Ingresa un número para la prioridad o 1,000 de forma predeterminada
    • Dirección del tráfico: Elige ingreso
    • Acción si hay coincidencia: Elige permitir
    • Destinos: Elige Etiquetas de destino especificadas y, luego, ingresa td-http-server en el cuadro de texto Etiquetas de destino
    • Filtro de origen: Elige el tipo de rango de IP correcto.
    • Rangos de IP de origen35.191.0.0/16,130.211.0.0/22
    • Filtro de destino: Selecciona el tipo de IP.
    • Protocolos y puertos: Haz clic en Protocolos y puertos especificados y, luego, marca tcp y escribe el puerto 80

gcloud

  1. 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 CLI de Google Cloud, 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 Cloud Service Mesh en la consola de Google Cloud.

    Ir a la página Cloud Service Mesh

  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 cómo Cloud Service Mesh 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.

Consola

En la consola de Google Cloud, 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 Cloud Service Mesh en la consola de Google Cloud.

    Ir a la página Cloud Service Mesh

  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 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 de acceso. En este ejemplo, se usa td-vm-service 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, Cloud Service Mesh 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 la malla de servicios de Cloud para las VM de Compute Engine, debes probar que el tráfico enviado desde la VM cliente que se dirige 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 el servicio Hello World.

Para hacerlo, debes acceder a la VM 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 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 la consola de Google Cloud, 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.

¿Qué sigue?