Configurar VMs usando a implantação manual do Envoy

Este documento é destinado a administradores de rede que querem configurar a malha de serviços do Cloud manualmente. O processo manual é um mecanismo legado destinado apenas a usuários avançados que estão configurando o Cloud Service Mesh com as APIs de balanceamento de carga.

É altamente recomendável configurar o Cloud Service Mesh usando as APIs de roteamento de serviço em vez das APIs de balanceamento de carga mais antigas. Se você precisar usar as APIs de balanceamento de carga, recomendamos usar a implantação automatizada do Envoy em vez do processo manual descrito nesta página.

Antes de seguir as instruções deste guia, conclua as tarefas de pré-requisito descritas em Preparar para configurar APIs de roteamento de serviço com o Envoy e cargas de trabalho sem proxy.

Este guia mostra como implantar manualmente um plano de dados que consiste em proxies sidecar do Envoy com máquinas virtuais (VMs) do Compute Engine, configurá-lo usando a Cloud Service Mesh e verificar se a configuração está funcionando corretamente. Esse processo envolve:

  1. Criação de um serviço de teste.
  2. Implantação de um plano de dados simples no Compute Engine usando proxies Envoy.
  3. Configuração do Cloud Service Mesh usando as APIs do Compute Engine, que permitem que o Cloud Service Mesh configure os proxies secundários do Envoy.
  4. Faça login em uma VM que esteja executando um proxy Envoy e envie uma solicitação para um back-end com carga balanceada por meio do proxy Envoy.

Os exemplos de configuração neste documento são para fins de demonstração. Para um ambiente de produção, pode ser preciso implantar mais componentes, com base no ambiente e nos requisitos.

Visão geral do processo de configuração

Nesta seção, apresentamos o processo de configuração manual para serviços executados em VMs do Compute Engine. O processo de configuração das VMs do cliente consiste na definição de um proxy secundário e na interceptação do tráfego em um host de VM do Compute Engine. Depois, você configura o balanceamento de carga usando as APIs do Google Cloud.

Esta seção fornece informações sobre como receber e injetar proxies Envoy de fontes de terceiros que não são gerenciadas pelo Google.

Quando um aplicativo envia tráfego ao serviço configurado no Cloud Service Mesh, o tráfego é interceptado e redirecionado ao proxy secundário compatível com a API xDS. Depois, a carga do tráfego é balanceada para os back-ends de acordo com a configuração dos componentes de balanceamento de carga no Google Cloud. Para mais informações sobre a rede do host e a interceptação de tráfego, leia Interceptação de tráfego do proxy sidecar no Cloud Service Mesh.

Para cada host de VM que requer acesso aos serviços do Cloud Service Mesh, execute as seguintes etapas:

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

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

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

      Acessar a página Instâncias de VMs

    • Com a CLI gcloud, especifique o seguinte:

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

  3. Permita conexões de saída para trafficdirector.googleapis.com (TCP, porta 443) da VM para que o proxy secundário possa se conectar ao plano de controle da Cloud Service Mesh sobre gRPC. As conexões de saída com a porta 443 são ativadas por padrão.

  4. Implante um proxy sidecar compatível com a API xDS (como o Envoy), com uma configuração de inicialização apontando para trafficdirector.googleapis.com:443 como o servidor xDS. Para conseguir um arquivo de configuração de inicialização de exemplo, abra o arquivo compactado traffic-director-xdsv3.tar.gz e modifique o arquivo bootstrap_template.yaml para atender às suas necessidades.

  5. Redirecione o tráfego de IP destinado aos serviços para a porta do listener de interceptação de proxy sidecar.

Criar o serviço de teste Hello World

Nesta seção, mostramos como criar um serviço de teste simples que retorna o nome do host da VM que atendeu à solicitação do cliente. O serviço de teste é descomplicado, porque é um servidor da Web implantado em um grupo de instâncias gerenciadas do Compute Engine.

Criar o modelo da instância

O modelo de instância que você cria configura um servidor da Web apache2 de amostra usando o parâmetro startup-script.

Console

  1. No Console do Google Cloud, acesse a página Modelos de instância.

    Acesse Modelos de instância

  2. Clique em Criar modelo de instância.
  3. Nos campos, insira as informações a seguir:
    • Name: td-demo-hello-world-template
    • Disco de inicialização: Debian GNU/Linux 10 (buster)
    • Conta de serviço: conta de serviço padrão do Compute Engine
    • Escopos de acesso: permitir acesso total a todas as APIs do Cloud
  4. Clique em Gerenciamento, segurança, discos, rede, locatário único.
  5. Na guia Rede, no campo Tags de rede, adicione a tag td-http-server.
  6. Na guia Gerenciamento, copie o seguinte script para o campo Script de inicialização.

    #! /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 da 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"

Criar o grupo gerenciado de instâncias

Nesta seção, você especifica que o grupo de instâncias gerenciadas sempre tem duas instâncias do serviço de teste. Isso é para fins de demonstração. O Cloud Service Mesh é compatível com grupos de instâncias gerenciadas com escalonamento automático.

Console

  1. No Console do Google Cloud, acesse a página Grupos de instâncias.

    Acesse grupo de instâncias

  2. Clique em Criar grupo de instâncias.
  3. Selecione Novo grupo gerenciado de instâncias (sem estado). Para mais informações, consulte MIGs sem estado ou com estado.
  4. Insira td-demo-hello-world-mig como o nome do grupo de instâncias gerenciadas 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 você criou.
  6. Em Modo de escalonamento automático, selecione Não fazer escalonamento automático.
  7. Em Número de instâncias, especifique pelo menos duas como o número de instâncias que você quer criar no grupo.
  8. Clique em Criar

gcloud

Use a CLI gcloud para criar um grupo de instâncias gerenciadas com o modelo de instância criado anteriormente.

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

Criar o modelo de instância e o grupo gerenciado de instâncias em que o Envoy é implantado

Use as instruções nesta seção para criar manualmente um modelo de instância e um grupo gerenciado de instâncias para o Cloud Service Mesh. Com os grupos de instâncias gerenciadas, é possível criar novas VMs de back-end por meio do escalonamento automático.

Este exemplo mostra como:

  • Crie um modelo de VM com uma configuração completa do Envoy e um serviço de amostra que exiba o nome de host dele usando o protocolo HTTP.
  • Configure um grupo de instâncias gerenciadas usando esse modelo.

Criar o modelo da instância

Primeiro, crie o modelo de instância de VM do Compute Engine. Esse modelo configura automaticamente o proxy secundário do Envoy e o serviço da Web apache2 de amostra por meio do parâmetro startup-script.

Console

  1. No Console do Google Cloud, acesse a página Modelos de instância.

    Acesse Modelos de instância

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

    • Nome: td-vm-template
    • Disco de inicialização: Debian GNU/Linux 10 (buster)
    • Conta de serviço: conta de serviço padrão do Compute Engine
    • Escopos de acesso: permitir acesso total a todas as APIs do Cloud
  4. Em Firewall, marque as caixas ao lado de Permitir tráfego HTTP e Permitir tráfego HTTPS.

  5. Clique em Gerenciamento, segurança, discos, rede, locatário único.

  6. Na guia Gerenciamento, copie o seguinte script para o campo Script de inicialização.

    #! /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 da 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}"
'

Criar o grupo gerenciado de instâncias

Se você não tiver um grupo de instâncias gerenciadas com serviços em execução, crie um grupo de instâncias gerenciadas usando um modelo de VM como o mostrado na seção anterior. Este exemplo usa o modelo de instância criado na seção anterior para demonstrar a funcionalidade. Você não precisa usar o modelo de instância.

Console

  1. No Console do Google Cloud, acesse a página Grupos de instâncias.

    Acesse grupo de instâncias

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

gcloud

Use a CLI gcloud para criar um grupo de instâncias gerenciadas com o modelo de instância criado anteriormente.

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

Configurar o Cloud Service Mesh com componentes de balanceamento de carga do Google Cloud

As instruções nesta seção mostram como configurar o Cloud Service Mesh para que os proxies do Envoy balanceiem o tráfego de saída em duas instâncias de back-end. Você configura os seguintes componentes:

Crie a verificação de integridade.

Use as instruções a seguir para criar uma verificação de integridade. Para mais informações, consulte Criar verificações de integridade.

Console

  1. No console do Google Cloud, acesse a página Verificações de integridade.

    Acessar "Verificações de integridade"

  2. Clique em Create health check.
  3. Para o nome, insira td-vm-health-check.
  4. Como protocolo, selecione HTTP.
  5. Clique em Criar.

gcloud

  1. Crie a verificação de integridade:

    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 você usa a CLI do Google Cloud, é necessário designar o serviço de back-end como um serviço de back-end global com o esquema de balanceamento de carga INTERNAL_SELF_MANAGED. Adicione a verificação de integridade e um grupo de instâncias gerenciadas ou não gerenciadas ao serviço de back-end. Observe que este exemplo usa o grupo gerenciado de instâncias com o modelo de VM do Compute Engine que executa o serviço HTTP de amostra criado em Como criar o grupo gerenciado de instâncias.

Console

  1. No console do Google Cloud, acesse a página Cloud Service Mesh.

    Acessar o Cloud Service Mesh

  2. Na guia Serviços, clique em Criar serviço.
  3. Clique em Continuar.
  4. Como nome do serviço, insira td-vm-service.
  5. Selecione a rede VPC correta.
  6. Verifique se o Tipo de back-end é Grupos de instâncias.
  7. Selecione o grupo de instâncias gerenciadas que você criou.
  8. Insira os Números de porta corretos.
  9. Escolha Utilização ou Taxa como o Modo de balanceamento. O valor padrão é Taxa.
  10. Clique em Concluído.
  11. Selecione a verificação de integridade que você criou.
  12. Clique em Salvar 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
    

Criar o mapa de regras de roteamento

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

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

O tráfego enviado para o endereço IP interno é interceptado pelo proxy do Envoy e encaminhado ao serviço apropriado de acordo com as regras de caminho e host.

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

Você pode definir o endereço da regra de encaminhamento como 0.0.0.0. Se você fizer isso, o tráfego será roteado com base nas informações de caminho e nome do host HTTP configuradas no mapa de URL, independentemente do endereço IP de destino real da solicitação. Nesse caso, os nomes de host dos seus serviços, conforme configurado nas regras de host, precisam ser exclusivos na configuração da malha de serviço. Ou seja, não é possível ter dois serviços diferentes, com diferentes conjuntos de back-ends, que usam o mesmo nome de host.

Como alternativa, é possível ativar o roteamento com base no VIP real do destino do serviço. Se você configurar o VIP do seu serviço como um parâmetro address da regra de encaminhamento, somente as solicitações destinadas a esse endereço serão roteadas com base nos parâmetros HTTP especificados no mapa de URL.

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

Console

No Console do Google Cloud, o proxy de destino é combinado com a regra de encaminhamento. Quando você cria a regra de encaminhamento, o Google Cloud cria automaticamente um proxy HTTP de destino e o anexa ao mapa de URLs.

  1. No console do Google Cloud, acesse a página Cloud Service Mesh.

    Acessar o Cloud Service Mesh

  2. Na guia Mapas de regras de roteamento, clique em Criar mapa de regras de roteamento.
  3. Insira um nome.
  4. Clique em Adicionar regra de encaminhamento.
  5. Como nome da regra de encaminhamento, insira td-vm-forwarding-rule.
  6. Selecione a rede.
  7. Selecione seu IP interno. O tráfego enviado para esse endereço IP é interceptado pelo proxy Envoy e enviado para o serviço apropriado de acordo com as regras de host e caminho.

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

  8. No campo IP personalizado, digite 10.0.0.1. Quando a VM envia esse endereço IP, o proxy do Envoy intercepta-o e o envia para o endpoint do serviço de back-end apropriado de acordo com as regras de gerenciamento de tráfego definidas no mapa de URL.

    Cada regra de encaminhamento em uma rede VPC precisa ter um endereço IP e uma porta exclusivos por rede VPC. Se você criar mais de uma regra de encaminhamento com o mesmo endereço IP e a mesma porta em uma determinada rede VPC, somente a primeira regra de encaminhamento será válida. 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 Porta esteja definida como 80.

  10. Clique em Save.

  11. Na seção Regras de roteamento, selecione Regra simples de host e caminho.

  12. Na seção Regras de host e caminho, selecione td-vm-service como o Serviço.

  13. Clique em Adicionar host e regra de caminho.

  14. Em Hosts, insira hello-world.

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

  16. Clique em Save.

gcloud

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

    gcloud compute url-maps create td-vm-url-map \
       --default-service td-vm-service
    
  2. Crie uma correspondência de caminho do mapa de URL e uma regra de host para rotear o tráfego para o serviço com base no nome do host e em um caminho. Este exemplo usa service-test como o nome do serviço e uma correspondência de caminho padrão que corresponde a todas as solicitações de caminho para esse 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. 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 precisa ser global e 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, a Cloud Service Mesh está configurada para balancear a carga do tráfego dos serviços especificados no mapa de URLs nos back-ends no grupo de instâncias gerenciadas.

Verificar a configuração

Nesta parte final do guia de configuração da Cloud Service Mesh para VMs do Compute Engine, você testa se o tráfego enviado da VM cliente destinado à regra de encaminhamento VIP é interceptado e redirecionado ao proxy Envoy, que, em seguida, roteia sua solicitação para as VMs que hospedam o serviço Hello World.

Primeiro, siga estas etapas para verificar a integridade dos back-ends:

Console

  1. No console do Google Cloud, acesse a página Cloud Service Mesh.

    Acessar o Cloud Service Mesh

    O Resumo informa se os serviços estão íntegros.

  2. Clique no nome de um serviço. A página Detalhes do serviço tem informações sobre a integridade dos back-ends.
  3. Se os back-ends não estiverem íntegros, redefina-os clicando no nome deles e, em seguida, em Redefinir 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 íntegros:

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

Depois de verificar o estado de integridade dos back-ends, faça login na VM cliente que foi configurada para interceptar o tráfego e redirecioná-lo para o Envoy. Envie uma solicitação curl ao VIP associado ao mapa de regras de roteamento. O Envoy inspeciona a solicitação curl, determina qual serviço ele precisa resolver e a solicitação é enviada para um back-end associado a esse serviço.

Console

  1. No Console do Google Cloud, acesse a página Grupos de instâncias.

    Acesse grupo de instâncias

  2. Selecione o grupo de instâncias td-vm-mig-us-central1.
  3. Em Conectar, clique em SSH.
  4. Depois de fazer login na VM do cliente, use a ferramenta curl para enviar uma solicitação ao serviço Hello World por meio do Envoy:

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

Quando você emitir esse comando repetidamente, verá respostas HTML diferentes contendo os nomes do host dos back-ends no grupo de instâncias gerenciadas Hello World. Isso ocorre porque o Envoy usa o balanceamento de carga round robin, o algoritmo de balanceamento de carga padrão, ao enviar tráfego para os back-ends do serviço Hello World.

Quando a configuração é concluída, cada VM do Compute Engine que tem um proxy sidecar pode acessar os serviços configurados na Cloud Service Mesh usando o protocolo HTTP.

Se você tiver seguido os exemplos específicos deste guia, usando o modelo de VM do Compute Engine com o servidor HTTP de demonstração e o nome do host do serviço service-test, siga estas etapas para verificar a configuração:

  1. Faça login em um dos hosts de VM com um proxy sidecar instalado.
  2. Execute o comando curl -H 'Host: service-test' 10.0.0.1. Essa solicitação retorna o nome do host do back-end do grupo de instâncias gerenciadas que atendeu à solicitação.

Na etapa 2, observe que é possível usar qualquer endereço IP. Por exemplo, o comando curl -I -H 'Host: service-test' 1.2.3.4 funcionaria na etapa 2.

Isso ocorre porque a regra de encaminhamento tem o parâmetro de endereço definido como 0.0.0.0, que instrui o Cloud Service Mesh a corresponder com base no host definido no mapa de URL. No exemplo de configuração, o nome do host é service-test.

A seguir