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:

  1. Crear un servicio de prueba.
  2. Desplegar un plano de datos sencillo en Compute Engine con proxies de Envoy.
  3. Configurar Cloud Service Mesh mediante las APIs de Compute Engine, que permiten a Cloud Service Mesh configurar tus proxies sidecar de Envoy.
  4. 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:

  1. Asigna una cuenta de servicio a la VM.

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

      Ve a la página Instancias de VM.

    • En gcloud CLI, especifica lo siguiente:

      --scopes=https://www.googleapis.com/auth/cloud-platform.

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

  4. 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 archivo bootstrap_template.yaml para adaptarlo a tus necesidades.

  5. Redirige el tráfico IP destinado a los servicios al puerto de escucha de intercepción del proxy sidecar.

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

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

    Ir a Plantillas de instancia

  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: 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
  4. Haz clic en Gestión, seguridad, discos, redes, único cliente.
  5. En la pestaña Redes, en el campo Etiquetas de red, añade la etiqueta td-http-server.
  6. 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
    
  7. 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

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

    Ir a 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 No autoescalar.
  7. En Número de instancias, especifica al menos dos como el número de instancias que quieres 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

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

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

    Ir a Plantillas de instancia

  2. Haz clic en Crear plantilla de instancia.
  3. 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
  4. En Cortafuegos, selecciona las casillas situadas junto a Permitir el tráfico HTTP y Permitir el tráfico HTTPS.

  5. Haz clic en Gestión, seguridad, discos, redes, único cliente.

  6. 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}"
    
  7. 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

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

    Ir a Grupos de instancias

  2. Haga clic en Crear un grupo de instancias. De forma predeterminada, se muestra la página para crear un grupo de instancias gestionado.
  3. 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.
  4. Introduce td-vm-mig-us-central1 como nombre del grupo de instancias gestionado y selecciona la zona us-central1-a.
  5. En Plantilla de instancia, selecciona 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.

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:

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

    Ir a Comprobaciones del 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
    
  2. 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

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

    Ir a 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 el grupo de instancias gestionado que has creado.
  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.
  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. 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.

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

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

    gcloud compute url-maps create td-vm-url-map \
       --default-service td-vm-service
    
  2. 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
    
  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 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

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

    Ir a Cloud Service Mesh

    En el 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 back-ends.
  3. 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

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

    Ir a Grupos de instancias

  2. Selecciona el grupo de instancias td-vm-mig-us-central1.
  3. 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/
    

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:

  1. Inicia sesión en uno de los hosts de VM que tenga instalado un proxy adicional.
  2. 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