Como configurar o proxy TCP para o Google Cloud Load Balancing

O balanceamento de carga do proxy TCP do Google Cloud Platform (GCP) permite usar um único endereço IP para todos os usuários no mundo. O balanceamento de carga do proxy TCP do GCP direciona automaticamente o tráfego para as novas instâncias mais próximas ao usuário.

O balanceamento de carga do proxy TCP do Cloud se destina ao tráfego não HTTP. Para o tráfego HTTP, recomenda-se o balanceamento de carga HTTP(S). Para o tráfego SSL por meio de proxy, use o balanceamento de carga de proxy SSL.

O balanceamento de carga do proxy TCP aceita endereços IPv4 e IPv6 para o tráfego do cliente. As solicitações IPv6 do cliente são encerradas na camada global de balanceamento de carga e, em seguida, encaminhadas por proxy sobre IPv4 para seus back-ends.

Conteúdo

Visão geral

Com o proxy TCP do tráfego TCP, você pode terminar as sessões TCP dos clientes na camada de balanceamento de carga global, depois encaminhar o tráfego para as instâncias de máquina virtual usando TCP ou SSL.

O balanceamento e carga do proxy TCP é um serviço de balanceamento de carga global. Você pode implantar suas instâncias em várias regiões e o balanceamento de carga global direciona automaticamente o tráfego para a região mais próxima do usuário. Se uma região estiver no limite da capacidade, o balanceador de carga direcionará automaticamente as novas conexões para outra região que tenha capacidade disponível. As conexões de usuário existentes permanecem na região atual.

Vantagens de balanceamento de carga do proxy TCP:

  • Roteamento inteligente: o balanceador de carga pode direcionar solicitações para locais de back-end onde haja capacidade. Por outro lado, um balanceador de carga L3/L4 precisa direcionar para back-ends regionais sem observar a capacidade. O uso do encaminhamento mais inteligente permite o aprovisionamento em N+1 ou N+2, em vez de x*N.
  • Patches de segurança: caso surjam vulnerabilidades na pilha TCP, aplicaremos patches ao balanceador de carga automaticamente para manter suas instâncias seguras.
  • O balanceamento de carga do proxy TCP é compatível com as seguintes portas: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222.

Observações:

  • O balanceamento de carga do proxy TCP é capaz de tratar HTTP, mas isso não é recomendado. Em vez disso, use o balanceamento de carga HTTP para o tráfego HTTP.

Agora descrevemos como o balanceamento de carga do proxy TCP funciona e orientamos você na configuração de um proxy TCP para balancear a carga do tráfego em algumas instâncias.

Exemplo de balanceamento de carga do proxy TCP

Com o proxy TCP na camada de balanceamento de carga global, o tráfego proveniente de uma conexão TCP termina na camada global, depois é enviado por proxy ao grupo de instâncias disponível mais próximo.

Neste exemplo, o tráfego dos usuários em Iowa e Boston termina na camada de balanceamento de carga global e uma conexão separada é estabelecida com a instância de back-end selecionada.

Google Cloud Load Balancing com término de TCP (clique para ampliar)
Google Cloud Load Balancing com término de TCP (clique para ampliar)

Como configurar o balanceamento de carga do proxy TCP

Este exemplo demonstra a configuração do balanceamento de carga do proxy TCP global para um serviço simples existente 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. Observe que muitos navegadores não permitem a porta 110, por isso vamos fazer o nosso teste final com curl.

Vamos configurar o seguinte:

  1. quatro instâncias espalhadas por duas regiões
  2. grupos de instâncias para conter 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 instâncias em grupos e impede que elas excedam o uso configurado
  5. o próprio proxy TCP
  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 o tráfego do balanceador de carga e o verificador de integridade para as instâncias

Depois disso, vamos testar nossa configuração.

Configurar instâncias e grupos de instâncias

Esta seção mostra 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ância, mas esta configuração é mais rápida para os testes iniciais.

Configurar instâncias

Para fins de teste, vamos instalar o Apache em quatro instâncias, duas em cada um dos dois grupos de instâncias. O normal seria você não usar o balanceamento de carga do proxy TCP para o tráfego HTTP, mas é comum usar o Apache por ser fácil de configurar para teste.

Estas instâncias são criadas com uma tag tcp-lb. Essa tag é usada mais tarde pela regra de firewall.

Console


Criar instâncias

  1. Acesse a página "Instâncias de VMs" no Console do Google Cloud Platform.
    Acessar a página "Instâncias de VMs"
  2. Clique em Criar instância.
  3. Defina Nome como ig-us-central1-1.
  4. Defina Zona como us-central1-b.
  5. Clique em Gerenciamento, disco, redes, chaves SSH para mostrar as configurações avançadas.
  6. Em Gerenciamento, clique em Rede e preencha o campo Tags com tcp-lb.
  7. Clique em Gerenciamento e defina o Script de inicialização para
       sudo apt-get update
       sudo apt-get install apache2 -y
       sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
       sudo sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.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
  8. Deixe os valores padrão no restante dos campos.
  9. Clique em Criar.
  10. Crie ig-us-central1-2 com as mesmas configurações, exceto pelo Script de inicialização definido como
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
        sudo sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.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
    .
  11. Crie ig-us-east1-1 com as mesmas configurações, mas a Zona precisa estar definida como us-east1-b e o Script de inicialização como
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
        sudo sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.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
    .
  12. Crie ig-us-east1-2 com as mesmas configurações, mas a Zona precisa estar definida como us-east1-b e o Script de inicialização como
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
        sudo sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.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-8 \
        --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 sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.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-8 \
        --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 sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.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-8 \
        --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 sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.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-8 \
        --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 sed -i '/\<VirtualHost *:80>/c\' /etc/apache2/sites-enabled/000-default.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
    

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 GCP.
    Acessar a página "Grupos de instâncias"
  2. Clique em Criar grupo de instâncias.
  3. Defina Nome como us-ig1.
  4. Defina Zona como us-central1-b.
  5. Clique em Especificar mapeamento de nomes de porta.
    1. Defina Nome da porta como tcp110.
    2. Defina Números de porta como 110.
  6. Em Tipo de grupo, selecione Grupo de instâncias não gerenciadas.
  7. Em Instâncias de VMs, 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
    • Zona: us-east1-b
    • Nome da porta: tcp110
    • Números de porta: 110
    • Instâncias: ig-us-east1-1 e ig-us-east1-2.
  11. Verifique se você tem agora dois grupos de instâncias, cada um com duas instâncias.

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 em cada uma das duas regiões, cada uma com duas instâncias.

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 Platform.
    Acessar a página "Balanceamento de carga"
  2. Clique em Criar balanceador de carga.
  3. Em Balanceamento de carga TCP, clique em Iniciar configuração.
  4. Defina Somente voltado para a Internet ou interno como Da Internet para minhas VMs.
  5. Defina Várias regiões ou região única como Várias regiões.

  6. Em Fim da conexão, selecione Sim (proxy de TCP ou de SSL).

  7. Clique em Continuar.
  8. Defina Nome como my-tcp-lb.
  9. Clique em Configuração de back-end.
  10. O Nome do serviço de back-end é exibido como my-tcp-lb.
  11. Defina Protocolo como TCP.
  12. Em Novo back-end, selecione o grupo de instâncias us-ig1.
  13. Na caixa de diálogo O grupo de instâncias possui uma porta nomeada, clique em Usar o nome da porta já existente.
  14. Não altere as outras configurações.
  15. Clique em Adicionar back-end.
  16. Selecione o grupo de instâncias us-ig2.
  17. Defina Números de portas como 110.
  18. Em Verificação de integridade, selecione Criar verificação de integridade.
    1. Defina o Nome da verificação de integridade como my-tcp-health-check.
    2. Defina Protocolo como TCP.
    3. Defina Porta como 110.
    4. Não altere as outras configurações.
    5. Clique em Salvar e continuar.
  19. Verifique se há uma marca de seleção azul ao lado de Configuração do back-end no Console do Google Cloud Platform. Se não houver, verifique se você concluiu todas as etapas acima.

Configurar serviços de front-end

  1. Clique em Configuração do front-end.
  2. Insira o Nome my-tcp-lb-forwarding-rule.
  3. Defina Protocolo como TCP.
  4. Em IP, selecione Criar endereço IP:
    1. Insira o Nome tcp-lb-static-ip.
    2. Clique em Reservar.
  5. Defina Porta como 110.
  6. Ative o Protocolo de proxy, se quiser.
  7. Clique em Concluir.
  8. Clique em Adicionar IP e porta do front-end.
  9. Insira o Nome my-tcp-lb-ipv6-forwarding-rule.
  10. Selecione um protocolo de TCP.
  11. Defina Versão IP como IPv6.
  12. Em Endereço IP, clique em Criar endereço IP.
    1. Digite um nome de tcp-lb-ipv6-static-ip.
    2. Clique em Reservar.
  13. Defina Porta como 110.
  14. Ative o Protocolo de proxy, se quiser.
  15. Clique em Concluir.
  16. Verifique se há uma marca de seleção azul ao lado de Configuração do front-end no console do Google Cloud Platform. Se não houver, verifique se você concluiu todas as etapas acima.

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 um serviço de back-end

gcloud compute backend-services create my-tcp-lb \
    --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, você pode configurar a comunicação criptografada do balanceador de carga para as instâncias com --protocol SSL.

Adicionar grupos de instâncias 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

Defina o cabeçalho do proxy como PROXY_V1 em vez de none, se quiser usá-lo.

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. Você pode usar 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

Criar uma regra de firewall para o balanceador de carga 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 "Regras de firewall" do Console do Google Cloud Platform.
    Acessar a página "Regras de firewall"
  2. Clique em Criar regra de firewall.
  3. Insira o Nome allow-tcp-lb-and-health.
  4. Selecione a Rede default.
  5. Defina Tags de destino como tcp-lb.
  6. Defina Filtro de origem como IP ranges.
  7. Defina Intervalos de IPs de origem como 130.211.0.0/22 e 35.191.0.0/16.
  8. Defina Portas e protocolos permitidos como tcp:110.
  9. 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

Testar o balanceador de carga

A porta 110 é bloqueada em vários navegadores, então será preciso usar algo como curl para ver o balanceador de carga em ação.

  1. Digite o endereço IPv4 ou IPv6 no campo Endereço do comando curl. Substitua [IP_ADDRESS] pelo endereço IPv4 ou IPv6 que você criou anteriormente.

    curl [IP_ADDRESS]:110

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

O balanceamento de carga do proxy TCP termina conexões TCP do cliente e cria conexões novas para as instâncias. Portanto, as informações originais de porta e IP do cliente não são mantidas por padrão.

Caso queira manter e enviar essas informações para suas instâncias, você precisará ativar o protocolo PROXY (versão 1), em que um cabeçalho adicional contendo as informações de conexão original, incluindo endereço IP de origem, endereço IP de destino e números de portas, é adicionado e enviado à instância como uma parte da solicitação.

Se você definir esse parâmetro para o tráfego de usuários, precisará também defini-lo para verificações de integridade para suprir o tráfego e verificar 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

Veja abaixo um exemplo do protocolo PROXY:

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 estiver verificando a integridade e exibindo o conteúdo na mesma porta, você pode definir a verificação de integridade como --proxy-header para corresponder à configuração do balanceador de carga. Se você estiver usando portas diferentes, poderá definir ou não essa porta para a verificação de integridade, conforme apropriado.

Verificação de integridade

As verificações de integridade determinam quais instâncias podem receber novas conexões. Configure uma verificação de integridade de 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 de HTTP.
  • Se o serviço em execução nas instâncias de back-end for baseado em HTTPS, use uma verificação de integridade de HTTPS.
  • Se o serviço em execução nas instâncias de back-end usar SSL, use uma verificação de integridade de SSL.
  • A menos que você tenha um motivo explícito para utilizar um tipo diferente de verificação de integridade, use uma verificação de integridade de 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.

A seção Criar uma regra de firewall para o balanceador de carga do proxy TCP abrange esta etapa.

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

Se for necessário definir endereços IP externos em determinado momento, siga as instruções descritas nas Perguntas frequentes do Google Compute Engine.

Diminuição da conexão

Você pode ativar 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 saber mais sobre diminuição da conexão, leia a documentação Como ativar diminuição da conexão.

Balanceamento de carga do proxy TCP e firewalls do GCP

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

Como fazer monitoramento

Consulte a seção Monitoramento na página Proxy SSL para informações sobre monitoramento de TCP/SSL.

Como solucionar problemas

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

Como a porta 110 é restrita para muitos navegadores, é preciso usar uma ferramenta como curl para testar o balanceador de carga. Se você não conseguir alcançar suas páginas por meio de curl, esta 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ê está aproveitando as tags da instância, verifique se a tag está listada como em TARGET_TAGS na regra de firewall e verifique se todas as suas instâncias têm a tag. Neste exemplo, as instâncias sã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 temporariamente uma regra de firewall que permita acessar suas instâncias individualmente e depois tente carregar uma página a partir de uma instância específica.

  1. Abra o firewall para permitir o tráfego de qualquer origem para as instâncias marcadas.

    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.

    
    
    

    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. Em seguida, acesse uma ou mais das suas instâncias diretamente do navegador.

    
    
    
  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.

    
    
    

    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/110
    - 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”.

    
    
    

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

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine