Como configurar um balanceador de carga de rede com um serviço de back-end

Neste guia, você vê instruções para criar uma implantação básica de balanceamento de carga de rede usando um serviço de back-end regional. Neste exemplo, criamos um balanceador de carga de rede compatível apenas com tráfego TCP. Se você quiser criar um balanceador de carga de rede que faça o balanceamento de carga de tráfego TCP, UDP, ESP e ICMP (não só TCP ou UDP), consulte Como configurar um balanceador de carga de rede para vários protocolos IP.

Neste exemplo, usaremos o balanceador de carga para distribuir o tráfego TCP entre as VMs de back-end em dois grupos gerenciados de instâncias zonais na região us-central1. Uma abordagem igualmente válida seria usar um único grupo gerenciado de instâncias regional para a região us-central1.

Balanceador de carga de rede com grupos de instâncias zonais
Balanceamento de carga de rede com grupos gerenciados de instâncias zonais

Esse cenário distribui o tráfego TCP entre instâncias íntegras. Para dar suporte a este exemplo, as verificações de integridade de TCP são configuradas para garantir que o tráfego seja enviado apenas para instâncias íntegras. As verificações de integridade de TCP são compatíveis apenas com um balanceador de carga baseado em serviço de back-end. Os balanceadores de carga baseados em pool de destino só podem usar verificações de integridade HTTP legadas.

Neste exemplo, o tráfego TCP tem carga balanceada, mas é possível usar o balanceamento de carga de rede para balancear carga do tráfego UDP, SSL e HTTP(S). Antes de começar, leia a Visão geral do balanceamento de carga da rede.

Observe que o balanceador de carga de rede é um balanceador de carga regional. Todos os componentes do balanceador de carga (VMs de back-end, serviço de back-end e regra de encaminhamento) precisam estar na mesma região.

Antes de começar

Instale a ferramenta de linha de comando gcloud. Para uma visão geral completa da ferramenta, consulte o Guia da ferramenta gcloud. Você encontra comandos relacionados ao balanceamento de carga no guia de referência da API e do gcloud.

Se você nunca usou a ferramenta de linha de comando gcloud, execute primeiro gcloud init para fazer a autenticação.

Esse guia pressupõe que você esteja familiarizado com a ferramenta bash.

Como criar os grupos gerenciados de instâncias por zona

Neste cenário de balanceamento de carga, você criará dois grupos gerenciados de instâncias zonais do Compute Engine e instalará um servidor de eco em cada instância.

As instâncias que participam como VMs de back-end para balanceadores de carga de rede precisam executar o ambiente convidado Linux, o ambiente convidado Windows ou outros processos com funcionalidade equivalente.

Como configurar as instâncias

Cloud Console

  1. Acesse a página Grupos de instâncias no Console do Cloud.

    Acessar a página "Grupos de instâncias"

  2. Clique em Criar grupo de instâncias.
  3. Escolha Novo grupo de instâncias gerenciadas à esquerda.
  4. Em Nome, insira ig-us-1.
  5. Em Local, selecione Única zona.
  6. Em Região, selecione us-central1.
  7. Em Zona, selecione us-central1-a.
  8. Em Modelo de instância, selecione Criar um novo modelo de instância.

    1. Em Nome, insira ig-us-template.
    2. Certifique-se de que o disco de inicialização esteja configurado como uma imagem Debian. Por exemplo, Debian GNU/Linux 9 (stretch). Estas instruções usam comandos que estão disponíveis apenas no Debian, como apt-get.
    3. Na guia Gerenciamento, insira o seguinte script no campo Script de inicialização em Gerenciamento, segurança, discos, rede, locatário único.

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
    4. Em Rede, preencha o campo Tags com a tag network-lb.

    5. Clique em Salvar e continuar.

  9. Especifique o número de instâncias que você quer criar no grupo.

    Para este exemplo, em Modo de escalonamento automático, selecione:

    • Não fazer escalonamento automático
    • Em Número de instâncias, insira 2
  10. Clique em Criar para criar o novo grupo.

  11. Repita as etapas anteriores para criar um segundo grupo gerenciado de instâncias na zona us-central1-c com as seguintes especificações:

    • Name: ig-us-2
    • Zona: us-central1-c
    • Modelo de instância: use o mesmo modelo ig-us-template criado na seção anterior.

gcloud

As instruções gcloud deste guia pressupõem que você está usando o Cloud Shell ou outro ambiente com o bash instalado.

  1. Crie um modelo de instância de VM com o servidor HTTP usando o comando gcloud compute instance-templates create.

    gcloud compute instance-templates create ig-us-template \
    --region=us-central1 \
    --tags=network-lb \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'
    
  2. Crie um grupo gerenciado de instâncias na zona com o comando gcloud compute instance-groups managed create.

    gcloud compute instance-groups managed create ig-us-1 \
        --zone us-central1-a \
        --size 2 \
        --template ig-us-template
    
  3. Crie um segundo grupo gerenciado de instâncias na zona us-central1-c:

    gcloud compute instance-groups managed create ig-us-2 \
        --zone us-central1-c \
        --size 2 \
        --template ig-us-template
    

Como configurar regras de firewall

Criar uma regra de firewall que permita que o tráfego externo alcance as instâncias de back-end.

Console

  1. Acesse a página "Firewalls" no Console do Google Cloud.
    Acessar a página "Firewalls"
  2. Clique em Create firewall rule.
  3. Informe um Nome de allow-network-lb.
  4. Selecione a Rede a que a regra de firewall se aplicará (Padrão).
  5. Em Destinos, selecione Tags de destino especificadas.
  6. No campo Tags de destino, insira network-lb.
  7. Defina os Intervalos de IP de origem como 0.0.0.0/0, o que permite tráfego de qualquer origem. Isso permite que as sondagens de verificação de integridade e tráfego externo alcancem as instâncias de back-end.
  8. Em Protocolos e portas especificados, clique na caixa de seleção próxima ao TCP e insira 80.
  9. Clique em Criar. Pode levar um tempo para que o console exiba a nova regra de firewall. Talvez seja necessário clicar em Atualizar para vê-la.

gcloud

gcloud compute firewall-rules create allow-network-lb \
    --target-tags network-lb \
    --allow tcp:80

Como configurar o balanceador de carga

Em seguida, configure o balanceador de carga.

Quando você configura o balanceador de carga, as instâncias da máquina virtual recebem pacotes destinados ao endereço IP externo estático definido. Se você usa uma imagem fornecida pelo Compute Engine, as instâncias são configuradas automaticamente para processar esse endereço IP. Se você estiver usando outra imagem, configure esse endereço como um alias em eth0 ou como um loopback em cada instância.

Console

  1. Acesse a página Criar balanceador de carga no Console do Google Cloud.
    Acessar a página "Criar balanceador de carga"
  2. Em Balanceamento de carga TCP, clique no botão Iniciar configuração.

  3. Em Somente voltado para a Internet ou interno, selecione From Internet to my VMs.

  4. Em Várias regiões ou região única, selecione Single region only.

  5. Em Tipo de back-end, selecione Serviço de back-end.

  6. Clique em Continuar.

Configuração de back-end

  1. Na tela Novo balanceador de carga TCP, insira um Nome tcp-network-lb no novo balanceador de carga.
  2. Clique em Configuração de back-end. O Nome do balanceador de carga que você inseriu anteriormente é exibido, mas não é possível modificá-lo.
  3. Clique em Configuração de back-end e faça as alterações a seguir:
    1. Em Região, selecione us-central1.
    2. Em Back-ends, use o menu suspenso Grupo de instâncias para selecionar ig-us-1. Clique em Concluído. Clique em Adicionar back-end e repita esta etapa para adicionar ig-us-2.
    3. Em Verificação de integridade, escolha Criar uma verificação de integridade ou Criar outra verificação de integridade, insira as informações a seguir:
      • Name: tcp-health-check
      • Protocolo: TCP
      • Porta: 80
    4. Clique em Salvar e continuar.
    5. Verifique se há uma marca de seleção azul ao lado de Configuração do back-end antes de continuar.

Configuração de front-end

  1. Clique em Configuração de front-end.
  2. Informe um Nome de network-lb-forwarding-rule.
  3. Em IP, clique no menu suspenso e selecione Criar endereço IP.
    1. Na tela Reservar um novo endereço IP estático, insira o Nome network-lb-ip.
    2. Clique em Reservar.
  4. Escolha Individual e insira 80 no Número da porta.
  5. Clique no botão Concluído.

    Um círculo azul com uma marca de seleção à esquerda de Configuração de front-end indica o sucesso da configuração.

Analisar a configuração

  1. Clique no botão Analisar e finalizar para verificar todas as configurações do balanceador de carga.
  2. Se as configurações estiverem corretas, clique em Criar. Leva alguns minutos para que o balanceador de carga seja criado.

    Na tela do balanceamento de carga, na coluna "Back-end" do novo balanceador de carga, você verá uma marca de seleção verde. Ela indica que o novo balanceador de carga é íntegro.

gcloud

  1. Crie um endereço IP externo estático para o balanceador de carga.

    gcloud compute addresses create network-lb-ip \
        --region us-central1
    
  2. Crie uma verificação de integridade TCP.

    gcloud compute health-checks create tcp tcp-health-check \
        --region us-central1 \
        --port 80
    
  3. Crie um serviço de back-end:

    gcloud compute backend-services create network-lb-backend-service \
        --protocol TCP \
        --health-checks tcp-health-check \
        --health-checks-region us-central1 \
        --region us-central1
    
  4. Adicione os dois grupos de instâncias ao serviço de back-end.

    gcloud compute backend-services add-backend network-lb-backend-service \
    --instance-group ig-us-1 \
    --instance-group-zone us-central1-a \
    --region us-central1
    
    gcloud compute backend-services add-backend network-lb-backend-service \
    --instance-group ig-us-2 \
    --instance-group-zone us-central1-c \
    --region us-central1
    
  5. Crie uma regra de encaminhamento para rotear o tráfego TCP de entrada para o serviço de back-end. Use o endereço IP reservado na etapa 1 como o endereço IP externo estático do balanceador de carga.

    gcloud compute forwarding-rules create network-lb-forwarding-rule \
        --load-balancing-scheme external \
        --region us-central1 \
        --ports 80 \
        --address network-lb-ip \
        --backend-service network-lb-backend-service
    

Como testar o balanceador de carga

Agora que o serviço de balanceamento de carga foi configurado, comece a enviar tráfego para o endereço IP externo do balanceador de carga e veja o tráfego ser distribuído às instâncias de back-end.

Procure o endereço IP externo do balanceador de carga.

Console

  1. Na página de balanceamento de carga Avançado, acesse a guia Regras de encaminhamento.
    Acessar a guia "Regras de encaminhamento"
  2. Localize network-lb-forwarding-rule, a regra de encaminhamento usada pelo balanceador de carga.
  3. Na coluna Endereço IP de network-lb-forwarding-rule, anote o endereço IP externo listado.

gcloud

Insira o comando a seguir para visualizar o endereço IP externo da regra de encaminhamento network-lb-forwarding-rule usada pelo balanceador de carga.

gcloud compute forwarding-rules describe network-lb-forwarding-rule \
    --region us-central1

Enviar tráfego ao balanceador de carga

Este procedimento envia tráfego externo ao balanceador de carga.

  1. Faça solicitações da Web para o balanceador de carga usando curl para contatar o endereço IP dele.

    $ while true; do curl -m1 IP_ADDRESS; done
    
  2. Observe o texto retornado pelo comando curl. O nome da VM de back-end que gera a resposta é exibido nesse texto. Por exemplo: Page served from: VM_NAME.

    A resposta do comando curl alterna aleatoriamente entre as instâncias de back-end. Se ocorrer falha na resposta, aguarde cerca de 30 segundos para que a configuração seja totalmente carregada e as instâncias sejam marcadas como íntegras antes de tentar novamente:

A seguir