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 o novas APIs de roteamento de serviço, que estão em pré-lançamento, 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.

Neste guia, mostramos como implantar automaticamente um plano de dados que consiste em Proxies sidecar do Envoy, configurar usando o Cloud Service Mesh e verificar para garantir o funcionamento correto. Esse processo envolve o seguinte:

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

  1. No Console do Google Cloud Platform, acesse "APIs e serviços".
    Acessar a página "Biblioteca de APIs"
  2. Selecione o projeto correto.
  3. Na caixa de pesquisa, digite API Cloud OS Config e pressione Enter.
  4. Selecione API Cloud OS Config.
  5. 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

  1. No Console do Google Cloud, acesse a página "Modelos de instância".

    Acesse "Modelos de instância"

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

  1. No Console do Google Cloud, acesse a página "Grupos de instâncias".

    Acessar a página Grupos de instâncias

  2. Clique em Criar grupo de instâncias.
  3. Selecione Novo grupo gerenciado de instâncias (sem estado). Para mais informações, consulte MIGs sem estado ou com estado.
  4. Insira td-demo-hello-world-mig como o nome do grupo de instâncias gerenciadas 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 você criou.
  6. Em Modo de escalonamento automático, 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 você quer criar no grupo.
  8. 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, que é configurado pelo Cloud Service Mesh, transferidos 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 sinalizações que você passa para a instância instale o Envoy e configure as instâncias de VM para do 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

  1. No Console do Google Cloud, acesse a página "Grupos de instâncias".

    Acesse Grupos de instâncias

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

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

  1. Acesse a página "Verificações de integridade" no Console do Google Cloud.
    Acessar a página "Verificações de integridade"
  2. Clique em Criar verificação de integridade.
  3. Para o nome, insira td-vm-health-check.
  4. Como protocolo, selecione HTTP.
  5. Clique em Criar.

gcloud

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

  1. Acesse a página de políticas de firewall no console do Google Cloud.
    Acessar a página "Políticas de firewall"
  2. Clique em Criar regra de firewall.
  3. 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 porta 80

gcloud

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

  1. Acesse a página "Cloud Service Mesh" no console do Google Cloud.

    Acessar a página do Cloud Service Mesh

  2. Na guia Serviços, clique em Criar serviço.

  3. Clique em Continuar.

  4. Como nome do serviço, insira td-vm-service.

  5. Selecione a rede VPC correta.

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

  7. Selecione td-demo-hello-world-mig, que é o grupo de instâncias gerenciadas criado que contém os back-ends do serviço de teste Hello World.

  8. Insira os Números de porta corretos.

  9. Escolha Utilização ou Taxa como o Modo de balanceamento. O valor padrão é Taxa.

  10. Clique em Concluído.

  11. Selecione a verificação de integridade que você criou ou clique em Criar outra verificação de integridade e selecione HTTP como protocolo.

  12. Em Tempo limite de diminuição da conexão, defina o valor como 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
    

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:

  1. Intercepta a solicitação.
  2. Avalia-a de acordo com as regras de gerenciamento de tráfego no mapa de URL.
  3. Ele escolhe um serviço de back-end com base no nome do host na solicitação.
  4. Escolhe um back-end ou endpoint associado ao serviço de back-end selecionado.
  5. 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.

  1. Acesse a página do Cloud Service Mesh no console do Google Cloud.

    Acessar a página do Cloud Service Mesh

  2. Na guia Mapas de regras de roteamento, clique em Criar mapa de regras de roteamento.

  3. Insira um nome.

  4. Clique em Adicionar regra de encaminhamento.

  5. Como nome da regra de encaminhamento, insira td-vm-forwarding-rule.

  6. Selecione a rede.

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

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

  9. Certifique-se de que Porta esteja definida como 80.

  10. Clique em Save.

  11. Na seção Regras de roteamento, selecione Regra simples de host e caminho.

  12. Na seção "Regras de host e caminho", selecione td-vm-service como o serviço.

  13. Clique em Adicionar host e regra de caminho.

  14. Em Hosts, insira hello-world.

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

  16. Clique em Save.

gcloud

  1. 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
    
  2. 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
    
  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 precisa ser global e precisa 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 balancear a carga do tráfego para os serviços especificados no mapa de URL nos back-ends da rede grupo de instâncias.

Como verificar a configuração

Nesta última parte do guia de configuração do Cloud Service Mesh para computação, do Compute Engine, você testa se o tráfego enviado da VM do cliente destinado ao a regra de encaminhamento VIP é interceptada e redirecionada para o proxy Envoy, encaminha a 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.

  1. No Console do Google Cloud, acesse a página "Grupos de instâncias".

    Acessar a página Grupos de instâncias

  2. Selecione o grupo de instâncias td-vm-mig-us-central1.
  3. Na seção de resumo da VM, em Conectar, clique em SSH.
  4. Depois de fazer login na VM do cliente, use a ferramenta curl para enviar uma solicitação ao serviço Hello 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