Como configurar o balanceamento de carga do proxy TCP

O balanceamento de carga do proxy TCP do Google Cloud permite que você use um único endereço IP para todos os usuários ao redor do mundo. O balanceamento de carga do proxy TCP direciona automaticamente o tráfego para as instâncias mais próximas ao usuário.

Este guia contém instruções para configurar o balanceamento de carga de proxy TCP. Antes de começar, leia a Visão geral do balanceamento de carga do proxy TCP para informações sobre como esse balanceamento funciona.

Visão geral

Neste exemplo, demonstramos como configurar o balanceamento de carga de proxy TCP global para um serviço simples que existe em duas regiões: us-central1 e us-east1. Para o propósito deste exemplo, o serviço é um conjunto de servidores Apache configurados para responder na porta 110. Muitos navegadores não permitem a porta 110, portanto, a seção de teste usa curl.

Neste exemplo, você 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 integridade para verificar a integridade da instância
  4. um serviço de back-end, que monitora as instâncias e impede que elas excedam o uso configurado
  5. o proxy TCP de destino
  6. um endereço IPv4 estático externo e uma regra de encaminhamento que envia o tráfego do usuário para o proxy
  7. um endereço IPv6 estático externo e uma regra de encaminhamento que envia o tráfego do usuário para o proxy
  8. Uma regra de firewall que permite que o tráfego do balanceador de carga e do verificador de integridade alcance as instâncias.

Depois que o balanceador de carga for configurado, você testará a configuração.

Permissões

Para seguir as instruções deste guia, você precisa ser capaz de criar instâncias e modificar uma rede em um projeto. É necessário ser um proprietário ou editor de projeto, ou ter todos os seguintes papéis do IAM do Compute Engine:

Tarefa Papel necessário
Criar redes, sub-redes e componentes do balanceador de carga Administrador de rede
Adicionar e remover regras de firewall Administrador de segurança
Criar instâncias Administrador da instância do Compute

Para mais informações, consulte estes guias:

Como configurar instâncias e grupos de instâncias

Nesta seção, mostramos como criar grupos de instâncias simples, adicionar instâncias a elas e, em seguida, adicionar essas instâncias a um serviço de back-end com uma verificação de integridade. Um sistema de produção normalmente usaria grupos de instâncias gerenciadas com base em modelos de instâncias, mas essa configuração é mais rápida para testes iniciais.

Como configurar instâncias

Para fins de teste, instale o Apache em quatro instâncias, duas em cada um dos dois grupos de instâncias. Normalmente, o balanceamento de carga de proxy TCP não é usado para tráfego HTTP, mas o Apache é um software comumente utilizado e fácil de configurar para testes.

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

Console


Criar instâncias

  1. Acesse a página "Instâncias de VM" no Console do Google Cloud Platform.
    Acessar a página "Instâncias de VM"
  2. Clique em Criar instância.
  3. Defina o Nome como ig-us-central1-1.
  4. Defina a Região como us-central1.
  5. Defina a Zona como us-central1-b.
  6. Clique em Gerenciamento, segurança, discos, rede, locatário único para ver as configurações avançadas.
  7. Em Gerenciamento, clique em Rede e preencha o campo Tags com tcp-lb.
  8. Clique em Gerenciamento e insira o script a seguir no campo Script de inicialização.
    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>ig-us-central1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  9. Deixe os valores padrão no restante dos campos.
  10. Clique em Criar.
  11. Crie ig-us-central1-2 com as mesmas configurações, exceto com o seguinte script no campo Script de inicialização:
    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>ig-us-central1-2</h1></body></html>' | sudo tee /var/www/html/index.html
  12. Crie ig-us-east1-1 com as mesmas configurações, exceto com Região definida como us-east1 e Zona definida como us-east1-b. Digite o script a seguir no campo Script de inicialização:
    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>ig-us-east1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  13. Crie ig-us-east1-2 com as mesmas configurações, exceto com Região definida como us-east1 e Zona definida como us-east1-b. Digite o script a seguir no campo Script de inicialização:
    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>ig-us-east1-2</h1></body></html>' | sudo tee /var/www/html/index.html

gcloud


  1. Crie ig-us-central1-1 na zona us-central1-b.

    gcloud compute instances create ig-us-central1-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-central1-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>ig-us-central1-1</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/ig-us-central1-1].
    NAME             ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-1 us-central1-b n1-standard-1             10.240.0.8  23.251.150.133 RUNNING
    
  2. Crie ig-us-central1-2 na zona us-central1-b

    gcloud compute instances create ig-us-central1-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-central1-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>ig-us-central1-2</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/ig-us-central1-2].
    NAME             ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-2 us-central1-b n1-standard-1             10.240.0.11 23.251.148.160 RUNNING
    
  3. Crie ig-us-east1-1 na zona us-east1-b

    gcloud compute instances create ig-us-east1-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-east1-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>ig-us-east1-1</h1></body></html>' | tee /var/www/html/index.html
              EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instances/ig-us-east1-1].
    NAME          ZONE       MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-east1-1 us-east1-b n1-standard-1             10.240.0.12 104.196.31.214 RUNNING
    
  4. Crie ig-us-east1-2 na zona us-east1-b.

    gcloud compute instances create ig-us-east1-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-east1-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>ig-us-east1-2</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instances/ig-us-east1-2].
    NAME          ZONE       MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-east1-2 us-east1-b n1-standard-1             10.240.0.13 104.196.25.101 RUNNING
    

Como criar um grupo de instâncias para cada zona e adicionar instâncias

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. Clique em Novo grupo de instâncias não gerenciadas.
  4. Defina o Nome como us-ig1.
  5. Defina a Zona como us-central1-b.
  6. Clique em Especificar mapeamento de nomes de porta. Um balanceador de carga envia tráfego a um grupo de instâncias por meio de uma porta nomeada. Crie uma porta nomeada para mapear o tráfego de entrada em um número de porta específico.
    1. Defina o Nome da porta como tcp110.
    2. Defina Números de portas como 110.
  7. Em Instâncias de VM, selecione ig-us-central1-1 e ig-us-central1-2.
  8. Não altere as outras configurações.
  9. Clique em Criar.
  10. Repita as etapas, mas defina as seguintes configurações:
    • Nome: us-ig2
    • Região: us-east1
    • Zona: us-east1-b
    • Nome da porta: tcp110
    • Números de portas: 110
    • Instâncias: ig-us-east1-1 e ig-us-east1-2

gcloud


  1. Crie o grupo de instâncias us-ig1.

    gcloud compute instance-groups unmanaged create us-ig1 \
        --zone us-central1-b
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instanceGroups/us-ig1].
    NAME    LOCATION       SCOPE  NETWORK  MANAGED  INSTANCES
    us-ig1  us-central1-b  zone                     0
    
  2. Crie uma porta nomeada para o grupo de instâncias.

    gcloud compute instance-groups set-named-ports us-ig1 \
        --named-ports tcp110:110 \
        --zone us-central1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
  3. Adicione ig-us-central1-1 e ig-us-central1-2 a us-ig1

    gcloud compute instance-groups unmanaged add-instances us-ig1 \
        --instances ig-us-central1-1,ig-us-central1-2 \
        --zone us-central1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instanceGroups/us-ig1].
  4. Crie o grupo de instâncias us-ig2.

    gcloud compute instance-groups unmanaged create us-ig2 \
        --zone us-east1-b
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
    NAME    LOCATION    SCOPE  NETWORK  MANAGED  INSTANCES
    us-ig2  us-east1-b  zone                     0
    
  5. Crie uma porta nomeada para o grupo de instâncias.

    gcloud compute instance-groups set-named-ports us-ig2 \
        --named-ports tcp110:110 \
        --zone us-east1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
  6. Adicione ig-us-east1-1 e ig-us-east1-2 a us-ig2.

    gcloud compute instance-groups unmanaged add-instances us-ig2 \
        --instances ig-us-east1-1,ig-us-east1-2 \
        --zone us-east1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].

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

Como configurar o balanceador de carga

Console


Criar o balanceador de carga e configurar um serviço de back-end

  1. Acesse a página "Balanceamento de carga" no Console do Google Cloud.
    Acessar a página "Balanceamento de carga"
  2. Clique em Criar balanceador de carga.
  3. Inicie a configuração do balanceador de carga:
    1. Em Balanceamento de carga TCP, clique em Iniciar configuração.
    2. Defina Somente voltado para a Internet ou interno como Da Internet para minhas VMs.
    3. Defina Várias regiões ou região única como Várias regiões.
    4. Clique em Continuar.
    5. Defina o Nome como my-tcp-lb.
    6. Clique em Configuração de back-end.
    7. Em Tipo de back-end, selecione Grupos de instâncias.
    8. Em Protocolo, selecione TCP.
  4. Configure o primeiro back-end:
    1. Em Novo back-end, selecione o grupo de instâncias us-ig1.
    2. Retenha os valores padrão restantes.
  5. Configure o segundo back-end:
    1. Clique em Adicionar back-end.
    2. Selecione o grupo de instâncias us-ig2.
    3. Em Números de portas, exclua 80 e adicione 110.
  6. Configure a verificação de integridade:
    1. Em Verificação de integridade, selecione Criar verificação de integridade.
    2. Defina o Nome da verificação de integridade como my-tcp-health-check.
    3. Em Protocolo, selecione TCP.
    4. Defina a Porta como 110.
  7. Retenha os valores padrão restantes.
  8. Clique em Salvar e continuar.
  9. No Console do Google Cloud, verifique se há uma marca de seleção ao lado de Configuração de back-end. Se não houver, verifique se você concluiu todas as etapas.

Configurar serviços de front-end

  1. Clique em Configuração de front-end.
  2. Adicione a primeira regra de encaminhamento:
    1. Informe um Nome de my-tcp-lb-forwarding-rule.
    2. Em Protocolo, selecione TCP.
    3. Em Endereço IP, selecione Criar endereço IP:
      1. Informe um Nome de tcp-lb-static-ip.
      2. Clique em Reservar.
    4. Defina a Porta como 110.
    5. (Opcional) Em Protocolo de proxy, selecione Ativado. Para mais informações, consulte Protocolo de proxy.
    6. Clique em Concluído.
  3. Adicione a segunda regra de encaminhamento:
    1. Clique em Adicionar IP e porta de front-end.
    2. Informe um Nome de my-tcp-lb-ipv6-forwarding-rule.
    3. Em Protocolo, selecione TCP.
    4. Defina Versão do IP como IPv6.
    5. Em Endereço IP, clique em Criar endereço IP.
      1. Informe um nome de tcp-lb-ipv6-static-ip.
      2. Clique em Reservar.
    6. Defina a Porta como 110.
    7. (Opcional) Em Protocolo de proxy, selecione Ativado.
    8. Clique em Concluído.
  4. No Console do Google Cloud, verifique se há uma marca de seleção ao lado de Configuração de front-end. Se não houver, verifique se você concluiu todas as etapas anteriores.

Revisar e finalizar

  1. Clique em Revisar e finalizar.
  2. Verifique suas configurações.
  3. Clique em Criar.

gcloud


Criar verificação de integridade

gcloud compute health-checks create tcp my-tcp-health-check --port 110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/my-tcp-health-check].
NAME                PROTOCOL
my-tcp-health-check TCP

Criar serviço de back-end

gcloud compute backend-services create my-tcp-lb \
    --global-health-checks \
    --global \
    --protocol TCP \
    --health-checks my-tcp-health-check \
    --timeout 5m \
    --port-name tcp110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].
NAME      BACKENDS PROTOCOL
my-tcp-lb          TCP

Como alternativa, é possível configurar a comunicação criptografada do balanceador de carga para as instâncias com --protocol SSL.

Adicionar grupos de instância ao serviço de back-end

gcloud compute backend-services add-backend my-tcp-lb \
    --global \
    --instance-group us-ig1 \
    --instance-group-zone us-central1-b \
    --balancing-mode UTILIZATION \
    --max-utilization 0.8
Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].
gcloud compute backend-services add-backend my-tcp-lb \
    --global \
    --instance-group us-ig2 \
    --instance-group-zone us-east1-b \
    --balancing-mode UTILIZATION \
    --max-utilization 0.8
Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].

Configurar um proxy TCP de destino

Se quiser ativar o cabeçalho 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
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetTcpProxies/my-tcp-lb-target-proxy].
NAME                   PROXY_HEADER SERVICE
my-tcp-lb-target-proxy NONE         my-tcp-lb

Reservar endereços IPv4 e IPv6 globais e estáticos

Seus clientes podem usar esses endereços IP para acessar seu serviço de balanceamento de carga.

gcloud compute addresses create tcp-lb-static-ipv4 \
    --ip-version=IPV4 \
    --global
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/tcp-lb-static-ipv4].
NAME                 REGION ADDRESS                 STATUS
tcp-lb-static-ip            [LB_STATIC_IPV4]        RESERVED
gcloud compute addresses create tcp-lb-static-ipv6 \
    --ip-version=IPV6 \
    --global
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/tcp-lb-static-ipv6].
NAME                   REGION ADDRESS                 STATUS
tcp-lb-static-ip-ipv6         [LB_STATIC_IPV6]        RESERVED

Configurar regras de encaminhamento globais para os dois endereços

No lugar de [LB_STATIC_IPV4] e [LB_STATIC_IPV4], insira os endereços IP relevantes. Use gcloud compute addresses list para encontrá-los.

gcloud beta compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
    --global \
    --target-tcp-proxy my-tcp-lb-target-proxy \
    --address [LB_STATIC_IPV4] \
    --ports 110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-tcp-lb-ipv4-forwarding-rule].
NAME                           REGION IP_ADDRESS       IP_PROTOCOL TARGET
my-tcp-lb-ipv4-forwarding-rule        [LB_STATIC_IPV4] TCP         my-tcp-lb-target-proxy
gcloud beta compute forwarding-rules create my-tcp-lb-ipv6-forwarding-rule \
    --global \
    --target-tcp-proxy my-tcp-lb-target-proxy \
    --address [LB_STATIC_IPV6] \
    --ports 110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-tcp-lb-ipv6-forwarding-rule].
NAME                           REGION IP_ADDRESS       IP_PROTOCOL TARGET
my-tcp-lb-ipv6-forwarding-rule        [LB_STATIC_IPV6] TCP         my-tcp-lb-target-proxy

Como criar uma regra de firewall para o balanceador de carga do proxy TCP

Configure o firewall para permitir o tráfego proveniente do balanceador de carga e do verificador de integridade para as instâncias. Neste caso, vamos abrir a porta TCP 110. A verificação de integridade usará a mesma porta. Como o tráfego entre o balanceador de carga e suas instâncias usa o IPv4, somente os intervalos IPv4 precisam ser abertos.

Console


  1. Acesse a página "Firewall" no Console do Google Cloud.
    Acessar a página "Firewall"
  2. Clique em Criar regra de firewall.
  3. Informe um Nome de allow-tcp-lb-and-health.
  4. Em Rede, selecione default.
  5. Em Destinos, selecione Tags de destino especificadas.
  6. Defina Tags de destino para tcp-lb.
  7. Defina Filtro de origem como IP ranges.
  8. Defina Intervalos IP de origem como 130.211.0.0/22 e 35.191.0.0/16.
  9. Defina Portas e protocolos permitidos como tcp:110.
  10. Clique em Criar.

gcloud


 gcloud compute firewall-rules create allow-tcplb-and-health \
     --source-ranges 130.211.0.0/22,35.191.0.0/16 \
     --target-tags tcp-lb \
     --allow tcp:110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-130-211-0-0-22].
NAME                     NETWORK SRC_RANGES                   RULES      SRC_TAGS TARGET_TAGS
allow-tcplb-and-health   default 130.211.0.0/22,35.191.0.0/16 tcp:110             tcp-lb

Como testar seu balanceador de carga

Depois de substituir LB_IP pelo endereço IPv4 ou IPv6 do seu balanceador de carga no campo IP:Porta, o balanceador de carga pode ser acessado executando o seguinte comando:

curl LB_IP:110

Como criar verificações de integridade

As verificações de integridade determinam quais instâncias podem receber novas conexões. Configure uma verificação de integridade TCP, SSL, HTTP ou HTTPS para determinar a integridade das instâncias.

  • Se o serviço em execução nas instâncias de back-end for baseado em HTTP, use uma verificação de integridade HTTP.
  • Se o serviço em execução nas instâncias de back-end for baseado em HTTPS, use uma verificação de integridade HTTPS.
  • Se o serviço em execução nas instâncias de back-end for baseado em HTTP/2, use uma verificação de integridade de HTTP/2.
  • Se o serviço em execução nas instâncias de back-end usar SSL, utilize uma verificação de integridade SSL.
  • A menos que você tenha uma razão explícita para utilizar um tipo diferente de verificação de integridade, use uma verificação de integridade TCP.

Regras de firewall da verificação de integridade

As sondagens da verificação de integridade para as instâncias com carga balanceada vêm de endereços nos intervalos 130.211.0.0/22 e 35.191.0.0/16. Esses são os intervalos de endereços IP que o balanceador de carga usa para se conectar a instâncias de back-end. É necessário que as regras de firewall permitam essas conexões na porta relevante.

Consulte a página das Verificações de integridade para saber mais sobre elas.

Outras opções de configuração

Nesta seção, o exemplo é detalhado para fornecer outras opções de configuração. Todas as tarefas são opcionais. É possível realizá-las em qualquer ordem.

Protocolo PROXY para manter informações de conexão do cliente

O balanceamento de carga de proxy TCP encerra as conexões TCP do cliente e cria novas conexões com as instâncias. Por padrão, as informações de IP e porta do cliente original não são preservadas.

Para preservar e enviar as informações de conexão originais para suas instâncias, ative o protocolo PROXY (versão 1). Esse protocolo envia mais um cabeçalho que contém o endereço IP de origem, o endereço IP de destino e os números de porta para a instância como parte da solicitação.

Se você definir o protocolo PROXY para o tráfego de usuários, também deverá configurá-lo para verificações de integridade se estiver veiculando tráfego e verificando a integridade na mesma porta.

O cabeçalho do protocolo PROXY costuma ser uma única linha de texto legível pelo usuário com o seguinte formato:

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

Um exemplo do protocolo PROXY é mostrado abaixo:

PROXY TCP4 192.0.2.1 198.51.100.1 15221 110\r\n

Em que o IP do cliente é 192.0.2.1, o IP do balanceamento de carga é 198.51.100.1, a porta do cliente é 15221 e a porta de destino é 110.

Nos casos em que o IP do cliente não é conhecido, o balanceador de carga vai gerar um cabeçalho de protocolo PROXY no seguinte formato:

PROXY UNKNOWN\r\n

Se você estiver verificando a integridade e a exibição de conteúdo na mesma porta, poderá definir sua verificação de integridade --proxy-header para corresponder à configuração do balanceador de carga. Neste tutorial, usamos a porta 110 para verificação de integridade e exibição de conteúdo. Se você estiver usando portas diferentes, poderá definir ou não essa porta para a verificação de integridade, conforme apropriado.

Como ativar a afinidade da sessão

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

Nestes procedimentos, você verá um exemplo de como atualizar um serviço de back-end para um balanceador de carga de proxy TCP. Com isso, o serviço de back-end usa a afinidade de IP do cliente ou a afinidade de cookie gerado.

Quando a afinidade de IP do cliente está ativada, o balanceador de carga direciona as solicitações de um determinado cliente para a mesma VM de back-end. Isso é feito com base em um 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).

Console

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

  1. Acesse a página "Balanceamento de carga" no Console do Google Cloud.
    Acessar a página "Balanceamento de carga"
  2. Clique em Back-ends.
  3. Clique em my-tcp-lb, ou seja, o nome do serviço de back-end que você criou para este exemplo. Depois, clique em Editar.
  4. Na página Detalhes do serviço de back-end, clique em Configuração avançada.
  5. Em Afinidade da sessão, selecione IP do cliente no menu.
  6. Clique em Atualizar.

gcloud

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

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

API

Para definir a afinidade da sessão de IP do cliente, faça uma solicitação PATCH para o método backendServices/patch.

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

Diminuição da conexão

Ative a diminuição da conexão em serviços de back-end para garantir interrupção mínima aos usuários quando uma instância que está veiculando tráfego é encerrada, removida manualmente ou removida por um autoescalador. Para mais informações, leia sobre Como ativar a diminuição da conexão.

O balanceamento de carga do proxy TCP e o firewall do Google Cloud

Diferente do balanceamento de carga de rede, não é possível usar as regras de firewall para controlar o acesso ao balanceamento de carga de proxy TCP. Isso ocorre porque o balanceamento de carga do proxy TCP é implementado na borda do Google Cloud e as regras de firewall são implementadas em instâncias no data center.

Monitoramento

Para configurar o monitoramento do balanceador de carga do proxy TCP, consulte Como usar o monitoramento.

Solução de problemas

As páginas não são carregadas do IP de um balanceador de carga

Como a porta 110 é uma porta restrita para muitos navegadores, é necessário usar uma ferramenta como curl para testar o balanceador de carga. Se não for possível alcançar suas páginas usando curl, o restante desta seção oferece algumas etapas de solução de problemas.

Verificar a integridade das instâncias

Verifique se as instâncias são ÍNTEGRAS.

gcloud compute backend-services get-health [BACKEND-SERVICE]

Confirmar se a regra de firewall está correta

  • Tanto o verificador de integridade como o balanceador de carga precisam que 130.211.0.0/22 e 35.191.0.0/16 estejam abertos.
  • Se você estiver usando tags de instância, verifique se a tag está listada em TARGET_TAGS na regra de firewall e se todas as instâncias têm essa tag. Neste exemplo, as instâncias estão marcadas com tcp-lb.
gcloud compute firewall-rules list
NAME                      NETWORK SRC_RANGES                    RULES          SRC_TAGS TARGET_TAGS
allow-tcplb-and-health    default 130.211.0.0/22,35.191.0.0/16  tcp:110                 tcp-lb

Tentar alcançar instâncias individuais

Defina uma regra de firewall temporária que permita o acesso a suas instâncias individualmente. Depois, tente carregar uma página em uma instância específica.

  1. Abra o firewall para permitir o tráfego de qualquer origem para as instâncias com tags. Para isso, crie um filtro de origem que defina o intervalo IP de origem como 0.0.0.0/0 para tráfego TCP na porta 110 nas instâncias com a tag tcp-lb.

    gcloud compute firewall-rules create allow-tcp110-0-0-0-0 \
        --source-ranges 0.0.0.0/0 \
        --target-tags tcp-lb \
        --allow tcp:110
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-0-0-0-0].
    NAME                 NETWORK SRC_RANGES RULES   SRC_TAGS TARGET_TAGS
    allow-tcp110-0-0-0-0 default 0.0.0.0/0  tcp:110          tcp-lb
    
  2. Procure o endereço EXTERNAL_IP de uma das instâncias.

    gcloud compute instances list
    
    NAME             ZONE           MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-1 us-central1-b  n1-standard-1             10.240.0.8  EXTERNAL_IP RUNNING
    ig-us-central1-2 us-central1-b  n1-standard-1             10.240.0.11 EXTERNAL_IP RUNNING
    ig-us-east1-1    us-east1-b     n1-standard-1             10.240.0.12 EXTERNAL_IP RUNNING
    ig-us-east1-2    us-east1-b     n1-standard-1             10.240.0.13 EXTERNAL_IP RUNNING
  3. Acesse uma ou mais instâncias diretamente no navegador.

    curl [EXTERNAL_IP]:110
    
  4. Se não for possível acessar as instâncias por este método, verifique se o software está funcionando corretamente. Se as instâncias estiverem acessíveis individualmente, verifique se a regra de firewall do balanceador de carga está correta.

    gcloud compute firewall-rules describe allow-tcp-lb-and-health
    
    allowed:
      IPProtocol: tcp
        ports:
        '110'
    creationTimestamp: '2017-03-16T15:21:34.119-07:00'
    description: ''
    id: '8144207668574597377'
    kind: compute#firewall
    name: allow-tcp-lb-and-health
    network: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default
    selfLink: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp-lb-and-health
    sourceRanges:
      130.211.0.0/22
      35.191.0.0/16
    targetTags:
      tcp-lb
  5. Quando tiver certeza de que as instâncias estão funcionando, remova a regra de firewall “de qualquer lugar”.

    gcloud compute firewall-rules delete allow-tcp110-0-0-0-0
    
    The following firewalls will be deleted:
       [allow-tcp110-0-0-0-0]
    Do you want to continue (Y/n)?  y
    Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-0-0-0-0].

A seguir

  • Para saber como funciona o balanceamento de carga do proxy TCP, consulte esta página.