Configuração do Traffic Director para VMs do Compute Engine com implantação automática do Envoy

Antes de seguir as instruções deste guia, leia a seção Como se preparar para a configuração do Traffic Director e verifique se você concluiu as tarefas de pré-requisito descritas nesse documento.

Este guia mostra como implantar automaticamente um plano de dados que consiste em proxies secundários do Envoy, configurá-lo usando o Traffic Director e verificar sua configuração para garantir que ele esteja funcionando corretamente. Esse processo envolve:

  1. Criação de um serviço de teste.
  2. Implantação de um plano de dados simples no Compute Engine usando proxies Envoy.
  3. Configuração do Traffic Director usando as APIs do Compute Engine, que permitem ao Traffic Director configurar os proxies secundários do Envoy.
  4. 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 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 Cloud, acesse a página "Modelos de instância".

    Acessar a página "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: Debian GNU/Linux 10 (buster)
    • 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

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 Traffic Director é compatível com grupos de instâncias gerenciadas com escalonamento automático.

Console

  1. No Console do 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. Verifique se a opção Novo grupo de instâncias gerenciadas está selecionada.
  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 Não fazer escalonamento automático.
  7. Em Número 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 ferramenta de linha de comando gcloud para criar um grupo de instâncias gerenciadas com o modelo de instância que você 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

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 Traffic Director 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 Traffic Director, é transferido por download de um bucket dedicado do Cloud Storage. O bucket contém binários de proxy do Envoy das versões oficiais do Istio.
  • 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.

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 o modelo de instância instalam o Envoy e configuram suas instâncias de VM para estarem prontas para o Traffic Director.

Para criar um modelo de instância, siga estas etapas:

  gcloud beta compute instance-templates create td-vm-template-auto \
    --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 Cloud, acesse a página Grupos de instâncias.

    Acessar a página "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 ferramenta de linha de comando gcloud para criar um grupo de instâncias gerenciadas com o modelo de instância que você criou 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 Traffic Director com componentes de balanceamento de carga do Google Cloud

As instruções nesta seção mostram como configurar o Traffic Director para que os proxies do Envoy carreguem 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
    
  2. 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 ferramenta de linha de comando gcloud, precisará designá-la como um serviço de back-end global com um 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 do Traffic Director no Console do Cloud.

    Acessar a página do Traffic Director

  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 Traffic Director 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 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 Traffic Director no Console do Cloud.

    Acessar a página do Traffic Director

  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 Traffic Director está configurado 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 do Traffic Director 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.

  1. No Console do 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

Dependendo de como os microsserviços são distribuídos na sua rede, talvez seja necessário adicionar mais regras de encaminhamento ou mais regras de host e caminho ao mapa de URL. Para mais informações sobre regras de encaminhamento e mapas de URL, leia os documentos a seguir: