Configurar VMs do Compute Engine com implantação automática do Envoy
Este documento se aplica às APIs mais antigas. Se você estiver implantando com as novas APIs de roteamento de serviço, que estão em visualização, consulte Configuração do Cloud Service Mesh para proxies Envoy com serviços HTTP.
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 automaticamente um plano de dados que consiste em proxies sidecar do Envoy, configurá-lo usando o Cloud Service Mesh e verificar se a configuração está funcionando corretamente. Esse processo envolve o seguinte:
- Ativando a API Cloud OS Config
- Criação de um serviço de teste.
- Implantação de um plano de dados simples no Compute Engine usando proxies do Envoy (versão 1.18.4 do Envoy, compatível apenas com xDS v3).
- 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.
Como ativar a API Cloud OS Config
Ative a API Cloud OS Config. Se você não fizer isso, não será possível instalar os componentes necessários nas suas VMs.
Para fazer isso:
Console
- No Console do Google Cloud Platform, acesse "APIs e serviços".
Acessar a página "Biblioteca de APIs" - Selecione o projeto correto.
- Na caixa de pesquisa, digite API Cloud OS Config e pressione Enter.
- Selecione API Cloud OS Config.
- Clique em Ativar.
gcloud
gcloud services enable osconfig.googleapis.com
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.
Como criar o modelo de instância para o serviço de teste Hello World
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: escolha um sistema operacional e uma versão.
- 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.
1 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
É possível escolher entre muitas versões de sistemas operacionais. Este exemplo usa o valor padrão Debian 10.
Para criar 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"
Como criar o grupo de instâncias gerenciadas para o serviço Hello World
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
Off:do not autoscale
. - Em Número máximo 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
Como criar o modelo de instância e o grupo de instâncias gerenciadas em que o Envoy é implantado
Use as instruções nesta seção para criar um modelo de instância e um grupo de instâncias gerenciadas para o Cloud Service Mesh com os proxies do Envoy implantados automaticamente. Com os grupos de instâncias gerenciadas, é possível criar novas VMs de back-end por meio do escalonamento automático.
Componentes de software em execução nas VMs
Os componentes a seguir são instalados nas VMs quando você cria um modelo de instância
com --service-proxy=enabled
.
- O proxy Envoy, configurado pelo Cloud Service Mesh, é transferido por download de um bucket dedicado do Cloud Storage. O bucket contém uma versão do proxy fornecida pelo Google.
- O agente do proxy de serviço, que inicializa o proxy Envoy e os componentes do proxy. O agente de proxy de serviço configura a interceptação de tráfego e monitora a integridade do proxy Envoy quando uma VM está em execução. O agente de proxy de serviço também é salvo de um bucket do Cloud Storage.
A única versão disponível é o binário mais recente hospedado em um local dedicado do Cloud Storage. Essa versão do Envoy é compatível com o Debian, o CentOS 7/8 e o RHEL 7/8 do Compute Engine. Durante a recuperação automática e o escalonamento vertical, o grupo gerenciado de instâncias instala uma versão recente do Envoy na VM. Em alguns casos, essa versão pode ser mais recente do que o Envoy implantado em instâncias de VM criadas anteriormente. Isso pode resultar em uma inconsistência nas versões instaladas nas VMs em um grupo gerenciado de instâncias. As versões inconsistentes funcionam corretamente. Se houver uma atualização de segurança para o Envoy, recomendamos que você faça upgrade do grupo gerenciado de instâncias usando uma substituição gradual.
Como criar o modelo de instância
Um modelo de instância especifica a configuração das instâncias de VM criadas em um grupo de instâncias gerenciadas. As flags que você transmite ao modelo de instância instalam o Envoy e configuram suas instâncias de VM para estarem prontas para o Cloud Service Mesh.
Use o Debian 10/11, CentOS 7/8 ou RHEL 7/8 para a imagem do disco de inicialização no modelo da instância.
Para criar um modelo de instância, siga estas etapas:
gcloud compute instance-templates create td-vm-template-auto \ --image-family=[ debian-10 | centos-7 | centos-8 | rhel-7 | rhel-8 ] \ --image-project=[ debian-cloud | centos-cloud |rhel-cloud ] \ --service-proxy=enabled
Para personalizar sua implantação do Envoy, consulte o guia de referência de implantação do Envoy.
Como criar o grupo de instâncias gerenciadas
Console
- No Console do Google Cloud, acesse a página "Grupos de instâncias".
- Clique em Criar um grupo de instâncias.
- Insira
td-vm-mig-us-central1
como o nome do grupo de instâncias gerenciadas e selecione a zonaus-central1-a
. - Em Tipo de grupo, selecione Grupo de instâncias gerenciadas.
- Em Modelo de instância, selecione
td-vm-template-auto
, 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 para gerar o novo grupo.
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-auto
Como 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, leia Conceitos de verificação de integridade e Como criar verificações de integridade.
- Uma regra de firewall para permitir que as sondagens da verificação de integridade alcancem os back-ends. Para mais informações, consulte Conceitos de verificação de integridade.
- Um serviço de back-end Para mais informações sobre serviços de back-end, leia 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, leia Como usar regras de encaminhamento e Como usar mapas de URL.
Como criar a verificação de integridade
Use as instruções a seguir para criar uma verificação de integridade. Para mais informações, consulte Como criar verificações de integridade.
Console
- Acesse a página "Verificações de integridade" no Console do Google Cloud.
Acessar a página "Verificações de integridade" - Clique em Criar verificação de integridade.
- 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
Como criar a regra de firewall
Use as instruções a seguir para criar a regra de firewall necessária para as sondagens de verificação de integridade. Para mais informações, consulte Regras de firewall para verificações de integridade.
Console
- Acesse a página de políticas de firewall no console do Google Cloud.
Acessar a página "Políticas de firewall" - Clique em Criar regra de firewall.
- Na página Criar uma regra de firewall, forneça estas informações:
- Name:
fw-allow-health-checks
- Rede: escolha a rede VPC.
- Prioridade: digite um número para a prioridade ou 1000 por padrão.
- Direção do tráfego: escolha entrada.
- Ação se houver correspondência: escolha permitir.
- Destinos: escolha Tags de destino especificadas e insira
td-http-server
na caixa de texto Tags de destino. - Filtro de origem: escolha o tipo de intervalo de IP correto.
- Intervalos de IP de origem:
35.191.0.0/16,130.211.0.0/22
- Filtro de destino: selecione o tipo de IP.
- Protocolos e portas: clique em Portas e protocolos especificados e verifique o tipo
tcp
na porta80
- Name:
gcloud
Crie a regra de firewall para a verificação de integridade.
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 td-http-server \ --rules tcp:80
Como criar o serviço de back-end
Crie o serviço de back-end: Se você usar a CLI do Google Cloud, precisará designá-la 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 de instâncias gerenciadas com o modelo de VM do Compute Engine que executa o serviço HTTP de amostra criado em Como criar o grupo de instâncias gerenciadas.
Console
Acesse a página do Cloud Service Mesh no console do Google Cloud.
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
td-demo-hello-world-mig
, que é o grupo de instâncias gerenciadas criado que contém os back-ends do serviço de testeHello World
.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 ou clique em Criar outra verificação de integridade e selecione HTTP como protocolo.
Em Tempo limite de diminuição da conexão, defina o valor como
30
segundos ou mais.Clique em 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 \ --connection-draining-timeout=30s \ --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
Como 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. Como parte do mapa de regras de roteamento, configure um endereço IP virtual (VIP) e um conjunto de regras de gerenciamento de tráfego associadas, como roteamento baseado em host. Quando um aplicativo envia uma solicitação ao VIP, o proxy Envoy:
- Intercepta a solicitação.
- Avalia-a de acordo com as regras de gerenciamento de tráfego no mapa de URL.
- Ele escolhe um serviço de back-end com base no nome do host na solicitação.
- Escolhe um back-end ou endpoint associado ao serviço de back-end selecionado.
- Envia o tráfego para esse back-end ou endpoint.
Para mais informações sobre gerenciamento de tráfego, consulte Gerenciamento de tráfego avançado.
Console
No Console do Google Cloud, a criação do proxy de destino é combinada com a criação da 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.
Acesse a página do Cloud Service Mesh no console do Google Cloud.
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
td-vm-service
como padrão.gcloud compute url-maps create td-vm-url-map \ --default-service td-vm-service
Crie uma correspondência de caminho e uma regra de host para rotear o tráfego para seu serviço com base no nome do host e em um caminho. Este exemplo usa
td-vm-service
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 \ --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 precisa ser 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.
Como 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
.
Para fazer isso, faça login na VM cliente, que foi configurada para interceptar
o tráfego e redirecioná-lo para o Envoy. Você envia uma solicitação curl
ao VIP
associado ao mapa de regras de roteamento. O Envoy inspeciona a solicitação curl
,
determina a qual serviço ele precisa resolver e a solicitação é enviada para um
back-end associado a esse serviço.
- No Console do Google Cloud, acesse a página "Grupos de instâncias".
- Selecione o grupo de instâncias
td-vm-mig-us-central1
. - Na seção de resumo da VM, 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
.
A seguir
- Saiba mais sobre o gerenciamento de tráfego avançado.
- Saiba como configurar a observabilidade com o Envoy.
- Saiba como resolver problemas de implantações da Cloud Service Mesh.
- Saiba mais sobre as opções avançadas de implantação no guia da opção de implantação automatizada do Envoy.