Configurar máquinas virtuales de Compute Engine con el despliegue automático de Envoy

Este documento se aplica a las APIs antiguas. Si vas a implementar 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 previas que se describen en Preparar la configuración de las APIs de enrutamiento de servicios con Envoy y cargas de trabajo sin proxy.

En esta guía se explica cómo desplegar automáticamente un plano de datos que consta de proxies sidecar de Envoy, cómo configurarlo con Cloud Service Mesh y cómo verificar la configuración para asegurarse de que funciona correctamente. Este proceso implica lo siguiente:

  1. Habilitar la API Cloud OS Config.
  2. Crear un servicio de prueba.
  3. Desplegar un plano de datos sencillo en Compute Engine mediante proxies de Envoy (versión 1.18.4 de Envoy, que solo admite xDS v3).
  4. Configurar Cloud Service Mesh mediante las APIs de Compute Engine, que permiten a Cloud Service Mesh configurar tus proxies sidecar de Envoy.
  5. Inicia sesión en una VM que esté ejecutando un proxy de Envoy y envía una solicitud a un backend con balanceo de carga a través del proxy de Envoy.

Los ejemplos de configuración de este documento se han incluido con fines ilustrativos. En un entorno de producción, es posible que tengas que implementar componentes adicionales en función de tu entorno y tus requisitos.

Habilitar la API Cloud OS Config

Asegúrate de habilitar la API Cloud OS Config. Si no lo haces, no podrás instalar los componentes necesarios en tus VMs.

Para hacer esto:

Consola

  1. En la Google Cloud consola, ve a APIs y servicios.
    Ve a la página Biblioteca de APIs.
  2. Selecciona el proyecto correcto.
  3. En el cuadro de búsqueda, escribe API Cloud OS Config y pulsa Intro.
  4. Selecciona API OS Config de Cloud.
  5. Haz clic en Enable (Habilitar).

gcloud

gcloud services enable osconfig.googleapis.com

Crear el servicio de prueba Hello World

En esta sección se explica cómo crear un servicio de prueba sencillo que devuelva el nombre de host de la VM que ha atendido la solicitud del cliente. El servicio de prueba es sencillo: se trata de un servidor web desplegado en un grupo de instancias gestionadas de Compute Engine.

Crear la plantilla de instancia para el servicio de prueba Hello World

La plantilla de instancia que crees configurará un servidor web apache2 de ejemplo con el parámetro startup-script.

Consola

  1. En la consola de Google Cloud , ve a la página Plantillas de instancia.

    Ir a Plantillas de instancias

  2. Haz clic en Crear plantilla de instancia.
  3. En los campos, introduce la siguiente información:
    • Nombre: 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
    • Permisos de acceso: permitir el acceso completo a todas las APIs de Cloud
  4. Haz clic en Gestión, seguridad, discos, redes, único cliente. 1 En la pestaña Redes, en el campo Etiquetas de red, añada la etiqueta td-http-server.
  5. En la pestaña Gestió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 del sistema operativo. En este ejemplo se usa el valor predeterminado Debian 10.

Para crear la plantilla de instancia, sigue estos pasos:

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"

Crear el grupo de instancias gestionado para el servicio Hello World

En esta sección, se especifica que el grupo de instancias gestionado siempre tiene dos instancias del servicio de prueba. Esto se hace con fines de demostración. Cloud Service Mesh admite grupos de instancias gestionados con escalado automático.

Consola

  1. En la consola de Google Cloud , 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. Selecciona Nuevo grupo de instancias gestionado (sin reconocimiento del estado). Para obtener más información, consulta Grupos de instancias gestionados con o sin reconocimiento del estado.
  4. Introduce td-demo-hello-world-mig como nombre del grupo de instancias gestionado y selecciona la zona us-central1-a.
  5. En Plantilla de instancia, selecciona td-demo-hello-world-template, que es la plantilla de instancia que has creado.
  6. En Modo de autoescalado, selecciona Off:do not autoscale.
  7. En Número máximo de instancias, especifica al menos dos como el número de instancias que quieras crear en el grupo.
  8. Haz clic en Crear.

gcloud

Usa la CLI de gcloud para crear un grupo de instancias gestionado con la plantilla de instancia que has creado anteriormente.

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

Crear la plantilla de instancia y el grupo de instancias gestionado en el que se implementa Envoy

Sigue las instrucciones de esta sección para crear una plantilla de instancia y un grupo de instancias gestionado para Cloud Service Mesh con proxies de Envoy desplegados automáticamente. Los grupos de instancias gestionados crean nuevas VMs de backend mediante el autoescalado.

Componentes de software que se ejecutan en tus máquinas virtuales

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

  • El proxy Envoy, que configura Cloud Service Mesh, se descarga de un segmento de Cloud Storage específico. El segmento contiene una compilación del proxy Envoy proporcionada por Google.
  • El agente proxy de servicio, que inicializa el proxy de Envoy y los componentes del proxy. El agente proxy de servicio configura la intercepción del tráfico y monitoriza el estado del proxy de Envoy cuando se ejecuta una VM. El agente proxy de servicio también se descarga de un segmento de Cloud Storage.

La única versión de Envoy disponible es el archivo binario de Envoy más reciente, que se aloja en una ubicación de Cloud Storage específica. Esta versión de Envoy es compatible con Debian, CentOS 7/8 y RHEL 7/8 de Compute Engine. Durante el proceso de reparación automática y escalado vertical, el grupo de instancias gestionado instala una versión reciente de Envoy en la VM. En algunos casos, esta versión puede ser más reciente que la de Envoy implementada en las instancias de VM creadas anteriormente. Esto puede provocar que las versiones instaladas en las VMs de un grupo de instancias gestionadas no sean coherentes. Las versiones no coherentes funcionan correctamente juntas. Si hay una actualización de seguridad de Envoy, te recomendamos que actualices el grupo de instancias gestionado mediante una sustitución gradual.

Crear la plantilla de instancia

Una plantilla de instancia especifica la configuración de las instancias de VM que se crean en un grupo de instancias gestionado. Las marcas que transfieres a la plantilla de instancia instalan Envoy y configuran tus instancias de VM para 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 instancia.

Para crear una plantilla de instancia de este tipo, sigue estos pasos:

  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 tu implementación de Envoy, consulta la guía de referencia de implementación automatizada de Envoy.

Crear el grupo de instancias gestionadas

Consola

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

    Ir a Grupos de instancias

  2. Haga clic en Crear un grupo de instancias.
  3. Introduce td-vm-mig-us-central1 como nombre del grupo de instancias gestionado y selecciona la zona us-central1-a.
  4. En Tipo de grupo, selecciona Grupo de instancias gestionado.
  5. En Plantilla de instancia, selecciona td-vm-template-auto, la plantilla de instancia que has creado.
  6. Especifica 2 como el número de instancias que quieres crear en el grupo.
  7. Haz clic en Crear para crear el grupo.

gcloud

Usa la CLI de gcloud para crear un grupo de instancias gestionado con la plantilla de instancia que has creado anteriormente.

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

Configurar Cloud Service Mesh con componentes de Google Cloud balanceo de carga

En esta sección se explica cómo configurar Cloud Service Mesh para que tus proxies Envoy balanceen la carga del tráfico saliente entre dos instancias de backend. Configura los siguientes componentes:

Crear la comprobación del estado

Sigue estas instrucciones para crear una comprobación del estado. Para obtener más información, consulta el artículo Crear comprobaciones del estado.

Consola

  1. Ve a la página de comprobaciones de estado en la Google Cloud consola.
    Ir a la página Comprobaciones de estado
  2. Haz clic en Crear comprobación del estado.
  3. En el nombre, introduce td-vm-health-check.
  4. En el protocolo, selecciona HTTP.
  5. Haz clic en Crear.

gcloud

  1. Crea la comprobación del estado.

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

Crear la regla de cortafuegos

Sigue estas instrucciones para crear la regla de cortafuegos que se necesita para las sondas de comprobación del estado. Para obtener más información, consulta Reglas de cortafuegos para comprobaciones del estado.

Consola

  1. Ve a la página Políticas de cortafuegos de la consola de Google Cloud .
    Ve a la página Políticas de cortafuegos.
  2. Haz clic en Crear regla de cortafuegos.
  3. En la página Crear una regla de cortafuegos, proporciona la siguiente información:
    • Nombre: fw-allow-health-checks
    • Red: elige la red de VPC.
    • Prioridad: introduce un número para la prioridad (1000 de forma predeterminada).
    • Dirección del tráfico: elige entrada.
    • Acción tras coincidencia: elige Permitir.
    • Objetivos: elija Etiquetas de destino especificadas y, a continuación, introduzca td-http-server en el cuadro de texto Etiquetas de destino.
    • Filtro de origen: elija el tipo de intervalo de IP correcto.
    • Intervalos de IPs de origen: 35.191.0.0/16,130.211.0.0/22
    • Filtrar por destino: selecciona el tipo de IP.
    • Protocolos y puertos: haz clic en Puertos y protocolos especificados y, a continuación, marca tcp e introduce el puerto 80.

gcloud

  1. Crea la regla de cortafuegos para la comprobación del 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
    

Crear 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 carga INTERNAL_SELF_MANAGED. Añade la comprobación de estado y un grupo de instancias gestionado o no gestionado al servicio de backend. Ten en cuenta que en este ejemplo se usa el grupo de instancias gestionadas con la plantilla de VM de Compute Engine que ejecuta el servicio HTTP de ejemplo creado en Crear el grupo de instancias gestionadas.

Consola

  1. Ve a la página Cloud Service Mesh de la Google Cloud consola.

    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. En el nombre del servicio, introduce td-vm-service.

  5. Selecciona la red de VPC correcta.

  6. Comprueba que el Tipo de backend sea Grupos de instancias.

  7. Selecciona td-demo-hello-world-mig, que es el grupo de instancias gestionado que has creado y que contiene los backends del servicio de prueba Hello World.

  8. Introduce los números de puerto correctos.

  9. Elige Utilización o Tarifa como Modo de equilibrio. El valor predeterminado es Rate.

  10. Haz clic en Listo.

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

  12. En Tiempo de espera hasta la desconexión, asigna el valor 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. Añade 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
    

Crear el mapa de reglas de enrutamiento

El mapa de reglas de enrutamiento define cómo enruta Cloud Service Mesh el tráfico en tu malla. Como parte del mapa de reglas de enrutamiento, debes configurar una dirección IP virtual (VIP) y un conjunto de reglas de gestión del tráfico asociadas, como el enrutamiento basado en host. Cuando una aplicación envía una solicitud a la VIP, el proxy de Envoy hace lo siguiente:

  1. Intercepta la solicitud.
  2. La evalúa según las reglas de gestión del tráfico del mapa de URLs.
  3. Elige un servicio de backend en función del nombre de host de la solicitud.
  4. Elige un backend o un endpoint asociado al servicio de backend seleccionado.
  5. Envía tráfico a ese backend o endpoint.

Para obtener más información sobre la gestión del tráfico, consulta el artículo Gestión avanzada del tráfico.

Consola

En la consola Google Cloud , la creación de proxies de destino se combina con la creación de reglas de reenvío. Cuando crea la regla de reenvío, Google Cloud crea automáticamente un proxy HTTP de destino y lo adjunta al mapa de URLs.

  1. Ve a la página Cloud Service Mesh de la Google Cloud consola.

    Ir a la página Cloud Service Mesh

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

  3. Escribe un nombre.

  4. Haz clic en Añadir regla de reenvío.

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

  6. Selecciona tu red.

  7. Selecciona tu IP interna. El proxy Envoy intercepta el tráfico enviado a esta dirección IP para enviarlo al servicio correspondiente según las reglas de host y ruta.

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

  8. En el campo IP personalizada, escribe 10.0.0.1. Cuando tu VM envía datos a esta dirección IP, el proxy Envoy los intercepta y los envía al endpoint del servicio de backend correspondiente según las reglas de gestión del tráfico definidas en el mapa de URLs.

    Cada regla de reenvío de 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 el mismo puerto en una red VPC concreta, solo será válida la primera regla de reenvío. Los demás se ignoran. Si 10.0.0.1 no está disponible en tu red, elige otra dirección IP.

  9. Comprueba que el Puerto esté configurado como 80.

  10. Haz clic en Guardar.

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

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

  13. Haz clic en Añadir regla de host y ruta.

  14. En Hosts (Hosts), introduce hello-world.

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

  16. Haz clic en Guardar.

gcloud

  1. Crea un mapa de URLs que use el servicio de backend td-vm-service como predeterminado.

    gcloud compute url-maps create td-vm-url-map \
       --default-service td-vm-service
    
  2. Crea un comparador de rutas y una regla de host para enrutar el tráfico de tu servicio en función del nombre de host y de una ruta. En este ejemplo se usa td-vm-service como nombre de servicio y un comparador de rutas predeterminado que coincide con todas las solicitudes de ruta de 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 definido 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 la carga del tráfico de los servicios especificados en el mapa de URLs entre los backends del grupo de instancias gestionado.

Verificar la configuración

En esta última parte de la guía de configuración de Cloud Service Mesh para máquinas virtuales de Compute Engine, comprobarás que el tráfico enviado desde la máquina virtual del cliente a la VIP de la regla de reenvío se intercepta y se redirige al proxy de Envoy, que, a continuación, enruta tu solicitud a las máquinas virtuales que alojan el servicio Hello World.

Para ello, inicia sesión en la VM cliente, que se ha configurado para interceptar el tráfico y redirigirlo a Envoy. Envías una solicitud curl al VIP asociado a tu mapa de reglas de enrutamiento. Envoy inspecciona la solicitud curl, determina a qué servicio debe resolverse y envía la solicitud a un backend asociado a 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 de resumen de la VM, en Conectar, haz clic en SSH.
  4. Una vez que hayas iniciado sesión en 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/

Cuando ejecutes este comando repetidamente, deberías ver diferentes respuestas HTML que contengan los nombres de host de los back-ends del Hello World grupo de instancias gestionado. Esto se debe a que Envoy usa el balanceo de carga Round Robin, el algoritmo de balanceo de carga predeterminado, al enviar tráfico a los back-ends del servicio Hello World.

Siguientes pasos