Configura VM mediante la implementación manual de Envoy

Este documento está dirigido a los administradores de red que desean configurar Cloud Service Mesh de forma manual. El proceso manual es un mecanismo heredado que solo se diseñó para usuarios avanzados que configuran Cloud Service Mesh con las APIs de balanceo de cargas.

Te recomendamos que configures Cloud Service Mesh con las APIs de enrutamiento de servicios en lugar de las APIs de balanceo de cargas anteriores. Si debes usar las APIs de balanceo de cargas, te recomendamos que uses la implementación automatizada 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 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 manual un plano de datos que consiste en proxies de sidecar de Envoy con máquinas virtuales (VM) de Compute Engine, configurarlo con Cloud Service Mesh 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 Cloud Service Mesh con las APIs de Compute Engine, que permiten que Cloud Service Mesh 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 e insertar proxies de Envoy de fuentes de terceros que no administra Google.

Cuando una aplicación envía tráfico al servicio configurado en Cloud Service Mesh, 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 Google Cloud. Para obtener más información sobre las redes de host y la intercepción de tráfico, consulta Intercepción de tráfico de proxy de Sidecar en Cloud Service Mesh.

Para cada host de VM que requiera acceso a los servicios de Cloud Service Mesh, 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 CLI 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 la malla de servicios de Cloud 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. Para obtener un archivo de configuración de arranque de muestra, abre el archivo comprimido traffic-director-xdsv3.tar.gz y modifica el archivo bootstrap_template.yaml según tus necesidades.

  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.

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.

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 instancia

  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
    • Permiso de acceso: Permitir el acceso total a todas las API de Cloud
  4. Haz clic en Administración, seguridad, discos, redes, usuario único.
  5. En la pestaña Herramientas de redes, en el campo Etiquetas de red, agrega la etiqueta td-http-server.
  6. 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
    
  7. Haz clic en Crear.

gcloud

Crea la plantilla de instancias:

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

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 Grupos de instancias

  2. Haz 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 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 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 de forma manual una plantilla de instancias y un grupo de instancias administrado para Cloud Service Mesh. 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:

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

    Ir a Plantillas de instancia

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

    #! /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}"
    
  7. Haz clic en Crear para crear la plantilla.

gcloud

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-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}"
'

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. 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. De forma predeterminada, verás la página para crear un grupo de instancias administrado.
  3. Selecciona Nuevo grupo de instancias administrado (sin estado). Para obtener más información, consulta MIG con o sin estado.
  4. Ingresa td-vm-mig-us-central1 como el nombre del grupo de instancias administrado y selecciona la zona us-central1-a.
  5. En Plantilla de instancias, selecciona la plantilla que creaste.
  6. Especifica 2 como la cantidad de instancias que deseas crear en el grupo.
  7. Haz 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-vm-mig-us-central1 \
    --zone us-central1-a --size=2 --template=td-vm-template

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.

Console

  1. En la consola de Google Cloud, ve a la página Verificaciones de estado.

    Ir a 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
    
  2. 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 CLI de Google Cloud, 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. En la consola de Google Cloud, ve a la página Service Mesh de Cloud.

    Ir a 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 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

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

Usa estas instrucciones para 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 Cloud Service Mesh.

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 10.0.0.1 como parámetro de dirección, lo que significa que el enrutamiento del servicio se realiza según la VIP de destino real del servicio.

Console

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

    Ir a 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 Agrega la regla de host y de ruta.

  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 de acceso. 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 \
       --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.

Primero, verifica que los backends estén en buen estado mediante los siguientes pasos:

Console

  1. En la consola de Google Cloud, ve a la página Service Mesh de Cloud.

    Ir a Cloud Service Mesh

    En Resumen, se indica si los servicios están en buen estado.

  2. Haz clic en el nombre de un servicio. La página Detalles del servicio contiene información sobre el estado de los backends.
  3. Puedes restablecer los backends si están en mal estado. Para ello, haz clic en sus nombres y, luego, en Restablecer en la página de 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 los estados de tus backends, accede a la VM cliente que se configuró para interceptar el tráfico y redireccionarlo a Envoy. Envía 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.

Console

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

    Ir a 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.

Cuando se completa la configuración, cada VM de Compute Engine que tiene un proxy de sidecar puede acceder a los servicios configurados en la malla de servicios de Cloud 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 Cloud Service Mesh que debe hacer coincidir en función del host definido en el mapa de URL. En la configuración de ejemplo, el nombre de host es service-test.

¿Qué sigue?