Configure um balanceador de carga de rede de proxy clássico (proxy TCP) com back-ends do grupo de instâncias de VM

Google Cloud Os balanceadores de carga de rede de proxy clássicos permitem-lhe usar um único endereço IP para todos os utilizadores em todo o mundo. Os equilibradores de carga de rede de proxy clássicos encaminham automaticamente o tráfego para instâncias de back-end mais próximas do utilizador.

Esta página contém instruções para configurar um balanceador de carga de rede de proxy clássico com back-ends de grupo de instâncias de VM e proxy TCP de destino. Antes de começar, leia a vista geral do equilibrador de carga de rede do proxy externo para ver informações detalhadas sobre o funcionamento destes equilibradores de carga.

Vista geral da configuração

Este exemplo demonstra como configurar um Network Load Balancer de proxy externo para um serviço que existe em duas regiões: região A e região B. Para efeitos do exemplo, o serviço é um conjunto de servidores Apache configurados para responder na porta 110. Muitos navegadores não permitem a porta 110, pelo que a secção de testes usa curl.

Neste exemplo, configura o seguinte:

  1. Quatro instâncias distribuídas entre duas regiões
  2. Grupos de instâncias, que contêm as instâncias
  3. Uma verificação de funcionamento para validar o estado de funcionamento da instância
  4. Um serviço de back-end que monitoriza as instâncias e impede que excedam a utilização configurada
  5. O proxy TCP de destino
  6. Um endereço IPv4 estático externo e uma regra de encaminhamento que envia tráfego de utilizadores para o proxy
  7. Um endereço IPv6 estático externo e uma regra de encaminhamento que envia tráfego de utilizadores para o proxy
  8. Uma regra de firewall que permite que o tráfego do balanceador de carga e do verificador de estado de funcionamento alcance as instâncias

Depois de configurar o balanceador de carga, teste a configuração.

Autorizações

Para seguir este guia, tem de conseguir criar instâncias e modificar uma rede num projeto. Tem de ser proprietário ou editor do projeto, ou ter todas as seguintes funções do IAM do Compute Engine:

Tarefa Função necessária
Crie redes, sub-redes e componentes do balanceador de carga Administrador da rede
Adicione e remova regras de firewall Administrador de segurança
Crie instâncias Administrador de instâncias do Compute

Para mais informações, consulte os seguintes guias:

Configure back-ends de grupos de instâncias

Esta secção mostra como criar grupos de instâncias básicos, adicionar instâncias aos mesmos e, em seguida, adicionar essas instâncias a um serviço de back-end com uma verificação de estado. Normalmente, um sistema de produção usaria grupos de instâncias geridos com base em modelos de instâncias, mas esta configuração é mais rápida para os testes iniciais.

Configure instâncias

Para fins de teste, instale o Apache em quatro instâncias, duas em cada um de dois grupos de instâncias. Normalmente, os balanceadores de carga de rede de proxy externos não são usados para tráfego HTTP, mas o software Apache é usado frequentemente para testes.

Neste exemplo, as instâncias são criadas com a etiqueta tcp-lb. Esta etiqueta é usada posteriormente pela regra de firewall.

Consola

Crie instâncias

  1. Na Google Cloud consola, aceda à página Instâncias de VM.

    Aceder às instâncias de VM

  2. Clique em Criar instância.

  3. Defina Nome como vm-a1.

  4. Defina a Região como REGION_A.

  5. Defina a Zona como ZONE_A.

  6. Clique em Opções avançadas.

  7. Clique em Rede e configure o seguinte campo:

    • Para etiquetas de rede, introduza tcp-lb,allow-health-check-ipv6.
  • Clique em Gestão. Introduza o seguinte script no campo Script de arranque.

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>vm-a1</h1></body></html>' | sudo tee /var/www/html/index.html
  • Clique em Criar.

  • Crie vm-a2 com as mesmas definições, exceto com o seguinte script no campo Script de arranque:

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>vm-a2</h1></body></html>' | sudo tee /var/www/html/index.html

  • Crie vm-b1 com as mesmas definições, exceto com a região definida como REGION_B e a zona definida como ZONE_B. Introduza o seguinte script no campo Script de arranque:

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>vm-b1</h1></body></html>' | sudo tee /var/www/html/index.html

  • Crie vm-b2 com as mesmas definições, exceto com a região definida como REGION_B e a zona definida como ZONE_B. Introduza o seguinte script no campo Script de arranque:

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>vm-b2</h1></body></html>' | sudo tee /var/www/html/index.html

  • gcloud

    1. Crie vm-a1 na zona ZONE_A

      gcloud compute instances create vm-a1 \
         --image-family debian-12 \
         --image-project debian-cloud \
         --tags tcp-lb \
         --zone ZONE_A \
         --metadata startup-script="#! /bin/bash
           sudo apt-get update
           sudo apt-get install apache2 -y
           sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
           sudo service apache2 restart
           echo '<!doctype html><html><body><h1>vm-a1</h1></body></html>' | tee /var/www/html/index.html
           EOF"
      
    2. Crie vm-a2 na zona ZONE_A

      gcloud compute instances create vm-a2 \
         --image-family debian-12 \
         --image-project debian-cloud \
         --tags tcp-lb \
         --zone ZONE_A \
         --metadata startup-script="#! /bin/bash
           sudo apt-get update
           sudo apt-get install apache2 -y
           sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
           sudo service apache2 restart
           echo '<!doctype html><html><body><h1>vm-a2</h1></body></html>' | tee /var/www/html/index.html
           EOF"
      
    3. Crie vm-b1 na zona ZONE_B

      gcloud compute instances create vm-b1 \
         --image-family debian-12 \
         --image-project debian-cloud \
         --tags tcp-lb \
         --zone ZONE_B \
         --metadata startup-script="#! /bin/bash
           sudo apt-get update
           sudo apt-get install apache2 -y
           sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
           sudo service apache2 restart
           echo '<!doctype html><html><body><h1>vm-b1</h1></body></html>' | tee /var/www/html/index.html
           EOF"
      
    4. Crie vm-b2 na zona ZONE_B

      gcloud compute instances create vm-b2 \
         --image-family debian-12 \
         --image-project debian-cloud \
         --tags tcp-lb \
         --zone ZONE_B \
         --metadata startup-script="#! /bin/bash
           sudo apt-get update
           sudo apt-get install apache2 -y
           sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
           sudo service apache2 restart
           echo '<!doctype html><html><body><h1>vm-b2</h1></body></html>' | tee /var/www/html/index.html
           EOF"
      

    Crie grupos de instâncias

    Nesta secção, cria um grupo de instâncias em cada zona e adiciona as instâncias.

    Consola

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

      Aceda a Grupos de instâncias

    2. Clique em Criar grupo de instâncias.

    3. Clique em Novo grupo de instâncias não gerido.

    4. Defina o Nome como instance-group-a.

    5. Defina a Zona como ZONE_A.

    6. Em Mapeamento de portas, clique em Adicionar porta. Um balanceador de carga envia tráfego para um grupo de instâncias através de uma porta designada. Crie uma porta com nome para mapear o tráfego de entrada para um número de porta específico.

      1. Defina Nome da portabilidade como tcp110.
      2. Defina Transferir números como 110.
    7. Em Instâncias de VM, selecione vm-a1 e vm-a2.

    8. Deixe as outras definições como estão.

    9. Clique em Criar.

    10. Repita os passos, mas defina os seguintes valores:

      • Nome: instance-group-b
      • Região: REGION_B
      • Zona: ZONE_B
      • Nome da porta: tcp110
      • Números de portas: 110
      • Instâncias: vm-b1 e vm-b2.

    gcloud

    1. Crie o grupo de instâncias instance-group-a.

      gcloud compute instance-groups unmanaged create instance-group-a \
         --zone ZONE_A
      
    2. Crie uma porta com nome para o grupo de instâncias.

      gcloud compute instance-groups set-named-ports instance-group-a \
         --named-ports tcp110:110 \
         --zone ZONE_A
      
    3. Adicione vm-a1 e vm-a2 a instance-group-a.

      gcloud compute instance-groups unmanaged add-instances instance-group-a \
         --instances vm-a1,vm-a2 \
         --zone ZONE_A
      
    4. Crie o grupo de instâncias us-ig2.

      gcloud compute instance-groups unmanaged create instance-group-b \
         --zone ZONE_B
      
    5. Crie uma porta com nome para o grupo de instâncias.

      gcloud compute instance-groups set-named-ports instance-group-b \
         --named-ports tcp110:110 \
         --zone ZONE_B
      
    6. Adicione vm-b1 e vm-b2 a instance-group-b

      gcloud compute instance-groups unmanaged add-instances instance-group-b \
         --instances vm-b1,vm-b2 \
         --zone ZONE_B
      

    Agora, tem um grupo de instâncias por região. Cada grupo de instâncias tem duas instâncias de VM.

    Crie uma regra de firewall para o balanceador de carga de rede de proxy externo

    Configure a firewall para permitir o tráfego do balanceador de carga e do verificador de estado para as instâncias. Neste caso, vamos abrir a porta TCP 110. A verificação de estado vai usar a mesma porta. Uma vez que o tráfego entre o equilibrador de carga e as suas instâncias usa IPv4, só é necessário abrir intervalos IPv4.

    Consola

    1. Na Google Cloud consola, aceda à página Políticas de firewall.

      Aceder a Políticas de firewall

    2. Clique em Criar regra de firewall.

    3. No campo Nome, introduza allow-tcp-lb-and-health.

    4. Selecione uma rede.

    5. Em Segmentações, selecione Etiquetas de segmentação especificadas.

    6. Defina as etiquetas de destino como tcp-lb.

    7. Defina o Filtro de origem como Intervalos IPv4.

    8. Defina os Intervalos de IPv4 de origem para 130.211.0.0/2235.191.0.0/16.

    9. Em Protocolos e portas, defina Protocolos e portas especificados como tcp:110.

    10. Clique em Criar.

    gcloud

    gcloud compute firewall-rules create allow-tcp-lb-and-health \
       --source-ranges 130.211.0.0/22,35.191.0.0/16 \
       --target-tags tcp-lb \
       --allow tcp:110
    

    Configure o balanceador de carga

    Consola

    Inicie a configuração

    1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

      Aceda a Balanceamento de carga

    2. Clique em Criar equilibrador de carga.
    3. Para Tipo de balanceador de carga, selecione Balanceador de carga de rede (TCP/UDP/SSL) e clique em Seguinte.
    4. Para Proxy ou passagem, selecione Proxy de balanceamento de carga e clique em Seguinte.
    5. Para Público ou interno, selecione Público (externo) e clique em Seguinte.
    6. Para a Implementação global ou de região única, selecione Melhor para cargas de trabalho globais e clique em Seguinte.
    7. Para Geração do balanceador de carga, selecione Proxy clássico Balanceador de carga de rede e clique em Seguinte.
    8. Clique em Configurar.

    Configuração básica

    Defina o Nome como my-tcp-lb.

    Configuração do back-end

    1. Clique em Configuração de back-end.
    2. Na lista Tipo de back-end, selecione Grupos de instâncias.
    3. Na lista Protocolo, selecione TCP.
    4. Configure a verificação de estado:
      • Na lista Verificação de funcionamento, selecione Criar verificação de funcionamento.
      • No campo Nome, introduza my-tcp-health-check.
      • Na lista Protocolo, selecione TCP.
      • No campo Porta, introduza 110.
      • Mantenha os restantes valores predefinidos.
      • Clique em Criar.
    5. Configure o primeiro back-end:
      1. Em Novo back-end, selecione o grupo de instâncias instance-group-a.
      2. Mantenha os restantes valores predefinidos.
    6. Configure o segundo back-end:
      1. Clique em Adicionar back-end.
      2. Selecione o grupo de instâncias instance-group-b.
      3. Em Números de portas, elimine 80 e adicione 110.
    7. Na Google Cloud consola, verifique se existe uma marca de verificação junto a Configuração de back-end. Caso contrário, verifique novamente se concluiu todos os passos.

    Configuração do frontend

    1. Clique em Configuração do front-end.
    2. Adicione a primeira regra de encaminhamento:
      1. Introduza um Nome de my-tcp-lb-forwarding-rule.
      2. Em Protocolo, selecione TCP.
      3. Em Endereço IP, selecione Criar endereço IP:
        1. Introduza um Nome de tcp-lb-static-ip.
        2. Clique em Reservar.
      4. Defina Porta como 110.
      5. Neste exemplo, não ative o protocolo proxy porque não funciona com o software do servidor HTTP Apache. Para mais informações, consulte o artigo Protocolo de proxy.
      6. Clique em Concluído.
    3. Adicione a segunda regra de encaminhamento:
      1. Clique em Adicionar IP e porta do front-end.
      2. Introduza um Nome de my-tcp-lb-ipv6-forwarding-rule.
      3. Em Protocolo, selecione TCP.
      4. Defina a versão do IP como IPv6.
      5. Em Endereço IP, clique em Criar endereço IP.
        1. Introduza um nome de tcp-lb-ipv6-static-ip.
        2. Clique em Reservar.
      6. Defina Porta como 110.
      7. Neste exemplo, não ative o protocolo proxy porque não funciona com o software do servidor HTTP Apache. Para mais informações, consulte o artigo Protocolo de proxy.
      8. Clique em Concluído.
    4. Na Google Cloud consola, verifique se existe uma marca de verificação junto a Configuração do front-end. Caso contrário, verifique novamente se concluiu todos os passos anteriores.

    Reveja e finalize

    1. Clique em Rever e finalizar.
    2. Reveja as definições de configuração do equilibrador de carga.
    3. Opcional: clique em Código equivalente para ver o pedido da API REST que vai ser usado para criar o balanceador de carga.
    4. Clique em Criar.

    gcloud

    1. Crie uma verificação de funcionamento.
          gcloud compute health-checks create tcp my-tcp-health-check --port 110
          
    2. Crie um serviço de back-end.
          gcloud compute backend-services create my-tcp-lb \
              --load-balancing-scheme EXTERNAL \
              --global-health-checks \
              --global \
              --protocol TCP \
              --health-checks my-tcp-health-check \
              --timeout 5m \
              --port-name tcp110
          
    3. Adicione grupos de instâncias ao seu serviço de back-end.
          gcloud compute backend-services add-backend my-tcp-lb \
              --global \
              --instance-group instance-group-a \
              --instance-group-zone ZONE_A \
              --balancing-mode UTILIZATION \
              --max-utilization 0.8
          
          gcloud compute backend-services add-backend my-tcp-lb \
              --global \
              --instance-group instance-group-b \
              --instance-group-zone ZONE_B \
              --balancing-mode UTILIZATION \
              --max-utilization 0.8
          
    4. Configure um proxy TCP de destino. Se quiser ativar o cabeçalho do proxy, defina-o como PROXY_V1 em vez de NONE.
          gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy \
              --backend-service my-tcp-lb \
              --proxy-header NONE
          
    5. Reserve endereços IPv4 e IPv6 estáticos globais.

      Os seus clientes podem usar estes endereços IP para aceder ao seu serviço com balanceamento de carga.

          gcloud compute addresses create tcp-lb-static-ipv4 \
              --ip-version=IPV4 \
              --global
          
          gcloud compute addresses create tcp-lb-static-ipv6 \
              --ip-version=IPV6 \
              --global
          
    6. Configure regras de encaminhamento globais para os dois endereços.
          gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
              --load-balancing-scheme EXTERNAL \
              --global \
              --target-tcp-proxy my-tcp-lb-target-proxy \
              --address tcp-lb-static-ipv4 \
              --ports 110
          
          gcloud compute forwarding-rules create my-tcp-lb-ipv6-forwarding-rule \
              --load-balancing-scheme EXTERNAL \
              --global \
              --target-tcp-proxy my-tcp-lb-target-proxy \
              --address tcp-lb-static-ipv6 \
              --ports 110
          

    Teste o balanceador de carga

    1. Obtenha o endereço IP do balanceador de carga.

      Para obter o endereço IPv4, execute o seguinte comando:

      gcloud compute addresses describe tcp-lb-static-ipv4
      

      Para obter o endereço IPv6, execute o seguinte comando:

      gcloud compute addresses describe tcp-lb-static-ipv6
      
    2. Envie tráfego para o balanceador de carga executando o seguinte comando. Substitua LB_IP_ADDRESS pelo endereço IPv4 ou IPv6 do seu equilibrador de carga.

      curl -m1 LB_IP_ADDRESS:110
      

      Por exemplo, se o endereço IPv6 atribuído for [2001:db8:1:1:1:1:1:1/96]:110, o comando deve ter o seguinte aspeto:

      curl -m1 http://[2001:db8:1:1:1:1:1:1]:110
      

    Se não conseguir aceder ao equilibrador de carga, experimente os passos descritos em Resolução de problemas da configuração.

    Opções de configuração adicionais

    Esta secção expande o exemplo de configuração para oferecer opções de configuração alternativas e adicionais. Todas as tarefas são opcionais. Pode realizá-las por qualquer ordem.

    Protocolo PROXY para reter informações de ligação do cliente

    O Network Load Balancer de proxy termina as ligações TCP do cliente e cria novas ligações às instâncias. Por predefinição, as informações de porta e IP do cliente original não são preservadas.

    Para preservar e enviar as informações de ligação originais para as suas instâncias, ative o protocolo PROXY versão 1. Este protocolo envia um cabeçalho adicional que contém o endereço IP de origem, o endereço IP de destino e os números das portas para a instância como parte do pedido.

    Certifique-se de que as instâncias de back-end do balanceador de carga de rede do proxy estão a executar servidores que suportam cabeçalhos do protocolo PROXY. Se os servidores não estiverem configurados para suportar cabeçalhos do protocolo PROXY, as instâncias de back-end devolvem respostas vazias.

    Se definir o protocolo PROXY para o tráfego de utilizadores, também o pode definir para as verificações de funcionamento. Se estiver a verificar o estado de funcionamento e a publicar conteúdo na mesma porta, defina o --proxy-header da verificação de funcionamento de modo a corresponder à definição do balanceador de carga.

    Normalmente, o cabeçalho do protocolo PROXY é uma única linha de texto legível pelo utilizador no seguinte formato:

    PROXY TCP4 <client IP> <load balancing IP> <source port> <dest port>\r\n
    

    O exemplo seguinte mostra um protocolo PROXY:

    PROXY TCP4 192.0.2.1 198.51.100.1 15221 110\r\n

    No exemplo anterior, o IP do cliente é 192.0.2.1, o IP de equilíbrio de carga é 198.51.100.1, a porta do cliente é 15221 e a porta de destino é 110.

    Quando o IP do cliente não é conhecido, o balanceador de carga gera um cabeçalho do protocolo PROXY no seguinte formato:

    PROXY UNKNOWN\r\n
    

    Atualize o cabeçalho do protocolo PROXY para o proxy de destino

    A configuração de exemplo do balanceador de carga nesta página mostra como ativar o cabeçalho do protocolo PROXY durante a criação do balanceador de carga de rede do proxy. Use estes passos para alterar o cabeçalho do protocolo PROXY para um proxy de destino existente.

    Consola

    1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

      Aceda a Balanceamento de carga

    2. Clique em Editar para o equilibrador de carga.
    3. Clique em Configuração do front-end.
    4. Altere o valor do campo Protocolo proxy para Ativado.
    5. Clique em Atualizar para guardar as alterações.

    gcloud

    No comando seguinte, edite o campo --proxy-header e defina-o como NONE ou PROXY_V1, consoante o seu requisito.

    gcloud compute target-tcp-proxies update TARGET_PROXY_NAME \
        --proxy-header=[NONE | PROXY_V1]
    

    Configure a afinidade de sessão

    A configuração de exemplo cria um serviço de back-end sem afinidade de sessão.

    Estes procedimentos mostram como atualizar um serviço de back-end para o exemplo do equilibrador de carga, de modo que o serviço de back-end use a afinidade de IP do cliente ou a afinidade de cookies gerados.

    Quando a afinidade de IP do cliente está ativada, o balanceador de carga direciona os pedidos de um cliente específico para a mesma VM de back-end com base num hash criado a partir do endereço IP do cliente e do endereço IP do balanceador de carga (o endereço IP externo de uma regra de encaminhamento externo).

    Consola

    Para ativar a afinidade de sessão de IP do cliente:

    1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

      Aceda a Balanceamento de carga

    2. Clique em Back-ends.

    3. Clique em my-tcp-lb (o nome do serviço de back-end que criou para este exemplo) e clique em Editar.

    4. Na página Detalhes do serviço de back-end, clique em Configuração avançada.

    5. Em Afinidade de sessão, selecione IP do cliente no menu.

    6. Clique em Atualizar.

    gcloud

    Use o seguinte comando da CLI Google Cloud para atualizar o serviço de back-end, especificando a afinidade da sessão do IP do cliente:my-tcp-lb

    gcloud compute backend-services update my-tcp-lb \
        --global \
        --session-affinity=CLIENT_IP
    

    API

    Para definir a afinidade de sessão do IP do cliente, faça um pedido PATCH ao método backendServices/patch.

    PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/us-west1/backendServices/my-tcp-lb
    {
      "sessionAffinity": "CLIENT_IP"
    }
    

    Ative a drenagem de ligações

    Pode ativar a drenagem de ligações nos serviços de back-end para garantir uma interrupção mínima para os seus utilizadores quando uma instância que está a servir tráfego é terminada, removida manualmente ou removida por um escalador automático. Para saber mais sobre a drenagem de ligações, leia a documentação Ativar a drenagem de ligações.

    O que se segue?