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:
- Criar um serviço de teste.
- Implementar um plano de dados simples no Compute Engine através de proxies Envoy.
- 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.
- 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:
Atribua uma conta de serviço à VM.
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.
Com a CLI gcloud, especifique o seguinte:
--scopes=https://www.googleapis.com/auth/cloud-platform.
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.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:443como 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 ficheirobootstrap_template.yamlde acordo com as suas necessidades.Redirecionar o tráfego IP destinado aos serviços para a porta do ouvinte de interceção do proxy sidecar.
- A porta do ouvinte de interceção do proxy sidecar é definida como
TRAFFICDIRECTOR_INTERCEPTION_PORTna configuração dos metadados de arranque do proxy e está definida como 15001 no ficheiro de configuração de arranque de exemplo neste ficheiro comprimido. - O script Istio
iptables.shno ficheiro comprimido pode ser usado para configurar a interceção de tráfego.
- A porta do ouvinte de interceção do proxy sidecar é definida como
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
Na Google Cloud consola, aceda à página Modelos de instâncias.
- Clique em Criar modelo de instância.
- 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
- Nome:
- Clique em Gestão, segurança, discos, trabalhar em rede, arrendamento único.
- No separador Rede, no campo Etiquetas de rede, adicione a etiqueta
td-http-server. 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
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
Na Google Cloud consola, aceda à página Grupos de instâncias.
- Clique em Criar grupo de instâncias.
- 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.
- Introduza
td-demo-hello-world-migpara o nome do grupo de instâncias geridas e selecione a zonaus-central1-a. - Em Modelo de instância, selecione
td-demo-hello-world-template, que é o modelo de instância que criou. - Em Modo de ajuste de escala automático, selecione Não ajustar a escala automaticamente.
- Em Número de instâncias, especifique, pelo menos, duas como o número de instâncias que quer criar no grupo.
- 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
Na Google Cloud consola, aceda à página Modelos de instâncias.
- Clique em Criar modelo de instância.
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
Em Firewall, selecione as caixas junto a Permitir tráfego HTTP e Permitir tráfego HTTPS.
Clique em Gestão, segurança, discos, trabalhar em rede, arrendamento único.
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}"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
Na Google Cloud consola, aceda à página Grupos de instâncias.
- Clique em Criar um grupo de instâncias. Por predefinição, é apresentada a página para criar um grupo de instâncias gerido.
- 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.
- Introduza
td-vm-mig-us-central1para o nome do grupo de instâncias gerido e selecione a zonaus-central1-a. - Em Modelo de instância, selecione o modelo de instância que criou.
- Especifique 2 como o número de instâncias que quer criar no grupo.
- 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:
- Uma verificação de funcionamento. Para mais informações sobre as verificações de funcionamento, leia os artigos Vista geral das verificações de funcionamento e Criar verificações de funcionamento.
- Uma regra de firewall para permitir que as sondas de verificação de funcionamento alcancem os back-ends. Para mais informações, consulte o artigo Vista geral das verificações de estado.
- Um serviço de back-end. Para mais informações acerca dos serviços de back-end, consulte o artigo Vista geral dos serviços de back-end.
- Um mapa de regras de encaminhamento. Isto inclui a criação de uma regra de encaminhamento e um mapa de URLs. Para mais informações, consulte os artigos Vista geral das regras de encaminhamento e Use mapas de URLs.
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
Na Google Cloud consola, aceda à página Verificações de estado.
- Clique em Criar verificação de funcionamento.
- Para o nome, introduza
td-vm-health-check. - Para o protocolo, selecione HTTP.
- Clique em Criar.
gcloud
Crie a verificação de funcionamento:
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 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
Na Google Cloud consola, aceda à página Cloud Service Mesh.
- No separador Serviços, clique em Criar serviço.
- Clique em Continuar.
- Para o nome do serviço, introduza
td-vm-service. - Selecione a rede de VPC correta.
- Certifique-se de que o Tipo de back-end é Grupos de instâncias.
- Selecione o grupo de instâncias gerido que criou.
- Introduza os números de porta corretos.
- Escolha Utilização ou Taxa como o Modo de equilíbrio. O valor predefinido é Rate.
- Clique em Concluído.
- Selecione a verificação de funcionamento que criou.
- Clique em Guardar 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
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.
Na Google Cloud consola, aceda à página Cloud Service Mesh.
- No separador Mapas de regras de encaminhamento, clique em Criar mapa de regras de encaminhamento.
- Introduza um nome.
- Clique em Adicionar regra de encaminhamento.
- Para o nome da regra de encaminhamento, introduza
td-vm-forwarding-rule. - Selecione a rede.
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-schemedefinido comoINTERNAL_SELF_MANAGED.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.1não estiver disponível na sua rede, escolha um endereço IP diferente.Certifique-se de que a Porta está definida como
80.Clique em Guardar.
Na secção Regras de encaminhamento, selecione Regra simples de anfitrião e caminho.
Na secção Regras de anfitrião e caminho, selecione
td-vm-servicecomo o serviço.Clique em Adicionar regra de anfitrião e caminho.
Em Anfitriões, introduza
hello-world.Em Serviço, selecione
td-vm-service.Clique em Guardar.
gcloud
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
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-testcomo 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
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 tem de ser global e tem de ser criada com o valor de
load-balancing-schemedefinido 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, 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
Na Google Cloud consola, aceda à página Cloud Service Mesh.
O Resumo indica se os serviços estão em bom estado.
- Clique no nome de um serviço. A página Detalhes do serviço tem informações sobre o estado dos back-ends.
- 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
Na Google Cloud consola, aceda à página Grupos de instâncias.
- Selecione o
td-vm-mig-us-central1grupo de instâncias. - Em Associar, clique em SSH.
Depois de iniciar sessão na VM do cliente, use a ferramenta
curlpara enviar um pedido ao serviçoHello Worldatravé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:
- Inicie sessão num dos anfitriões de VMs que tenha um proxy sidecar instalado.
- 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?
- Saiba mais sobre a gestão avançada de tráfego.
- Saiba como resolver problemas de implementações da malha de serviços na nuvem.
- Saiba como configurar a observabilidade com o Envoy.