Configure VMs do Compute Engine através da implementação automática do Envoy
Este documento aplica-se às APIs mais antigas. Se estiver a implementar com as novas APIs de encaminhamento de serviços, que estão em pré-visualização, consulte o artigo Configuração da Cloud Service Mesh para proxies Envoy com serviços HTTP.
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 automaticamente um plano de dados que consiste em proxies sidecar do Envoy, configurá-lo através da Cloud Service Mesh e validar a configuração para garantir que está a funcionar corretamente. Este processo envolve o seguinte:
- Ativar a API Cloud OS Config.
- Criar um serviço de teste.
- Implementar um plano de dados simples no Compute Engine através de proxies Envoy (Envoy versão 1.18.4, que só suporta xDS v3).
- 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.
- Iniciar sessão numa VM que esteja a executar um proxy Envoy e enviar 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.
Ativar a API Cloud OS Config
Certifique-se de que ativa a API Cloud OS Config. Se não o fizer, não pode instalar os componentes necessários nas suas VMs.
Para o fazer:
Consola
- Na Google Cloud consola, aceda a APIs e serviços.
Aceda à página da biblioteca de APIs - Selecione o projeto correto.
- Na caixa de pesquisa, introduza API Cloud OS Config e prima Enter.
- Selecione API Cloud OS Config.
- Clique em Ativar.
gcloud
gcloud services enable osconfig.googleapis.com
A criar o serviço de teste 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.
A criar o modelo de instância para o serviço de teste Hello World
O modelo de instância que criar configura um servidor Web apache2 de exemplo
com o 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: escolha um sistema operativo e uma versão.
- 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.
1. 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 início.
#!/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
Pode escolher entre muitas versões do sistema operativo. Este exemplo usa o valor predefinido 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"
Criar o grupo de instâncias gerido para o serviço Hello World
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-mig
para 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 automático de escala, 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 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
Criar 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 um modelo de instância e um grupo de instâncias gerido para a Cloud Service Mesh com proxies Envoy implementados automaticamente. Os grupos de instâncias geridas criam novas VMs de back-end através do dimensionamento automático.
Componentes de software em execução nas suas VMs
Os seguintes componentes são instalados nas suas VMs quando cria um modelo de instância com --service-proxy=enabled
.
- O proxy Envoy, que é configurado pelo Cloud Service Mesh, é transferido a partir de um contentor do Cloud Storage dedicado. O contentor contém uma compilação do proxy Envoy fornecida pela Google.
- O agente proxy de serviço, que inicializa o proxy Envoy e os componentes do proxy. O agente proxy de serviço configura a interceção de tráfego e monitoriza o estado de funcionamento do proxy Envoy quando uma VM está em execução. O agente proxy do serviço também é transferido de um contentor do Cloud Storage.
A única versão do Envoy disponível é o binário do Envoy mais recente alojado numa localização dedicada do Cloud Storage. Esta versão do Envoy é suportada no Compute Engine Debian, CentOS 7/8 e RHEL 7/8. Durante a autorrecuperação e o aumento da escala, o grupo de instâncias geridas instala uma versão recente do Envoy na VM. Em alguns casos, esta versão pode ser mais recente do que o Envoy implementado em instâncias de VM criadas anteriormente. Isto pode resultar numa inconsistência nas versões instaladas em VMs num grupo de instâncias geridas. As versões inconsistentes funcionam corretamente em conjunto. Se existir uma atualização de segurança para o Envoy, recomendamos que atualize o grupo de instâncias gerido através de uma substituição progressiva.
Criar o modelo de instância
Um modelo de instância especifica a configuração das instâncias de VM que são criadas num grupo de instâncias geridas. As flags que transmite ao modelo de instância instalam o Envoy e configuram as suas instâncias de VM para ficarem prontas para o Cloud Service Mesh.
Pode usar o Debian 10/11, o CentOS 7/8 ou o RHEL 7/8 para a imagem de disco de arranque no modelo de instância.
Para criar um modelo de instância deste tipo:
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 a sua implementação do Envoy, consulte o guia de referência de implementação automatizada do Envoy.
Criar o grupo de instâncias geridas
Consola
- Na Google Cloud consola, aceda à página Grupos de instâncias.
- Clique em Criar um grupo de instâncias.
- Introduza
td-vm-mig-us-central1
para o nome do grupo de instâncias gerido e selecione a zonaus-central1-a
. - Em Tipo de grupo, selecione Grupo de instâncias gerido.
- Em Modelo de instância, selecione
td-vm-template-auto
, o modelo de instância que criou. - Especifique
2
como o número de instâncias que quer criar no grupo. - Clique em Criar para criar o novo grupo.
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-auto
Configurar a malha de serviço na nuvem 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 Conceitos de verificação 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. Consulte o artigo Conceitos de verificação de saúde para mais informações.
- Um serviço de back-end. Para mais informações sobre os serviços de back-end, leia o artigo 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, leia os artigos Usar regras de encaminhamento e Usar mapas de URLs.
Criar a verificação de funcionamento
Use as instruções seguintes para criar uma verificação de funcionamento. Para mais informações, consulte o artigo Criar verificações de funcionamento.
Consola
- Aceda à página Verificações de saúde na Google Cloud consola.
Aceda à página Verificações de saúde - Clique em Criar verificação de estado.
- 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
Criar a regra de firewall
Use as instruções seguintes para criar a regra da firewall necessária para as sondas de verificação de funcionamento. Para mais informações, consulte o artigo Regras da firewall para verificações de funcionamento.
Consola
- Aceda à página Políticas de firewall na Google Cloud consola.
Aceda à página Políticas de firewall - Clique em Criar regra de firewall.
- Na página Criar uma regra de firewall, faculte as seguintes informações:
- Nome:
fw-allow-health-checks
- Rede: escolha a rede de VPC.
- Prioridade: introduza um número para a prioridade ou 1000 por predefinição.
- Direção do tráfego: escolha entrada.
- Ação na correspondência: escolha permitir.
- Segmentos: escolha Etiquetas de destino especificadas e, de seguida, introduza
td-http-server
na caixa de texto Etiquetas 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, de seguida, selecione
tcp
, introduza a porta80
- Nome:
gcloud
Crie a regra de firewall para a verificação de funcionamento.
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
Criar o serviço de back-end
Crie o serviço de back-end. Se usar a Google Cloud CLI, tem de designá-la 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 geridas com o modelo de VM do Compute Engine que executa o serviço HTTP de exemplo criado em Criar o grupo de instâncias geridas.
Consola
Aceda à página Cloud Service Mesh na Google Cloud consola.
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
td-demo-hello-world-mig
, que é o grupo de instâncias gerido que criou e que contém os back-ends para o serviço de testeHello World
.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 ou clique em Criar outra verificação de funcionamento e certifique-se de que seleciona HTTP como protocolo.
Em Limite de tempo de esgotamento da ligação, defina o valor para
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
Criar 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. Como parte do mapa de regras de encaminhamento, configura um endereço IP virtual (VIP) e um conjunto de regras de gestão de tráfego associadas, como o encaminhamento baseado no anfitrião. Quando uma aplicação envia um pedido para o VIP, o proxy Envoy:
- Interceta o pedido.
- Avalia-o de acordo com as regras de gestão de tráfego no mapa de URLs.
- Seleciona um serviço de back-end com base no nome do anfitrião no pedido.
- Escolhe um back-end ou um ponto final associado ao serviço de back-end selecionado.
- Envia tráfego para esse back-end ou ponto final.
Para mais informações sobre a gestão de tráfego, consulte o artigo Gestão avançada de tráfego.
Consola
Na Google Cloud consola, a criação de proxies de destino é combinada com a criação de regras de encaminhamento. Quando cria a regra de encaminhamento, Google Cloud cria automaticamente um proxy HTTP de destino e anexa-o ao mapa de URLs.
Aceda à página Cloud Service Mesh na Google Cloud consola.
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-scheme
definido 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.1
nã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-service
como 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
td-vm-service
como predefinição.gcloud compute url-maps create td-vm-url-map \ --default-service td-vm-service
Crie um correspondente de caminhos 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
td-vm-service
como nome do serviço e um matcher de caminho predefinido que corresponde a todos os pedidos de caminho 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 \ --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-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, 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.
Validar 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
.
Para tal, inicia sessão na VM do cliente, que foi configurada para intercetar o tráfego e redirecioná-lo para o Envoy. Envia um pedido curl
ao VIP associado ao mapa da regra de encaminhamento. O Envoy inspeciona o pedido curl
, determina a que serviço deve ser resolvido e envia o pedido a um back-end associado a esse serviço.
- Na Google Cloud consola, aceda à página Grupos de instâncias.
- Selecione o
td-vm-mig-us-central1
grupo de instâncias. - Na secção de resumo da VM, em Ligar, clique em SSH.
- Depois de iniciar sessão na VM do cliente, use a ferramenta
curl
para enviar um pedido ao serviçoHello World
através do Envoy:
curl -H "Host: hello-world" http://10.0.0.1/
Quando emitir este comando repetidamente, deve ver respostas HTML diferentes que contêm os nomes dos anfitriões 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
.
O que se segue?
- Saiba mais sobre a gestão avançada de tráfego.
- Saiba como configurar a observabilidade com o Envoy.
- Saiba como resolver problemas de implementações da malha de serviços na nuvem.
- Saiba mais acerca das opções de implementação avançadas no guia de opções de implementação do Envoy automatizado.