Configurar um balanceador de carga de rede de proxy externo regional com back-ends de NEG zonal

Um balanceador de carga de rede de proxy regional externo é um balanceador de carga regional de camada 4 baseado em proxy que permite executar e escalonar o tráfego do serviço TCP em uma única região atrás de um endereço IP regional externo. Esses balanceadores de carga distribuem o tráfego TCP externo da Internet para back-ends na mesma região.

Este guia contém instruções para configurar um balanceador de carga de rede de proxy externo regional com um back-end de grupo de endpoints de rede (NEG) zonal.

Antes de começar, leia os documentos a seguir:

Neste exemplo, vamos usar o balanceador de carga para distribuir o tráfego TCP entre VMs de back-end em dois NEGs zonais na região A. Para o propósito deste exemplo, o serviço é um conjunto de servidores Apache configurados para responder na porta 80.

Neste exemplo, você configura a implantação mostrada no diagrama a seguir.

Exemplo de configuração do balanceador de carga de rede de proxy externo regional com back-ends de NEG zonal.
Exemplo de configuração de balanceador de carga de rede de proxy externo regional com back-ends de NEG zonal.

Esse é um balanceador de carga regional. Todos os componentes do balanceador de carga (grupo de instâncias de back-end, serviço de back-end, proxy de destino e regra de encaminhamento) precisam estar na mesma regiã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 do Compute (roles/compute.networkAdmin)
Adicionar e remover regras de firewall Administrador de segurança do Compute (roles/compute.securityAdmin)
Criar instâncias Administrador da instância do Compute (roles/compute.instanceAdmin)

Para mais informações, consulte estes guias:

Configurar a rede e as sub-redes

Você precisa de uma rede VPC compartilhada com duas sub-redes: uma para os back-ends do balanceador de carga e outra para os proxies do balanceador de carga. Esse é um balanceador de carga regional. O tráfego na rede VPC será direcionado ao balanceador de carga se a origem do tráfego estiver em uma sub-rede na mesma região que o balanceador de carga.

Neste exemplo, usamos a seguinte rede VPC, região e sub-redes:

  • Rede: uma rede VPC de modo personalizado chamada lb-network

  • Sub-rede para back-ends: uma sub-rede chamada backend-subnet na região A que usa 10.1.2.0/24 como o intervalo de endereços IP principal

  • Sub-rede para proxies: uma sub-rede chamada proxy-only-subnet na região B que usa 10.129.0.0/23 como o intervalo de endereços IP principal

Como configurar a rede e a sub-rede para back-ends

Console

  1. No Console do Google Cloud, acesse a página Redes VPC.

    Acessar redes VPC

  2. Clique em Criar rede VPC.

  3. Em Nome, insira lb-network.

  4. Na seção Sub-rede, faça o seguinte:

    1. Defina o Modo de criação de sub-rede como Personalizado.
    2. Na seção Nova sub-rede, insira as informações a seguir:
      • Name: backend-subnet
      • Região: REGION_A
      • Intervalo de endereços IP: 10.1.2.0/24
    3. Clique em Concluído.
  5. Clique em Criar.

gcloud

  1. Para criar a rede VPC personalizada, use o comando gcloud compute networks create:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Para criar uma sub-rede na rede lb-network na região REGION_A, use o comando gcloud compute networks subnets create:

    gcloud compute networks subnets create backend-subnet \
       --network=lb-network \
       --range=10.1.2.0/24 \
       --region=REGION_A
    

Criar a sub-rede somente proxy

Uma sub-rede somente proxy fornece um conjunto de endereços IP que o Google usa para executar proxies Envoy em seu nome. Os proxies encerram as conexões do cliente e criam novas conexões com os back-ends.

Essa sub-rede somente proxy é usada por todos os balanceadores de carga baseados no Envoy na Região A da rede VPC lb-network.

Console

Se você estiver usando o console do Google Cloud, é possível esperar e criar a sub-rede somente proxy depois na página Balanceamento de carga.

Se você quiser criar a sub-rede somente proxy agora, siga estas etapas:

  1. No Console do Google Cloud, acesse a página Redes VPC.

    Acessar redes VPC

  2. Clique no nome da rede VPC compartilhada: lb-network.

  3. Clique em Add subnet.

  4. Em Nome, insira proxy-only-subnet.

  5. Em Região, selecione REGION_A.

  6. Defina Finalidade como Proxy gerenciado regional.

  7. Em Intervalo de endereços IP, insira 10.129.0.0/23.

  8. Clique em Adicionar.

gcloud

Para criar a sub-rede somente proxy, use o comando gcloud compute networks subnets create:

gcloud compute networks subnets create proxy-only-subnet \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=REGION_A \
    --network=lb-network \
    --range=10.129.0.0/23

Crie regras de firewall

Neste exemplo, você cria as regras de firewall a seguir:

  • fw-allow-health-check: uma regra de entrada, aplicável às instâncias do Google Cloud submetidas a balanceamento de carga, que permite o tráfego do balanceador de carga e dos sistemas de verificação de integridade do Google Cloud (130.211.0.0/22 e 35.191.0.0/16). Este exemplo usa a tag de destino allow-health-check para identificar as VMs de back-end às quais ela deve ser aplicada.
  • fw-allow-ssh: uma regra de entrada que permite a conectividade SSH de entrada na porta TCP 22 de qualquer endereço. Escolha um intervalo de IP de origem mais restritivo para esta regra. Por exemplo, é possível especificar apenas os intervalos de IP dos sistemas do qual você inicia sessões SSH. Neste exemplo, usamos a tag de destino allow-ssh para identificar as VMs às quais ele deve se aplicar.
  • fw-allow-proxy-only-subnet. Uma regra de firewall de entrada allow para a sub-rede somente proxy que permite que o balanceador de carga se comunique com instâncias de back-end na porta TCP 80. Neste exemplo, usamos a tag allow-proxy-only-subnet de destino para identificar as VMs de back-end a que isso se aplicará.

Console

  1. No Console do Google Cloud, acesse a página políticas de Firewall.

    Acesse as políticas de firewall

  2. Clique em Criar regra de firewall e preencha os seguintes campos:

    • Name: fw-allow-health-check
    • Rede: lb-network
    • Destinos: tags de destino especificadas
    • Tags de meta: allow-health-check
    • Filtro de origem: intervalos IPv4
    • Intervalos IPv4 de origem: 130.211.0.0/22 e 35.191.0.0/16
    • Protocolos e portas:
      • Escolha Protocolos e portas especificados.
      • Marque a caixa de seleção TCP e insira 80 como o número da porta.
  3. Clique em Criar.

  4. Clique em Criar regra de firewall pela segunda vez para criar a regra que permite conexões SSH de entrada:

    • Name: fw-allow-ssh
    • Rede: lb-network
    • Prioridade: 1000
    • Direção do tráfego: entrada
    • Ação na correspondência: permitir
    • Destinos: tags de destino especificadas
    • Tags de meta: allow-ssh
    • Filtro de origem: intervalos IPv4
    • Intervalos IPv4 de origem: 0.0.0.0/0
    • Protocolos e portas:
      • Escolha Protocolos e portas especificados.
      • Marque a caixa de seleção TCP e insira 22 como o número da porta.
  5. Clique em Criar.

  6. Clique em Criar regra de firewall pela terceira vez para criar uma regra que permita conexões de entrada da sub-rede somente proxy para os back-ends do Google Cloud:

    • Name: fw-allow-proxy-only-subnet
    • Rede: lb-network
    • Prioridade: 1000
    • Direção do tráfego: entrada
    • Ação na correspondência: permitir
    • Destinos: tags de destino especificadas
    • Tags de meta: allow-proxy-only-subnet
    • Filtro de origem: intervalos IPv4
    • Intervalos IPv4 de origem: 10.129.0.0/23
    • Protocolos e portas:
      • Escolha Protocolos e portas especificados.
      • Marque a caixa de seleção TCP e insira 80 como o número da porta.
  7. Clique em Criar.

gcloud

  1. Crie a regra fw-allow-health-check para permitir que as verificações de integridade do Google Cloud alcancem as instâncias de back-end na porta TCP 80:

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp:80
    
  2. Crie a regra de firewall fw-allow-ssh que permita a conectividade SSH para VMs com a tag de rede allow-ssh. Se você omitir source-ranges, o Google Cloud interpretará que a regra autoriza a conexão proveniente de qualquer origem.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. Crie uma regra de permissão de entrada de firewall para a sub-rede somente proxy para permitir que o balanceador de carga se comunique com instâncias de back-end na porta TCP 80:

    gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-proxy-only-subnet \
        --source-ranges=10.129.0.0/23 \
        --rules=tcp:80
    

Reserve o endereço IP do balanceador de carga

Console

  1. No console do Google Cloud, acesse a página Reservar um endereço estático.

    Acessar "Reservar um endereço estático"

  2. Escolha um nome para o novo endereço.

  3. Em Nível de serviço de rede, selecione Padrão.

  4. Em Versão IP, selecione IPv4. Os endereços IPv6 não são aceitos.

  5. Em Tipo, selecione Regional.

  6. Em Região, selecione REGION_A.

  7. Deixe a opção Anexado a definida como Nenhum. Depois de criar o balanceador de carga, esse endereço IP será anexado à regra de encaminhamento do balanceador de carga.

  8. Clique em Reservar para reservar o IP.

gcloud

  1. Para reservar um endereço IP externo estático, use o comando gcloud compute addresses create:

    gcloud compute addresses create ADDRESS_NAME  \
       --region=REGION_A \
       --network-tier=STANDARD
    

    Substitua ADDRESS_NAME pelo nome que você quer chamar com esse endereço.

  2. Para ver o resultado, use o comando gcloud compute addresses describe:

    gcloud compute addresses describe ADDRESS_NAME
    

Configurar o NEG zonal

Configure um NEG zonal com endpoints do tipo GCE_VM_IP_PORT na região A. Primeiro, crie as VMs e, em seguida, crie um NEG zonal e adicione os endpoints de rede das VMs ao NEG.

Criar VMs

Console

  1. No console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar instâncias de VM

  2. Clique em Criar instância.

  3. Defina o Nome como vm-a1.

  4. Em Região, selecione REGION_A.

  5. Em Zona, selecione ZONE_A.

  6. Na seção Disco de inicialização, verifique se Debian GNU/Linux 12 (bookworm) está selecionado para as opções de disco de inicialização. Clique em Escolher para alterar a imagem se necessário.

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

  8. Clique em Rede e configure os seguintes campos:

    1. Em Tags de rede, insira allow-ssh, allow-health-check e allow-proxy-only-subnet.
    2. Em Interfaces de rede, selecione o seguinte:
      • Rede: lb-network
      • Sub-rede: backend-subnet
  9. Clique em Gerenciamento. Insira o script a seguir no campo Script de inicialização:

    #! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2
    
  10. Clique em Criar.

  11. Repita as etapas anteriores para criar mais três VMs. Use as combinações de nome e zona a seguir:

    • Nome: vm-a2 | zona: ZONE_A
    • Nome: vm-b1 | zona: ZONE_B
    • Nome: vm-b2 | zona: ZONE_B

gcloud

Para criar as VMs, use o comando gcloud compute instances create duas vezes. Use as combinações a seguir para VM_NAME e ZONE. O conteúdo do script é idêntico para as duas VMs:

  • VM_NAME: vm-a1 e ZONE: ZONE_A
  • VM_NAME: vm-a2 e ZONE: ZONE_A
  • VM_NAME: vm-b1 e ZONE: ZONE_B
  • VM_NAME: vm-b2 e ZONE: ZONE_B
 gcloud compute instances create VM_NAME \
     --zone=ZONE \
     --image-family=debian-12 \
     --image-project=debian-cloud \
     --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \
     --subnet=backend-subnet \
     --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://metadata.google.internal/computeMetadata/v1/instance/name)"
       echo "Page served from: $vm_hostname" | \
       tee /var/www/html/index.html
       systemctl restart apache2'

Criar os NEGs zonais

Console

Criar um grupo de endpoints de rede zonais

  1. No console do Google Cloud, acesse a página Grupos de endpoints da rede.

    Acessar grupos de endpoints da rede

  2. Clique em Criar grupo de endpoints de rede.

  3. Em Nome, insira zonal-neg-a.

  4. Em Tipo de grupo de endpoints de rede, selecione Grupo de endpoints de rede (Internet).

  5. Em Rede, selecione lb-network.

  6. Em Sub-rede, selecione backend-subnet.

  7. Em Zona, selecione ZONE_A.

  8. Em Porta padrão, insira 80.

  9. Clique em Criar.

  10. Repita todas as etapas nesta seção para criar um segundo NEG zonal com as seguintes alterações nas configurações:

    • Name: zonal-neg-b
    • Zona: ZONE_B

Adicione endpoints aos NEGs zonais

  1. No console do Google Cloud, acesse a página Grupos de endpoints da rede.

    Acessar grupos de endpoints da rede

  2. Clique no nome do grupo de endpoints da rede que você criou na etapa anterior (por exemplo, zonal-neg-a).

  3. Na página Detalhes do grupo de endpoints da rede, na seção Endpoints da rede neste grupo, clique em Adicionar endpoint da rede.

  4. Selecione uma instância de VM (por exemplo, vm-a1).

  5. Na seção Interface de rede, são exibidos o nome, a zona e a sub-rede da VM.

    1. Em Endereço IP, digite o endereço IP do novo endpoint da rede. Para conseguir o endereço IP, clique em Verificar os endereços IP principais e o intervalo de IP do alias em nic0.
    2. Em Tipo de porta, selecione Padrão. O endpoint usa a porta padrão 80 para todos os endpoints no grupo de endpoints da rede. Isso é suficiente para nosso exemplo, porque o servidor Apache está atendendo solicitações na porta 80.
    3. Clique em Criar.
  6. Clique em Adicionar endpoint da rede. Selecione a segunda instância de VM, vm-a2, e repita as etapas anteriores para adicionar os endpoints a zonal-neg-a.

  7. Repita todas as etapas nesta seção para adicionar endpoints de vm-b1 e vm-b2 a zonal-neg-b.

gcloud

  1. Crie um NEG zonal na zona ZONE_A com endpoints GCE_VM_IP_PORT.

    gcloud compute network-endpoint-groups create zonal-neg-a \
        --network-endpoint-type=GCE_VM_IP_PORT \
        --zone=ZONE_A \
        --network=lb-network \
        --subnet=backend-subnet
    

    Especifique o --default-port ao criar o NEG ou especifique um número de porta para cada endpoint, conforme mostrado na próxima etapa.

  2. Adicione endpoints ao NEG zonal:

    gcloud compute network-endpoint-groups update zonal-neg-a \
        --zone=ZONE_A \
        --add-endpoint='instance=vm-a1,port=80' \
        --add-endpoint='instance=vm-a2,port=80'
    
  3. Crie um NEG zonal na zona ZONE_B com endpoints GCE_VM_IP_PORT.

    gcloud compute network-endpoint-groups create zonal-neg-b \
        --network-endpoint-type=GCE_VM_IP_PORT \
        --zone=ZONE_B \
        --network=lb-network \
        --subnet=backend-subnet
    

    Especifique o --default-port ao criar o NEG ou especifique um número de porta para cada endpoint, conforme mostrado na próxima etapa.

  4. Adicione endpoints ao NEG zonal:

    gcloud compute network-endpoint-groups update zonal-neg-b \
        --zone=ZONE_B \
        --add-endpoint='instance=vm-b1,port=80' \
        --add-endpoint='instance=vm-b2,port=80'
    

Configurar o balanceador de carga

Console

Iniciar a configuração

  1. No console do Google Cloud, acesse a página Balanceamento de carga.

    Acessar o "Balanceamento de carga"

  2. Clique em Criar balanceador de carga.
  3. Em Tipo de balanceador de carga, selecione Balanceador de carga de rede (TCP/UDP/SSL) e clique em Próxima.
  4. Em Proxy ou passagem, selecione Balanceador de carga de proxy e clique em Próxima.
  5. Em Voltado ao público ou interno, selecione Voltado ao público (externo) e clique em Próxima.
  6. Em Implantação global ou de região única, selecione Melhor para cargas de trabalho regionais e clique em Próxima.
  7. Clique em Configurar.

Configuração básica

  1. Em Nome, insira my-ext-tcp-lb.
  2. Em Região, selecione REGION_A.
  3. Em Rede, selecione lb-network.

Reservar uma sub-rede somente proxy

  1. Clique em Reservar sub-rede.
  2. Em Nome, insira proxy-only-subnet.
  3. Em Intervalo de endereços IP, insira 10.129.0.0/23.
  4. Clique em Adicionar.

Configurar os back-ends

  1. Clique em Configuração de back-end.
  2. Para o tipo de back-end, selecione Grupo de endpoints da rede na Internet.
  3. Em Protocol, selecione TCP.
  4. Configure o primeiro back-end:
    1. Em Novo back-end, selecione o NEG zonal zonal-neg-a.
    2. Mantenha os valores padrão restantes e clique em Concluído.
  5. Configure o segundo back-end:
    1. Clique em Adicionar back-end.
    2. Em Novo back-end, selecione o grupo de instâncias zonal-neg-b.
    3. Mantenha os valores padrão restantes e clique em Concluído.
  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 tcp-health-check
    3. Em Protocol, selecione TCP.
    4. Em Porta, insira 80.
  7. Mantenha os valores padrão restantes e clique em Salvar.
  8. No Console do Google Cloud, verifique se há uma marca de seleção ao lado de Configuração do back-end. Se não houver, verifique se você concluiu todas as etapas.

Configure o front-end

  1. Clique em Configuração de front-end.
  2. Em Nome, insira ext-tcp-forwarding-rule.
  3. Em Sub-rede, selecione backend-subnet.
  4. Em Endereço IP, selecione ext-tcp-ip-address.
  5. Em Número da porta, digite 9090. A regra de encaminhamento encaminha pacotes com uma porta de destino correspondente.
  6. Em Protocolo de proxy, selecione Desativado porque o protocolo PROXY não funciona com o software Apache HTTP Server. Para mais informações, consulte Protocolo de proxy.
  7. Clique em Concluído.
  8. No Console do Google Cloud, verifique se há uma marca de seleção ao lado de Configuração do 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

  1. Crie uma verificação de integridade para os back-ends:

    gcloud compute health-checks create tcp tcp-health-check \
        --region=REGION_A \
        --use-serving-port
    
  2. Crie um serviço de back-end:

    gcloud compute backend-services create external-tcp-proxy-bs \
       --load-balancing-scheme=EXTERNAL_MANAGED \
       --protocol=TCP \
       --region=REGION_A \
       --health-checks=tcp-health-check \
       --health-checks-region=REGION_A
    
  3. Adicione o NEG zonal na zona ZONE_A ao serviço de back-end:

    gcloud compute backend-services add-backend external-tcp-proxy-bs \
       --network-endpoint-group=zonal-neg-a \
       --network-endpoint-group-zone=ZONE_A \
       --balancing-mode=CONNECTION \
       --max-connections-per-endpoint=50 \
       --region=REGION_A
    
  4. Adicione o NEG zonal na zona ZONE_B ao serviço de back-end:

    gcloud compute backend-services add-backend external-tcp-proxy-bs \
       --network-endpoint-group=zonal-neg-b \
       --network-endpoint-group-zone=ZONE_B \
       --balancing-mode=CONNECTION \
       --max-connections-per-endpoint=50 \
       --region=REGION_A
    
  5. Crie o proxy TCP de destino:

    gcloud compute target-tcp-proxies create ext-tcp-target-proxy \
       --backend-service=external-tcp-proxy-bs \
       --region=REGION_A
    
  6. Crie a regra de encaminhamento. Para --ports, especifique um único número de porta de 1-65535. Este exemplo usa a porta 9090. A regra de encaminhamento encaminha pacotes com uma porta de destino correspondente.

    gcloud compute forwarding-rules create ext-tcp-forwarding-rule \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --network=lb-network \
      --subnet=backend-subnet \
      --address=ext-tcp-ip-address \
      --ports=9090 \
      --region=REGION_A \
      --target-tcp-proxy=ext-tcp-target-proxy \
      --target-tcp-proxy-region=REGION_A
    

Testar o balanceador de carga

Agora que você configurou o balanceador de carga, é possível testar o envio de tráfego para o endereço IP dele.

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

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

    gcloud compute addresses describe ADDRESS_NAME
    
  2. Envie tráfego para o balanceador de carga executando o comando a seguir. Substitua LB_IP_ADDRESS pelo endereço IPv4 do balanceador de carga:

    curl -m1 LB_IP_ADDRESS:9090
    

A seguir