Configure VMs através da implementação manual do Envoy

Este documento destina-se a administradores de rede que pretendam configurar manualmente o Cloud Service Mesh. O processo manual é um mecanismo antigo destinado apenas a utilizadores avançados que estão a configurar o Cloud Service Mesh com as APIs de equilíbrio de carga.

Recomendamos vivamente que configure a malha de serviços na nuvem através das APIs de encaminhamento de serviços, em vez das APIs de balanceamento de carga mais antigas. Se tiver de usar as APIs de equilíbrio de carga, recomendamos que use a implementação automatizada do Envoy em vez do processo manual descrito nesta página.

Antes de seguir as instruções neste guia, conclua as tarefas de pré-requisitos descritas no artigo Prepare-se para configurar APIs de encaminhamento de serviços com o Envoy e cargas de trabalho sem proxy.

Este guia mostra como implementar manualmente um plano de dados que consiste em proxies sidecar do Envoy com máquinas virtuais (VMs) do Compute Engine, configurá-lo através da Cloud Service Mesh e validar a configuração para garantir que está a funcionar corretamente. Este processo envolve:

  1. Criar um serviço de teste.
  2. Implementar um plano de dados simples no Compute Engine através de proxies Envoy.
  3. Configurar a malha de serviços na nuvem através das APIs do Compute Engine, que permitem à malha de serviços na nuvem configurar os seus proxies sidecar do Envoy.
  4. Inicie sessão numa VM que esteja a executar um proxy Envoy e envie um pedido para um back-end com balanceamento de carga através do proxy Envoy.

Os exemplos de configuração neste documento destinam-se a fins de demonstração. Para um ambiente de produção, pode ter de implementar componentes adicionais com base no seu ambiente e requisitos.

Vista geral do processo de configuração

Esta secção descreve o processo de configuração manual para serviços executados em VMs do Compute Engine. O processo de configuração das VMs cliente consiste em configurar um proxy sidecar e a interceção de tráfego num anfitrião de VM do Compute Engine. Em seguida, configure o balanceamento de carga através das Google Cloud APIs de balanceamento de carga.

Esta secção fornece informações sobre como obter e injetar proxies Envoy de fontes de terceiros que não são geridas pela Google.

Quando uma aplicação envia tráfego para o serviço configurado na Cloud Service Mesh, o tráfego é intercetado e redirecionado para o proxy sidecar compatível com a API xDS e, em seguida, o balanceamento de carga é feito para os back-ends de acordo com a configuração nos Google Cloud componentes de balanceamento de carga. Para mais informações sobre a rede de anfitriões e a interceção de tráfego, leia o artigo Interceção de tráfego de proxy Sidecar na malha de serviços na nuvem.

Para cada anfitrião de VM que requer acesso aos serviços da Cloud Service Mesh, siga estes passos:

  1. Atribua uma conta de serviço à VM.

  2. Defina o âmbito de acesso à API da VM para permitir o acesso total às Google Cloud APIs.

    • Quando criar as VMs, em Identidade e acesso à API, clique em Permitir acesso total a todas as APIs Google Cloud.

      Aceda à página de instâncias de VM.

    • Com a CLI gcloud, especifique o seguinte:

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

  3. Permita ligações de saída para trafficdirector.googleapis.com (TCP, porta 443) a partir da VM, para que o proxy sidecar possa ligar-se ao plano de controlo do Cloud Service Mesh através de gRPC. As ligações de saída à porta 443 estão ativadas por predefinição.

  4. Implemente um proxy sidecar compatível com a API xDS (como o Envoy), com uma configuração de arranque que aponte para trafficdirector.googleapis.com:443 como o respetivo servidor xDS. Para obter um ficheiro de configuração de arranque de exemplo, abra o ficheiro comprimido traffic-director-xdsv3.tar.gz e modifique o ficheiro bootstrap_template.yaml de acordo com as suas necessidades.

  5. Redirecionar o tráfego IP destinado aos serviços para a porta do ouvinte de interceção do proxy sidecar.

Crie o serviço de teste do Hello World

Esta secção mostra como criar um serviço de teste simples que devolve o nome do anfitrião da VM que processou o pedido do cliente. O serviço de teste é simples. Trata-se de um servidor Web implementado num grupo de instâncias gerido do Compute Engine.

Crie o modelo de instância

O modelo de instância que cria configura um servidor Web apache2 de exemplo através do parâmetro startup-script.

Consola

  1. Na Google Cloud consola, aceda à página Modelos de instâncias.

    Aceda a Modelos de instâncias

  2. Clique em Criar modelo de instância.
  3. Nos campos, introduza as seguintes informações:
    • Nome: td-demo-hello-world-template
    • Disco de arranque: Debian GNU/Linux 10 (buster)
    • Conta de serviço: conta de serviço predefinida do Compute Engine
    • Âmbitos de acesso: permitir acesso total a todas as APIs Google Cloud
  4. Clique em Gestão, segurança, discos, trabalhar em rede, arrendamento único.
  5. No separador Rede, no campo Etiquetas de rede, adicione a etiqueta td-http-server.
  6. No separador Gestão, copie o seguinte script para o campo Script de arranque.

    #! /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. Clique em Criar.

gcloud

Crie o modelo de instância:

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"

Crie o grupo de instâncias geridas

Nesta secção, especifica que o grupo de instâncias gerido tem sempre duas instâncias do serviço de teste. Isto destina-se a fins de demonstração. O Cloud Service Mesh suporta grupos de instâncias geridos com escalonamento automático.

Consola

  1. Na Google Cloud consola, aceda à página Grupos de instâncias.

    Aceda a Grupos de instâncias

  2. Clique em Criar grupo de instâncias.
  3. Selecione Novo grupo de instâncias gerido (sem estado). Para mais informações, consulte o artigo Grupos de instâncias geridos sem estado ou com estado.
  4. Introduza td-demo-hello-world-mig para o nome do grupo de instâncias geridas e selecione a zona us-central1-a.
  5. Em Modelo de instância, selecione td-demo-hello-world-template, que é o modelo de instância que criou.
  6. Em Modo de ajuste de escala automático, selecione Não ajustar a escala automaticamente.
  7. Em Número de instâncias, especifique, pelo menos, duas como o número de instâncias que quer criar no grupo.
  8. Clique em Criar.

gcloud

Use a CLI gcloud para criar um grupo de instâncias gerido com o modelo de instância que criou anteriormente.

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

Crie o modelo de instância e o grupo de instâncias geridas onde o Envoy está implementado

Use as instruções nesta secção para criar manualmente um modelo de instância e um grupo de instâncias geridas para a Cloud Service Mesh. Os grupos de instâncias geridas criam novas VMs de back-end através do dimensionamento automático.

Este exemplo mostra como:

  • Crie um modelo de VM com uma configuração completa do Envoy e um serviço de exemplo que disponibilize o respetivo nome de anfitrião através do protocolo HTTP.
  • Configure um grupo de instâncias geridas através deste modelo.

Crie o modelo de instância

Primeiro, crie o modelo de instância de VM do Compute Engine. Este modelo configura automaticamente o proxy sidecar do Envoy e o serviço Web apache2 de exemplo através do parâmetro startup-script.

Consola

  1. Na Google Cloud consola, aceda à página Modelos de instâncias.

    Aceda a Modelos de instâncias

  2. Clique em Criar modelo de instância.
  3. Preencha os campos da seguinte forma:

    • Nome: td-vm-template
    • Disco de arranque: Debian GNU/Linux 10 (buster)
    • Conta de serviço: conta de serviço predefinida do Compute Engine
    • Âmbitos de acesso: permitir acesso total a todas as APIs Cloud
  4. Em Firewall, selecione as caixas junto a Permitir tráfego HTTP e Permitir tráfego HTTPS.

  5. Clique em Gestão, segurança, discos, trabalhar em rede, arrendamento único.

  6. No separador Gestão, copie o seguinte script para o campo Script de arranque.

    #! /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. Clique em Criar para criar o modelo.

gcloud

Crie o modelo de instância.

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

Crie o grupo de instâncias geridas

Se não tiver um grupo de instâncias gerido com serviços em execução, crie um grupo de instâncias gerido, usando um modelo de VM, como o apresentado na secção anterior. Este exemplo usa o modelo de instância criado na secção anterior para demonstrar a funcionalidade. Não tem de usar o modelo de instância.

Consola

  1. Na Google Cloud consola, aceda à página Grupos de instâncias.

    Aceda a Grupos de instâncias

  2. Clique em Criar um grupo de instâncias. Por predefinição, é apresentada a página para criar um grupo de instâncias gerido.
  3. Escolha Novo grupo de instâncias gerido (sem estado). Para mais informações, consulte o artigo Grupos de instâncias geridos sem estado ou com estado.
  4. Introduza td-vm-mig-us-central1 para o nome do grupo de instâncias gerido e selecione a zona us-central1-a.
  5. Em Modelo de instância, selecione o modelo de instância que criou.
  6. Especifique 2 como o número de instâncias que quer criar no grupo.
  7. Clique em Criar.

gcloud

Use a CLI gcloud para criar um grupo de instâncias gerido com o modelo de instância que criou anteriormente.

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

Configure o Cloud Service Mesh com Google Cloud componentes de equilíbrio de carga

As instruções nesta secção mostram como configurar a Cloud Service Mesh para que os seus proxies Envoy equilibrem a carga do tráfego de saída em duas instâncias de back-end. Configura os seguintes componentes:

Crie a verificação de funcionamento

Use as instruções seguintes para criar uma verificação de funcionamento. Para mais informações, consulte o artigo Crie verificações de funcionamento.

Consola

  1. Na Google Cloud consola, aceda à página Verificações de estado.

    Aceda às verificações de saúde

  2. Clique em Criar verificação de funcionamento.
  3. Para o nome, introduza td-vm-health-check.
  4. Para o protocolo, selecione HTTP.
  5. Clique em Criar.

gcloud

  1. Crie a verificação de funcionamento:

    gcloud compute health-checks create http td-vm-health-check
    
  2. Crie a regra 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
    

Crie o serviço de back-end

Se usar a CLI do Google Cloud, tem de designar o serviço de back-end como um serviço de back-end global com um esquema de equilíbrio de carga de INTERNAL_SELF_MANAGED. Adicione a verificação de estado e um grupo de instâncias gerido ou não gerido ao serviço de back-end. Tenha em atenção que este exemplo usa o grupo de instâncias gerido com o modelo de VM do Compute Engine que executa o serviço HTTP de exemplo criado em Crie o grupo de instâncias gerido.

Consola

  1. Na Google Cloud consola, aceda à página Cloud Service Mesh.

    Aceda ao Cloud Service Mesh

  2. No separador Serviços, clique em Criar serviço.
  3. Clique em Continuar.
  4. Para o nome do serviço, introduza td-vm-service.
  5. Selecione a rede de VPC correta.
  6. Certifique-se de que o Tipo de back-end é Grupos de instâncias.
  7. Selecione o grupo de instâncias gerido que criou.
  8. Introduza os números de porta corretos.
  9. Escolha Utilização ou Taxa como o Modo de equilíbrio. O valor predefinido é Rate.
  10. Clique em Concluído.
  11. Selecione a verificação de funcionamento que criou.
  12. Clique em Guardar e continuar.
  13. Clique em Criar.

gcloud

  1. Crie o serviço de back-end:

    gcloud compute backend-services create td-vm-service \
      --global \
      --load-balancing-scheme=INTERNAL_SELF_MANAGED \
      --health-checks td-vm-health-check
    
  2. Adicione os back-ends ao serviço de back-end:

    gcloud compute backend-services add-backend td-vm-service \
       --instance-group td-demo-hello-world-mig \
       --instance-group-zone us-central1-a \
       --global
    

Crie o mapa de regras de encaminhamento

O mapa de regras de encaminhamento define como o Cloud Service Mesh encaminha o tráfego na sua malha.

Use estas instruções para criar a regra de encaminhamento, a regra de encaminhamento, o proxy de destino e o endereço IP interno para a configuração da Cloud Service Mesh.

O tráfego enviado para o endereço IP interno é intercetado pelo proxy Envoy e enviado para o serviço adequado de acordo com as regras de anfitrião e caminho.

A regra de encaminhamento é criada como uma regra de encaminhamento global com o load-balancing-scheme definido como INTERNAL_SELF_MANAGED.

Pode definir o endereço da sua regra de encaminhamento como 0.0.0.0. Se o fizer, o tráfego é encaminhado com base no nome de anfitrião HTTP e nas informações do caminho configuradas no mapa de URLs, independentemente do endereço IP de destino real do pedido. Neste caso, os nomes de anfitrião dos seus serviços, conforme configurados nas regras de anfitrião, têm de ser exclusivos na configuração da malha de serviços. Ou seja, não pode ter dois serviços diferentes, com diferentes conjuntos de back-ends, que usem o mesmo nome de anfitrião.

Em alternativa, pode ativar o encaminhamento com base no VIP de destino real do serviço. Se configurar o VIP do seu serviço como um parâmetro address da regra de encaminhamento, apenas os pedidos destinados a este endereço são encaminhados com base nos parâmetros HTTP especificados no mapa de URLs.

Este exemplo usa 10.0.0.1 como o parâmetro de endereço, o que significa que o encaminhamento para o seu serviço é realizado com base no VIP de destino real do serviço.

Consola

Na Google Cloud consola, o proxy de destino é combinado com a regra de encaminhamento. Quando cria a regra de encaminhamento, Google Cloud cria automaticamente um proxy HTTP de destino e anexa-o ao mapa de URLs.

  1. Na Google Cloud consola, aceda à página Cloud Service Mesh.

    Aceda ao Cloud Service Mesh

  2. No separador Mapas de regras de encaminhamento, clique em Criar mapa de regras de encaminhamento.
  3. Introduza um nome.
  4. Clique em Adicionar regra de encaminhamento.
  5. Para o nome da regra de encaminhamento, introduza td-vm-forwarding-rule.
  6. Selecione a rede.
  7. Selecione o seu IP interno. O tráfego enviado para este endereço IP é intercetado pelo proxy Envoy e enviado para o serviço adequado de acordo com as regras de anfitrião e caminho.

    A regra de encaminhamento é criada como uma regra de encaminhamento global com o load-balancing-scheme definido como INTERNAL_SELF_MANAGED.

  8. No campo IP personalizado, escreva 10.0.0.1. Quando a sua VM envia para este endereço IP, o proxy Envoy interceta-o e envia-o para o ponto final do serviço de back-end adequado de acordo com as regras de gestão de tráfego definidas no mapa de URLs.

    Cada regra de encaminhamento numa rede VPC tem de ter um endereço IP e uma porta únicos por rede VPC. Se criar mais do que uma regra de encaminhamento com o mesmo endereço IP e porta numa determinada rede VPC, apenas a primeira regra de encaminhamento é válida. Os outros são ignorados. Se 10.0.0.1 não estiver disponível na sua rede, escolha um endereço IP diferente.

  9. Certifique-se de que a Porta está definida como 80.

  10. Clique em Guardar.

  11. Na secção Regras de encaminhamento, selecione Regra simples de anfitrião e caminho.

  12. Na secção Regras de anfitrião e caminho, selecione td-vm-service como o serviço.

  13. Clique em Adicionar regra de anfitrião e caminho.

  14. Em Anfitriões, introduza hello-world.

  15. Em Serviço, selecione td-vm-service.

  16. Clique em Guardar.

gcloud

  1. Crie um mapa de URLs que use o serviço de back-end:

    gcloud compute url-maps create td-vm-url-map \
       --default-service td-vm-service
    
  2. Crie um correspondente de caminho do mapa de URL e uma regra de anfitrião para encaminhar o tráfego para o seu serviço com base no nome do anfitrião e num caminho. Este exemplo usa service-test como o nome do serviço e um correspondente de caminhos predefinido que corresponde a todos os pedidos de caminhos para este anfitrião (/*).

    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. Crie o proxy HTTP de destino:

    gcloud compute target-http-proxies create td-vm-proxy \
       --url-map td-vm-url-map
    
  4. Crie a regra de encaminhamento. A regra de encaminhamento tem de ser global e tem de ser criada com o 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
    

Neste ponto, o Cloud Service Mesh está configurado para equilibrar a carga do tráfego para os serviços especificados no mapa de URLs em back-ends no grupo de instâncias gerido.

Valide a configuração

Nesta parte final do guia de configuração do Cloud Service Mesh para VMs do Compute Engine, testa se o tráfego enviado da VM do cliente destinado ao VIP da regra de encaminhamento é intercetado e redirecionado para o proxy Envoy, que, em seguida, encaminha o seu pedido para as VMs que alojam o serviço Hello World.

Primeiro, verifique se os back-ends estão em bom estado através dos seguintes passos:

Consola

  1. Na Google Cloud consola, aceda à página Cloud Service Mesh.

    Aceda ao Cloud Service Mesh

    O Resumo indica se os serviços estão em bom estado.

  2. Clique no nome de um serviço. A página Detalhes do serviço tem informações sobre o estado dos back-ends.
  3. Se os back-ends não estiverem em bom estado, pode repô-los clicando no nome dos back-ends e, de seguida, em Repor na página de detalhes da instância de VM.

gcloud

Use o comando compute backend-services get-health para verificar se os back-ends estão em bom estado:

gcloud compute backend-services get-health td-vm-service \
    --global \
    --format=get(name, healthStatus)

Depois de validar os estados de saúde dos seus back-ends, inicie sessão na VM do cliente que foi configurada para intercetar o tráfego e redirecioná-lo para o Envoy. Envie um pedido curl ao VIP associado ao seu mapa de regras de encaminhamento. O Envoy inspeciona o pedido curl, determina a que serviço deve ser resolvido e envia o pedido para um back-end associado a esse serviço.

Consola

  1. Na Google Cloud consola, aceda à página Grupos de instâncias.

    Aceda a Grupos de instâncias

  2. Selecione o td-vm-mig-us-central1 grupo de instâncias.
  3. Em Associar, clique em SSH.
  4. Depois de iniciar sessão na VM do cliente, use a ferramenta curl para enviar um pedido ao serviço Hello World através do Envoy:

    curl -H "Host: hello-world" http://10.0.0.1/
    

Quando emite este comando repetidamente, vê respostas HTML diferentes com os nomes de anfitrião dos back-ends no grupo de instâncias gerido Hello World. Isto deve-se ao facto de o Envoy estar a usar o equilíbrio de carga round robin, o algoritmo de equilíbrio de carga predefinido, ao enviar tráfego para os backends do serviço Hello World.

Quando a configuração estiver concluída, cada VM do Compute Engine que tenha um proxy sidecar pode aceder aos serviços configurados na Cloud Service Mesh através do protocolo HTTP.

Se seguiu os exemplos específicos neste guia usando o modelo de VM do Compute Engine com o servidor HTTP de demonstração e o nome de anfitrião do serviço service-test, use estes passos para validar a configuração:

  1. Inicie sessão num dos anfitriões de VMs que tenha um proxy sidecar instalado.
  2. Execute o comando curl -H 'Host: service-test' 10.0.0.1. Este pedido devolve o nome do anfitrião do back-end do grupo de instâncias gerido que serviu o pedido.

No passo 2, tenha em atenção que pode usar qualquer endereço IP. Por exemplo, o comando curl -I -H 'Host: service-test' 1.2.3.4 funcionaria no passo 2.

Isto deve-se ao facto de a regra de encaminhamento ter o parâmetro de endereço definido como 0.0.0.0, o que indica ao Cloud Service Mesh que deve fazer a correspondência com base no anfitrião definido no mapa de URLs. Na configuração de exemplo, o nome do anfitrião é service-test.

O que se segue?