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:
- Criação de um serviço de teste.
- Implantação de um plano de dados simples no Compute Engine usando proxies Envoy.
- 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.
- 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:
Atribua uma conta de serviço à VM.
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.
Com a CLI gcloud, especifique o seguinte:
--scopes=https://www.googleapis.com/auth/cloud-platform
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.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 arquivobootstrap_template.yaml
para atender às suas necessidades.Redirecione o tráfego de IP destinado aos serviços para a porta do listener de interceptação de proxy sidecar.
- Essa porta é definida como
TRAFFICDIRECTOR_INTERCEPTION_PORT
na configuração de metadados de inicialização do proxy. Além disso, ela é configurada como 15001 na amostra de arquivo de configuração de inicialização neste arquivo compactado. - O script
iptables.sh
do Istio no arquivo compactado pode ser usado para configurar a interceptação de tráfego.
- Essa porta é definida como
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
No Console do Google Cloud, acesse a página Modelos de instância.
- Clique em Criar modelo de instância.
- 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
- Name:
- Clique em Gerenciamento, segurança, discos, rede, locatário único.
- Na guia Rede, no campo Tags de rede, adicione a tag
td-http-server
. 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
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
No Console do Google Cloud, acesse a página Grupos de instâncias.
- Clique em Criar grupo de instâncias.
- Selecione Novo grupo gerenciado de instâncias (sem estado). Para mais informações, consulte MIGs sem estado ou com estado.
- Insira
td-demo-hello-world-mig
como o nome do grupo de instâncias gerenciadas e selecione a zonaus-central1-a
. - Em Modelo de instância, selecione
td-demo-hello-world-template
, que é o modelo de instância que você criou. - Em Modo de escalonamento automático, selecione Não fazer escalonamento automático.
- Em Número de instâncias, especifique pelo menos duas como o número de instâncias que você quer criar no grupo.
- 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
No Console do Google Cloud, acesse a página Modelos de instância.
- Clique em Criar modelo de instância.
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
Em Firewall, marque as caixas ao lado de Permitir tráfego HTTP e Permitir tráfego HTTPS.
Clique em Gerenciamento, segurança, discos, rede, locatário único.
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}"
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
No Console do Google Cloud, acesse a página Grupos de instâncias.
- Clique em Criar um grupo de instâncias. Por padrão, você vê a página para criar um grupo de instâncias gerenciadas.
- Escolha Novo grupo gerenciado de instâncias (sem estado). Para mais informações, consulte MIGs sem estado ou com estado.
- Digite
td-vm-mig-us-central1
para o nome do grupo de instâncias gerenciadas e selecione a zonaus-central1-a
. - Em Modelo de instância, selecione o modelo de instância que você criou.
- Especifique 2 como o número de instâncias que você quer criar no grupo.
- 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:
- Uma verificação de integridade Para mais informações sobre verificações de integridade, acesse Visão geral das verificações de integridade e Criar verificações de integridade.
- Uma regra de firewall para permitir que as sondagens da verificação de integridade alcancem os back-ends. Para saber mais, consulte Visão geral das verificações de integridade.
- Um serviço de back-end Para mais informações sobre os serviços de back-end, consulte Visão geral dos serviços de back-end.
- Um mapa de regras de roteamento Isso inclui a criação de uma regra de encaminhamento e um mapa de URL. Para mais informações, consulte Visão geral das regras de encaminhamento e Usar mapas de URL.
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
No console do Google Cloud, acesse a página Verificações de integridade.
- Clique em Create health check.
- Para o nome, insira
td-vm-health-check
. - Como protocolo, selecione HTTP.
- Clique em Criar.
gcloud
Crie a verificação de integridade:
gcloud compute health-checks create http td-vm-health-check
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
No console do Google Cloud, acesse a página Cloud Service Mesh.
- Na guia Serviços, clique em Criar serviço.
- Clique em Continuar.
- Como nome do serviço, insira
td-vm-service
. - Selecione a rede VPC correta.
- Verifique se o Tipo de back-end é Grupos de instâncias.
- Selecione o grupo de instâncias gerenciadas que você criou.
- Insira os Números de porta corretos.
- Escolha Utilização ou Taxa como o Modo de balanceamento. O valor padrão é Taxa.
- Clique em Concluído.
- Selecione a verificação de integridade que você criou.
- Clique em Salvar e continuar.
- Clique em Criar.
gcloud
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
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.
No console do Google Cloud, acesse a página Cloud Service Mesh.
- Na guia Mapas de regras de roteamento, clique em Criar mapa de regras de roteamento.
- Insira um nome.
- Clique em Adicionar regra de encaminhamento.
- Como nome da regra de encaminhamento, insira
td-vm-forwarding-rule
. - Selecione a rede.
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 comoINTERNAL_SELF_MANAGED
.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.Certifique-se de que Porta esteja definida como
80
.Clique em Save.
Na seção Regras de roteamento, selecione Regra simples de host e caminho.
Na seção Regras de host e caminho, selecione
td-vm-service
como o Serviço.Clique em Adicionar host e regra de caminho.
Em Hosts, insira
hello-world
.Em Serviço, selecione
td-vm-service
.Clique em Save.
gcloud
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
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
Crie o proxy HTTP de destino.
gcloud compute target-http-proxies create td-vm-proxy \ --url-map td-vm-url-map
Crie a regra de encaminhamento. A regra de encaminhamento precisa ser global e criada com o valor de
load-balancing-scheme
definido comoINTERNAL_SELF_MANAGED
.gcloud compute forwarding-rules create td-vm-forwarding-rule \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --address=10.0.0.1 \ --target-http-proxy=td-vm-proxy \ --ports 80 \ --network default
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
No console do Google Cloud, acesse a página Cloud Service Mesh.
O Resumo informa se os serviços estão íntegros.
- Clique no nome de um serviço. A página Detalhes do serviço tem informações sobre a integridade dos back-ends.
- 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
No Console do Google Cloud, acesse a página Grupos de instâncias.
- Selecione o grupo de instâncias
td-vm-mig-us-central1
. - Em Conectar, clique em SSH.
Depois de fazer login na VM do cliente, use a ferramenta
curl
para enviar uma solicitação ao serviçoHello 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:
- Faça login em um dos hosts de VM com um proxy sidecar instalado.
- 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
- Saiba mais sobre o gerenciamento de tráfego avançado.
- Saiba como resolver problemas de implantações da Cloud Service Mesh.
- Saiba como configurar a observabilidade com o Envoy.