Configura VM de Compute Engine con la implementación automática de Envoy
Este documento se aplica a las API anteriores. Si quieres realizar la implementación nuevas APIs de enrutamiento de servicios, que están en vista previa, consulta Configuración de la malla de servicios de Cloud 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:
- Habilita la API de configuración del SO de Cloud.
- Crear un servicio de prueba
- 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).
- Configurar Cloud Service Mesh con APIs de Compute Engine, que habilitar Cloud Service Mesh para configurar los proxies de sidecar de Envoy
- 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
- En la consola de Google Cloud, ve a API y servicios.
Ir a la página Biblioteca de API - Selecciona el proyecto correcto.
- En el cuadro de búsqueda, ingresa Cloud OS Config API y presiona Intro.
- Selecciona Cloud OS Config API.
- 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
- En la consola de Google Cloud, ve a la página Plantillas de instancia.
- Haga clic en Crear plantilla de instancias.
- 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
- Name:
- 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
. 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
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
- En la consola de Google Cloud, ve a la página Grupos de instancias.
- Haga clic en Crear grupo de instancias.
- Selecciona Nuevo grupo de instancias administrado (sin estado). Para obtener más información, consulta MIG sin estado o con estado.
- Ingresa
td-demo-hello-world-mig
como el nombre del grupo de instancias administrado y selecciona la zonaus-central1-a
. - En Plantilla de instancias, selecciona
td-demo-hello-world-template
, que es la plantilla de instancias que creaste. - En Modo de ajuste de escala automático, selecciona
Off:do not autoscale
. - En Número máximo de instancias, especifica al menos dos como la cantidad de instancias que deseas crear en el grupo.
- 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, configurado por Cloud Service Mesh, descargados desde un bucket dedicado de Cloud Storage. 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 Compute Engine: Debian, 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 pases a la instancia instale Envoy y configure sus instancias de VM a fin de que estén listas la malla de servicios en la nube.
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
- En la consola de Google Cloud, ve a la página Grupos de instancias.
- Haz clic en Crear un grupo de instancias.
- Ingresa
td-vm-mig-us-central1
para el nombre del grupo de instancias administrado y selecciona la zonaus-central1-a
. - En Tipo de grupo, selecciona Managed instance group.
- En Plantilla de instancias, selecciona
td-vm-template-auto
, que es la plantilla de instancias que creaste. - Especifica
2
como la cantidad de instancias que deseas crear en el grupo. - 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 de Google Cloud Load Balancing
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:
- Una verificación de estado. Para obtener más información sobre las verificaciones de estado, consulta Conceptos de la verificación de estado y Crea verificaciones de estado.
- Una regla de firewall para permitir que los sondeos de las verificaciones de estado lleguen a los backends. Consulta Conceptos de la verificación de estado para obtener más información.
- Un servicio de backend. Para obtener más información sobre los servicios de backend, consulta Servicios de backend.
- Un mapa de reglas de enrutamiento. Esto incluye la creación de una regla de reenvío y un mapa de URL. Para obtener más información, consulta Usa reglas de reenvío y Usa mapas de URL.
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
- Ve a la página Verificaciones de estado en la consola de Google Cloud.
Ir a la página Verificaciones de estado - Haz clic en Crear verificación de estado.
- En el nombre, ingresa
td-vm-health-check
. - En el protocolo, selecciona HTTP.
- Haga clic en Crear.
gcloud
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
- 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 - Haz clic en Crear regla de firewall.
- 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 origen:
35.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 puerto80
- Nombre:
gcloud
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
Ve a la página Cloud Service Mesh en la consola de Google Cloud.
En la pestaña Servicios, haz clic en Crear servicio.
Haz clic en Continuar.
Para el nombre del servicio, ingresa
td-vm-service
.Selecciona la red de VPC correcta.
Asegúrate de que el Tipo de backend sea Grupos de instancias.
Selecciona
td-demo-hello-world-mig
, que es el grupo de instancias administrado que creaste y que contiene los backends para el servicio de pruebaHello World
.Ingresa los Números de puerto correctos.
Elige Utilización o Tasa como el Modo de balanceo. El valor predeterminado es Tasa.
Haz clic en Listo.
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.
En Tiempo de espera para el vaciado de conexiones, establece el valor en
30
segundos o más.Haz clic en Continuar.
Haz clic en Crear.
gcloud
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
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 de la red de VPC. 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:
- Intercepta la solicitud.
- La evalúa según las reglas de administración de tráfico en el mapa de URL.
- Selecciona un servicio de backend basado en el nombre de host de la solicitud.
- Elige un backend o extremo asociado con el servicio de backend que se seleccionó.
- 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.
Ve a la página Cloud Service Mesh en la consola de Google Cloud.
En la pestaña Mapas de reglas de enrutamiento, haz clic en Crear mapa de reglas de enrutamiento.
Ingresa un nombre.
Haz clic en Agregar una regla de reenvío.
Para el nombre de la regla de reenvío, ingresa
td-vm-forwarding-rule
.Selecciona tu red.
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 comoINTERNAL_SELF_MANAGED
.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.Asegúrate de que el Puerto esté establecido en
80
.Haz clic en Guardar.
En la sección Reglas de enrutamiento, selecciona Regla sencilla de host y ruta de acceso.
En la sección Reglas de host y ruta de acceso, selecciona
td-vm-service
como el servicio.Haz clic en Agregar regla de host y ruta de acceso.
En Hosts, ingresa
hello-world
.En Servicio, selecciona
td-vm-service
.Haz clic en Guardar.
gcloud
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
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
Crea el proxy HTTP de destino.
gcloud compute target-http-proxies create td-vm-proxy \ --url-map=td-vm-url-map
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 comoINTERNAL_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 para los servicios especificados en el mapa de URL en los backends grupo de instancias administrado.
Verifica la configuración
En esta parte final de la guía de configuración de Cloud Service Mesh para Compute
Engine, pruebas que el tráfico enviado desde la VM del cliente destinado a la
La VIP de la regla de reenvío se intercepta y redirecciona al proxy de Envoy, que luego
enruta tu solicitud a las VMs 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.
- En la consola de Google Cloud, ve a la página Grupos de instancias.
- Selecciona el grupo de instancias
td-vm-mig-us-central1
. - En la sección Resumen de la VM, en Conectar, haz clic en SSH.
- Después de acceder a la VM de cliente, usa la herramienta de
curl
para enviar una solicitud al servicioHello 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?
- Obtén información sobre la administración avanzada del tráfico.
- Obtén información sobre cómo configurar la observabilidad con Envoy.
- Obtén más información sobre cómo solucionar problemas de implementaciones de Cloud Service Mesh.
- Obtén más información sobre las opciones avanzadas de implementación en la Guía de opciones de implementación automatizada de Envoy.