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:

  1. Ativar a API Cloud OS Config.
  2. Criar um serviço de teste.
  3. 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).
  4. 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.
  5. 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

  1. Na Google Cloud consola, aceda a APIs e serviços.
    Aceda à página da biblioteca de APIs
  2. Selecione o projeto correto.
  3. Na caixa de pesquisa, introduza API Cloud OS Config e prima Enter.
  4. Selecione API Cloud OS Config.
  5. 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

  1. Na Google Cloud consola, aceda à página Modelos de instâncias.

    Aceda a Modelos de instâncias

  2. Clique em Criar modelo de instância.
  3. 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
  4. 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.
  5. 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
    
  6. 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

  1. Na Google Cloud consola, aceda à página Grupos de instâncias.

    Aceda à página Grupos de instâncias

  2. Clique em Criar grupo de instâncias.
  3. 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.
  4. Introduza td-demo-hello-world-mig para o nome do grupo de instâncias geridas e selecione a zona us-central1-a.
  5. Em Modelo de instância, selecione td-demo-hello-world-template, que é o modelo de instância que criou.
  6. Em Modo de ajuste automático de escala, selecione Off:do not autoscale.
  7. Em Número máximo de instâncias, especifique, pelo menos, duas como o número de instâncias que quer criar no grupo.
  8. 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

  1. Na Google Cloud consola, aceda à página Grupos de instâncias.

    Aceda a Grupos de instâncias

  2. Clique em Criar um grupo de instâncias.
  3. Introduza td-vm-mig-us-central1 para o nome do grupo de instâncias gerido e selecione a zona us-central1-a.
  4. Em Tipo de grupo, selecione Grupo de instâncias gerido.
  5. Em Modelo de instância, selecione td-vm-template-auto, o modelo de instância que criou.
  6. Especifique 2 como o número de instâncias que quer criar no grupo.
  7. 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:

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

  1. Aceda à página Verificações de saúde na Google Cloud consola.
    Aceda à página Verificações de saúde
  2. Clique em Criar verificação de estado.
  3. Para o nome, introduza td-vm-health-check.
  4. Para o protocolo, selecione HTTP.
  5. Clique em Criar.

gcloud

  1. 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

  1. Aceda à página Políticas de firewall na Google Cloud consola.
    Aceda à página Políticas de firewall
  2. Clique em Criar regra de firewall.
  3. 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 porta 80

gcloud

  1. 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

  1. Aceda à página Cloud Service Mesh na Google Cloud consola.

    Aceda à página Cloud Service Mesh

  2. No separador Serviços, clique em Criar serviço.

  3. Clique em Continuar.

  4. Para o nome do serviço, introduza td-vm-service.

  5. Selecione a rede de VPC correta.

  6. Certifique-se de que o Tipo de back-end é Grupos de instâncias.

  7. 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 teste Hello World.

  8. Introduza os números de porta corretos.

  9. Escolha Utilização ou Taxa como o Modo de equilíbrio. O valor predefinido é Rate.

  10. Clique em Concluído.

  11. 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.

  12. Em Limite de tempo de esgotamento da ligação, defina o valor para 30 segundos ou mais.

  13. Clique em Continuar.

  14. Clique em Criar.

gcloud

  1. Crie o serviço de back-end.

    gcloud compute backend-services create td-vm-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED \
     --connection-draining-timeout=30s \
     --health-checks td-vm-health-check
    
  2. Adicione os back-ends ao serviço de back-end.

    gcloud compute backend-services add-backend td-vm-service \
      --instance-group td-demo-hello-world-mig \
      --instance-group-zone us-central1-a \
      --global
    

Criar o mapa de regras de 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:

  1. Interceta o pedido.
  2. Avalia-o de acordo com as regras de gestão de tráfego no mapa de URLs.
  3. Seleciona um serviço de back-end com base no nome do anfitrião no pedido.
  4. Escolhe um back-end ou um ponto final associado ao serviço de back-end selecionado.
  5. 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.

  1. Aceda à página Cloud Service Mesh na Google Cloud consola.

    Aceda à página Cloud Service Mesh

  2. No separador Mapas de regras de encaminhamento, clique em Criar mapa de regras de encaminhamento.

  3. Introduza um nome.

  4. Clique em Adicionar regra de encaminhamento.

  5. Para o nome da regra de encaminhamento, introduza td-vm-forwarding-rule.

  6. Selecione a rede.

  7. 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 como INTERNAL_SELF_MANAGED.

  8. 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.

  9. Certifique-se de que a Porta está definida como 80.

  10. Clique em Guardar.

  11. Na secção Regras de encaminhamento, selecione Regra simples de anfitrião e caminho.

  12. Na secção Regras de anfitrião e caminho, selecione td-vm-service como o serviço.

  13. Clique em Adicionar regra de anfitrião e caminho.

  14. Em Anfitriões, introduza hello-world.

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

  16. Clique em Guardar.

gcloud

  1. 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
    
  2. 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
    
  3. Crie o proxy HTTP de destino.

    gcloud compute target-http-proxies create td-vm-proxy \
       --url-map=td-vm-url-map
    
  4. Crie a regra de encaminhamento.

    A regra de encaminhamento tem de ser global e tem de ser criada com o valor de load-balancing-scheme definido como INTERNAL_SELF_MANAGED.

    gcloud compute forwarding-rules create td-vm-forwarding-rule \
       --global \
       --load-balancing-scheme=INTERNAL_SELF_MANAGED \
       --address=10.0.0.1 \
       --target-http-proxy=td-vm-proxy \
       --ports=80 \
       --network=default
    

Neste ponto, 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.

  1. Na Google Cloud consola, aceda à página Grupos de instâncias.

    Aceda à página Grupos de instâncias

  2. Selecione o td-vm-mig-us-central1 grupo de instâncias.
  3. Na secção de resumo da VM, em Ligar, clique em SSH.
  4. Depois de iniciar sessão na VM do cliente, use a ferramenta curl para enviar um pedido ao serviço Hello 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?