Configurar máquinas virtuales con el despliegue manual de Envoy
Este documento está dirigido a los administradores de redes que quieran configurar Cloud Service Mesh manualmente. El proceso manual es un mecanismo antiguo que solo está pensado para usuarios avanzados que configuran Cloud Service Mesh con las APIs de balanceo de carga.
Te recomendamos que configures Cloud Service Mesh con las APIs de enrutamiento de servicios en lugar de con las APIs de balanceo de carga antiguas. Si debes usar las APIs de balanceo de carga, te recomendamos que utilices la implementación automática de Envoy en lugar del proceso manual que se describe en esta página.
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 muestra cómo desplegar manualmente un plano de datos que consta de proxies sidecar de Envoy con máquinas virtuales de Compute Engine, 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:
- Crear un servicio de prueba.
- Desplegar un plano de datos sencillo en Compute Engine con proxies de Envoy.
- Configurar Cloud Service Mesh mediante las APIs de Compute Engine, que permiten a Cloud Service Mesh configurar tus proxies sidecar de Envoy.
- 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.
Descripción general del proceso de configuración
En esta sección se describe el proceso de configuración manual de los servicios que se ejecutan en máquinas virtuales de Compute Engine. El proceso de configuración de las VMs cliente consiste en configurar un proxy adicional y la interceptación del tráfico en un host de VM de Compute Engine. A continuación, configura el balanceo de carga con lasGoogle Cloud APIs de balanceo de carga.
En esta sección se explica cómo obtener e insertar proxies de Envoy de fuentes de terceros que no gestiona Google.
Cuando una aplicación envía tráfico al servicio configurado en Cloud Service Mesh, el tráfico se intercepta y se redirige al proxy sidecar compatible con la API xDS. A continuación, se balancea la carga a los backends según la configuración de los Google Cloud componentes de balanceo de carga. Para obtener más información sobre la creación de redes de hosts y la intercepción de tráfico, consulta el artículo sobre la intercepción de tráfico de proxy sidecar en Cloud Service Mesh.
Para cada host de máquina virtual que requiera acceso a los servicios de Cloud Service Mesh, sigue estos pasos:
Asigna una cuenta de servicio a la VM.
Define el ámbito de acceso a la API de la VM para permitir el acceso completo a lasGoogle Cloud APIs.
- Cuando crees las VMs, en Identidad y acceso de API, haz clic en Permitir el acceso completo a todas las APIs de Cloud.
En gcloud CLI, especifica lo siguiente:
--scopes=https://www.googleapis.com/auth/cloud-platform
.
Permite las conexiones salientes a
trafficdirector.googleapis.com
(TCP, puerto 443) desde la VM para que el proxy sidecar pueda conectarse al plano de control de Cloud Service Mesh a través de gRPC. Las conexiones salientes al puerto 443 están habilitadas de forma predeterminada.Despliega un proxy adicional compatible con la API xDS (como Envoy) con una configuración de arranque que apunte a
trafficdirector.googleapis.com:443
como servidor xDS. Para obtener un archivo de configuración de arranque de muestra, abre el archivo comprimido traffic-director-xdsv3.tar.gz y modifica el archivobootstrap_template.yaml
para adaptarlo a tus necesidades.Redirige el tráfico IP destinado a los servicios al puerto de escucha de intercepción del proxy sidecar.
- El puerto de escucha de intercepción del proxy 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 ejemplo de este archivo comprimido. - El script Istio
iptables.sh
del archivo comprimido se puede usar para configurar la intercepción del tráfico.
- El puerto de escucha de intercepción del proxy sidecar se define como
Crea 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.
Crea la plantilla de instancia
La plantilla de instancia que creas configura un servidor web apache2 de ejemplo mediante el parámetro startup-script
.
Consola
En la consola, ve a la página Plantillas de instancia. Google Cloud
- Haz clic en Crear plantilla de instancia.
- En los campos, introduce 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 completo a todas las APIs de Cloud
- Nombre:
- Haz clic en Gestión, seguridad, discos, redes, único cliente.
- En la pestaña Redes, en el campo Etiquetas de red, añade la etiqueta
td-http-server
. 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
Haz clic en Crear.
gcloud
Crea la plantilla de instancia:
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
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
En la consola, ve a la página Grupos de instancias. Google Cloud
- Haz clic en Crear grupo de instancias.
- 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.
- Introduce
td-demo-hello-world-mig
como nombre del grupo de instancias gestionado y selecciona la zonaus-central1-a
. - En Plantilla de instancia, selecciona
td-demo-hello-world-template
, que es la plantilla de instancia que has creado. - En Modo de autoescalado, selecciona No autoescalar.
- En Número de instancias, especifica al menos dos como el número de instancias que quieres crear en el grupo.
- 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
Crea 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 manualmente una plantilla de instancia y un grupo de instancias gestionadas para Cloud Service Mesh. Los grupos de instancias gestionados crean nuevas VMs de backend mediante el autoescalado.
En este ejemplo se muestra cómo hacer lo siguiente:
- Crea una plantilla de VM con una configuración completa de Envoy y un servicio de ejemplo que proporcione su nombre de host mediante el protocolo HTTP.
- Configura un grupo de instancias gestionado con esta plantilla.
Crea la plantilla de instancia
Primero, crea la plantilla de instancia de VM de Compute Engine. Esta plantilla configura automáticamente el proxy sidecar de Envoy y el servicio web de ejemplo apache2 mediante el parámetro startup-script
.
Consola
En la consola, ve a la página Plantillas de instancia. Google Cloud
- Haz clic en Crear plantilla de instancia.
Rellena los campos como se indica a continuación:
- Nombre: td-vm-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 completo a todas las APIs de Cloud
En Cortafuegos, selecciona las casillas situadas junto a Permitir el tráfico HTTP y Permitir el tráfico HTTPS.
Haz clic en Gestión, seguridad, discos, redes, único cliente.
En la pestaña Gestión, copia la siguiente secuencia de comandos en el campo Secuencia de comandos de inicio.
#! /usr/bin/env bash # Set variables export ENVOY_USER="envoy" export ENVOY_USER_UID="1337" export ENVOY_USER_GID="1337" export ENVOY_USER_HOME="/opt/envoy" export ENVOY_CONFIG="${ENVOY_USER_HOME}/config.yaml" export ENVOY_PORT="15001" export ENVOY_ADMIN_PORT="15000" export ENVOY_TRACING_ENABLED="false" export ENVOY_XDS_SERVER_CERT="/etc/ssl/certs/ca-certificates.crt" export ENVOY_ACCESS_LOG="/dev/stdout" export ENVOY_NODE_ID="$(cat /proc/sys/kernel/random/uuid)~$(hostname -i)" export BOOTSTRAP_TEMPLATE="${ENVOY_USER_HOME}/bootstrap_template.yaml" export GCE_METADATA_SERVER="169.254.169.254/32" export INTERCEPTED_CIDRS="*" export GCP_PROJECT_NUMBER=PROJECT_NUMBER export VPC_NETWORK_NAME=NETWORK_NAME export GCE_ZONE=$(curl -sS -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/zone | cut -d"/" -f4) # Create system user account for Envoy binary sudo groupadd ${ENVOY_USER} \ --gid=${ENVOY_USER_GID} \ --system sudo adduser ${ENVOY_USER} \ --uid=${ENVOY_USER_UID} \ --gid=${ENVOY_USER_GID} \ --home=${ENVOY_USER_HOME} \ --disabled-login \ --system # Download and extract the Cloud Service Mesh tar.gz file cd ${ENVOY_USER_HOME} sudo curl -sL https://storage.googleapis.com/traffic-director/traffic-director-xdsv3.tar.gz -o traffic-director-xdsv3.tar.gz sudo tar -xvzf traffic-director-xdsv3.tar.gz traffic-director-xdsv3/bootstrap_template.yaml \ -C bootstrap_template.yaml \ --strip-components 1 sudo tar -xvzf traffic-director-xdsv3.tar.gz traffic-director-xdsv3/iptables.sh \ -C iptables.sh \ --strip-components 1 sudo rm traffic-director-xdsv3.tar.gz # Generate Envoy bootstrap configuration cat "${BOOTSTRAP_TEMPLATE}" \ | sed -e "s|ENVOY_NODE_ID|${ENVOY_NODE_ID}|g" \ | sed -e "s|ENVOY_ZONE|${GCE_ZONE}|g" \ | sed -e "s|VPC_NETWORK_NAME|${VPC_NETWORK_NAME}|g" \ | sed -e "s|CONFIG_PROJECT_NUMBER|${GCP_PROJECT_NUMBER}|g" \ | sed -e "s|ENVOY_PORT|${ENVOY_PORT}|g" \ | sed -e "s|ENVOY_ADMIN_PORT|${ENVOY_ADMIN_PORT}|g" \ | sed -e "s|XDS_SERVER_CERT|${ENVOY_XDS_SERVER_CERT}|g" \ | sed -e "s|TRACING_ENABLED|${ENVOY_TRACING_ENABLED}|g" \ | sed -e "s|ACCESSLOG_PATH|${ENVOY_ACCESS_LOG}|g" \ | sed -e "s|BACKEND_INBOUND_PORTS|${BACKEND_INBOUND_PORTS}|g" \ | sudo tee "${ENVOY_CONFIG}" # Install Envoy binary curl -sL "https://deb.dl.getenvoy.io/public/gpg.8115BA8E629CC074.key" | sudo gpg --dearmor -o /usr/share/keyrings/getenvoy-keyring.gpg echo a077cb587a1b622e03aa4bf2f3689de14658a9497a9af2c427bba5f4cc3c4723 /usr/share/keyrings/getenvoy-keyring.gpg | sha256sum --check echo "deb [arch=amd64 signed-by=/usr/share/keyrings/getenvoy-keyring.gpg] https://deb.dl.getenvoy.io/public/deb/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/getenvoy.list sudo apt update sudo apt -y install getenvoy-envoy # Run Envoy as systemd service sudo systemd-run --uid=${ENVOY_USER_UID} --gid=${ENVOY_USER_GID} \ --working-directory=${ENVOY_USER_HOME} --unit=envoy.service \ bash -c "/usr/bin/envoy --config-path ${ENVOY_CONFIG} | tee" # Configure iptables for traffic interception and redirection sudo ${ENVOY_USER_HOME}/iptables.sh \ -p "${ENVOY_PORT}" \ -u "${ENVOY_USER_UID}" \ -g "${ENVOY_USER_GID}" \ -m "REDIRECT" \ -i "${INTERCEPTED_CIDRS}" \ -x "${GCE_METADATA_SERVER}"
Haga clic en Crear para crear la plantilla.
gcloud
Crea la plantilla de instancia.
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-10 \ --image-project=debian-cloud \ --metadata=startup-script='#! /usr/bin/env bash # Set variables export ENVOY_USER="envoy" export ENVOY_USER_UID="1337" export ENVOY_USER_GID="1337" export ENVOY_USER_HOME="/opt/envoy" export ENVOY_CONFIG="${ENVOY_USER_HOME}/config.yaml" export ENVOY_PORT="15001" export ENVOY_ADMIN_PORT="15000" export ENVOY_TRACING_ENABLED="false" export ENVOY_XDS_SERVER_CERT="/etc/ssl/certs/ca-certificates.crt" export ENVOY_ACCESS_LOG="/dev/stdout" export ENVOY_NODE_ID="$(cat /proc/sys/kernel/random/uuid)~$(hostname -i)" export BOOTSTRAP_TEMPLATE="${ENVOY_USER_HOME}/bootstrap_template.yaml" export GCE_METADATA_SERVER="169.254.169.254/32" export INTERCEPTED_CIDRS="*" export GCP_PROJECT_NUMBER=PROJECT_NUMBER export VPC_NETWORK_NAME=NETWORK_NAME export GCE_ZONE=$(curl -sS -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/zone | cut -d"/" -f4) # Create system user account for Envoy binary sudo groupadd ${ENVOY_USER} \ --gid=${ENVOY_USER_GID} \ --system sudo adduser ${ENVOY_USER} \ --uid=${ENVOY_USER_UID} \ --gid=${ENVOY_USER_GID} \ --home=${ENVOY_USER_HOME} \ --disabled-login \ --system # Download and extract the Cloud Service Mesh tar.gz file cd ${ENVOY_USER_HOME} sudo curl -sL https://storage.googleapis.com/traffic-director/traffic-director-xdsv3.tar.gz -o traffic-director-xdsv3.tar.gz sudo tar -xvzf traffic-director-xdsv3.tar.gz traffic-director-xdsv3/bootstrap_template.yaml \ -C bootstrap_template.yaml \ --strip-components 1 sudo tar -xvzf traffic-director-xdsv3.tar.gz traffic-director-xdsv3/iptables.sh \ -C iptables.sh \ --strip-components 1 sudo rm traffic-director-xdsv3.tar.gz # Generate Envoy bootstrap configuration cat "${BOOTSTRAP_TEMPLATE}" \ | sed -e "s|ENVOY_NODE_ID|${ENVOY_NODE_ID}|g" \ | sed -e "s|ENVOY_ZONE|${GCE_ZONE}|g" \ | sed -e "s|VPC_NETWORK_NAME|${VPC_NETWORK_NAME}|g" \ | sed -e "s|CONFIG_PROJECT_NUMBER|${GCP_PROJECT_NUMBER}|g" \ | sed -e "s|ENVOY_PORT|${ENVOY_PORT}|g" \ | sed -e "s|ENVOY_ADMIN_PORT|${ENVOY_ADMIN_PORT}|g" \ | sed -e "s|XDS_SERVER_CERT|${ENVOY_XDS_SERVER_CERT}|g" \ | sed -e "s|TRACING_ENABLED|${ENVOY_TRACING_ENABLED}|g" \ | sed -e "s|ACCESSLOG_PATH|${ENVOY_ACCESS_LOG}|g" \ | sed -e "s|BACKEND_INBOUND_PORTS|${BACKEND_INBOUND_PORTS}|g" \ | sudo tee "${ENVOY_CONFIG}" # Install Envoy binary curl -sL "https://deb.dl.getenvoy.io/public/gpg.8115BA8E629CC074.key" | sudo gpg --dearmor -o /usr/share/keyrings/getenvoy-keyring.gpg echo a077cb587a1b622e03aa4bf2f3689de14658a9497a9af2c427bba5f4cc3c4723 /usr/share/keyrings/getenvoy-keyring.gpg | sha256sum --check echo "deb [arch=amd64 signed-by=/usr/share/keyrings/getenvoy-keyring.gpg] https://deb.dl.getenvoy.io/public/deb/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/getenvoy.list sudo apt update sudo apt -y install getenvoy-envoy # Run Envoy as systemd service sudo systemd-run --uid=${ENVOY_USER_UID} --gid=${ENVOY_USER_GID} \ --working-directory=${ENVOY_USER_HOME} --unit=envoy.service \ bash -c "/usr/bin/envoy --config-path ${ENVOY_CONFIG} | tee" # Configure iptables for traffic interception and redirection sudo ${ENVOY_USER_HOME}/iptables.sh \ -p "${ENVOY_PORT}" \ -u "${ENVOY_USER_UID}" \ -g "${ENVOY_USER_GID}" \ -m "REDIRECT" \ -i "${INTERCEPTED_CIDRS}" \ -x "${GCE_METADATA_SERVER}" '
Crear el grupo de instancias gestionado
Si no tienes ningún grupo de instancias gestionado con servicios en ejecución, crea uno con una plantilla de VM como la que se muestra en la sección anterior. En este ejemplo se usa la plantilla de instancia creada en la sección anterior para mostrar la funcionalidad. No es obligatorio usar la plantilla de instancia.
Consola
En la consola, ve a la página Grupos de instancias. Google Cloud
- Haga clic en Crear un grupo de instancias. De forma predeterminada, se muestra la página para crear un grupo de instancias gestionado.
- Elige 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.
- Introduce
td-vm-mig-us-central1
como nombre del grupo de instancias gestionado y selecciona la zonaus-central1-a
. - En Plantilla de instancia, selecciona la plantilla de instancia que has creado.
- Especifica 2 como el número de instancias que quieres crear en el grupo.
- 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-vm-mig-us-central1 \ --zone us-central1-a --size=2 --template=td-vm-template
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:
- Una comprobación del estado. Para obtener más información sobre las comprobaciones del estado, consulta los artículos Descripción general de las comprobaciones del estado y Crear comprobaciones del estado.
- Una regla de cortafuegos para permitir que las comprobaciones del estado lleguen a los backends. Para obtener más información, consulta el artículo Introducción a las comprobaciones del estado.
- Un servicio de backend. Para obtener más información sobre los servicios backend, consulta el resumen de los servicios backend.
- Un mapa de reglas de enrutamiento. Esto incluye la creación de una regla de reenvío y un mapa de URLs. Para obtener más información, consulta el resumen de las reglas de reenvío y el artículo sobre usar mapas de URLs.
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
En la Google Cloud consola, ve a la página Comprobaciones de estado.
- Haz clic en Crear comprobación del estado.
- En el nombre, introduce
td-vm-health-check
. - En el protocolo, selecciona HTTP.
- Haz clic en Crear.
gcloud
Crea la comprobación del estado:
gcloud compute health-checks create http td-vm-health-check
Crea la regla de cortafuegos:
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 CLI de Google Cloud, debes designar el servicio backend como un servicio backend global con un esquema de balanceo de carga de INTERNAL_SELF_MANAGED
. Añade la comprobación de estado y un grupo de instancias gestionado o no gestionado al servicio de backend. Nota: Este ejemplo usa el grupo de instancias gestionado con la plantilla de VM de Compute Engine que ejecuta el servicio HTTP de ejemplo creado en Crear el grupo de instancias gestionado.
Consola
En la Google Cloud consola, ve a la página Cloud Service Mesh.
- En la pestaña Servicios, haz clic en Crear servicio.
- Haz clic en Continuar.
- En el nombre del servicio, introduce
td-vm-service
. - Selecciona la red de VPC correcta.
- Comprueba que el Tipo de backend sea Grupos de instancias.
- Selecciona el grupo de instancias gestionado que has creado.
- Introduce los números de puerto correctos.
- Elige Utilización o Tarifa como Modo de equilibrio. El valor predeterminado es Rate.
- Haz clic en Listo.
- Selecciona la comprobación del estado que has creado.
- Haz clic en Guardar y 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 \ --health-checks td-vm-health-check
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.
Sigue estas instrucciones para crear la regla de ruta, la regla de reenvío, el proxy de destino y la dirección IP interna de tu configuración de Cloud Service Mesh.
El proxy Envoy intercepta el tráfico enviado a la dirección IP interna y lo envía 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
.
Puedes definir la dirección de tu regla de reenvío como 0.0.0.0
. Si lo hace, el tráfico se enruta en función del nombre de host HTTP y de la información de la ruta configurados en el mapa de URLs, independientemente de la dirección IP de destino real de la solicitud. En este caso, los nombres de host de tus servicios, tal como se hayan configurado en las reglas de host, deben ser únicos en la configuración de tu malla de servicios. Es decir, no puedes tener dos servicios diferentes con conjuntos de backend distintos que usen el mismo nombre de host.
También puedes habilitar el enrutamiento en función de la VIP de destino real del servicio. Si configura la IP virtual de su servicio como parámetro address
de la regla de reenvío, solo se enrutarán las solicitudes destinadas a esta dirección en función de los parámetros HTTP especificados en el mapa de URLs.
En este ejemplo se usa 10.0.0.1
como parámetro de dirección, lo que significa que el enrutamiento de tu servicio se realiza en función de la VIP de destino real del servicio.
Consola
En la consola Google Cloud , el proxy de destino se combina con la regla 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.
En la Google Cloud consola, ve a la página Cloud Service Mesh.
- En la pestaña Mapas de reglas de enrutamiento, haga clic en Crear mapa de reglas de enrutamiento.
- Escribe un nombre.
- Haz clic en Añadir regla de reenvío.
- En el nombre de la regla de reenvío, introduce
td-vm-forwarding-rule
. - Selecciona tu red.
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 comoINTERNAL_SELF_MANAGED
.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.Comprueba que el Puerto esté configurado como
80
.Haz clic en Guardar.
En la sección Reglas de enrutamiento, selecciona Regla de host y ruta simple.
En la sección Reglas de host y ruta, selecciona
td-vm-service
como servicio.Haz clic en Añadir regla de host y ruta.
En Hosts (Hosts), introduce
hello-world
.En Servicio, selecciona
td-vm-service
.Haz clic en Guardar.
gcloud
Crea un mapa de URLs que use el servicio de backend:
gcloud compute url-maps create td-vm-url-map \ --default-service td-vm-service
Crea un objeto PathMatcher de mapa de URLs y una regla de host para enrutar el tráfico de tu servicio en función del nombre de host y una ruta. En este ejemplo se usa
service-test
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 --hosts service-test \ --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
definido 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 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 VMs de Compute Engine, comprobarás que el tráfico enviado desde la VM cliente y destinado a la IP virtual de la regla de reenvío se intercepta y se redirige al proxy de Envoy, que, a continuación, enruta tu solicitud a las VMs que alojan el servicio Hello World
.
Primero, comprueba que los back-ends estén en buen estado siguiendo estos pasos:
Consola
En la Google Cloud consola, ve a la página Cloud Service Mesh.
En el Resumen se indica si los servicios están en buen estado.
- Haz clic en el nombre de un servicio. La página Detalles del servicio contiene información sobre el estado de los back-ends.
- Si los back-ends no están en buen estado, puedes restablecerlos haciendo clic en el nombre de los back-ends y, a continuación, en Restablecer en la página Detalles de la instancia de VM.
gcloud
Usa el comando compute backend-services
get-health
para verificar que los backends están en buen estado:
gcloud compute backend-services get-health td-vm-service \ --global \ --format=get(name, healthStatus)
Después de verificar el estado de tus back-ends, inicia sesión en la VM cliente que se haya configurado para interceptar el tráfico y redirigirlo a Envoy. Envía 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.
Consola
En la consola, ve a la página Grupos de instancias. Google Cloud
- Selecciona el grupo de instancias
td-vm-mig-us-central1
. - En Conectar, haz clic en SSH.
Una vez que hayas iniciado sesión en la VM cliente, usa la herramienta
curl
para enviar una solicitud al servicioHello World
a través de Envoy:curl -H "Host: hello-world" http://10.0.0.1/
Si ejecutas este comando repetidamente, verás diferentes respuestas HTML que contienen 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
.
Una vez completada la configuración, cada máquina virtual de Compute Engine que tenga un proxy sidecar podrá acceder a los servicios configurados en Cloud Service Mesh mediante el protocolo HTTP.
Si has seguido los ejemplos específicos de esta guía y has usado la plantilla de VM de Compute Engine con el servidor HTTP de demostración y el nombre de host del servicio service-test
, sigue estos pasos para verificar la configuración:
- Inicia sesión en uno de los hosts de VM que tenga instalado un proxy adicional.
- Ejecuta el comando
curl -H 'Host: service-test' 10.0.0.1
. Esta solicitud devuelve el nombre de host del backend del grupo de instancias gestionado que ha atendido 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 el parámetro de dirección definido como 0.0.0.0
, lo que indica a Cloud Service Mesh que debe buscar coincidencias en función del host definido en el mapa de URLs. En la configuración de ejemplo, el nombre de host es service-test
.
Siguientes pasos
- Consulta información sobre la gestión avanzada del tráfico.
- Consulta cómo solucionar problemas de implementaciones de Cloud Service Mesh.
- Consulta cómo configurar la observabilidad con Envoy.