Configurar um balanceador de carga de rede de proxy interno regional com back-ends de NEG por zona

O balanceador de carga de proxy TCP regional interno é um balanceador de carga de Camada 4 regional e baseado em proxy. Com ele, é possível executar e escalonar o tráfego do serviço TCP atrás de um endereço IP interno acessível apenas a clientes na mesma rede VPC ou aos clientes conectados à rede VPC.

Este guia contém instruções para configurar um balanceador de carga de rede de proxy interno regional com um back-end de grupo de endpoints de rede (NEG, na sigla em inglês). Antes de começar:

Visão geral

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 REGION_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 o seguinte:

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

O balanceador de carga de rede do proxy interno regional é regional. Todos os componentes do balanceador de carga (grupos 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 componentes do balanceador de carga, sub-redes e redes Administrador de rede
Adicionar e remover regras de firewall Administrador de segurança
Criar instâncias Administrador da instância da computação

Para mais informações, consulte estes guias:

Configurar a rede e as sub-redes

Você precisa de uma rede VPC com duas sub-redes: uma para os back-ends do balanceador de carga e a outra para os proxies do balanceador de carga. Os balanceadores de carga de rede de proxy interno regional são regionais. 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 REGION_A usa 10.1.2.0/24 como o intervalo de IP primário.

  • Sub-rede para proxies: uma sub-rede chamada proxy-only-subnet na região REGION_A usa 10.129.0.0/23 como o intervalo de IP primário.

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-redes:

    • Defina o Modo de criação de sub-rede como Personalizado.
    • 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
    • Clique em Concluído.
  5. Clique em Criar.

gcloud

  1. Crie a rede VPC personalizada com o comando gcloud compute networks create:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Crie uma sub-rede na rede lb-network na região REGION_A com 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 regionais baseados no Envoy na região REGION_A da rede VPC lb-network.

Console

Se você estiver usando o Google Cloud console, poderá 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, digite 10.129.0.0/23.

  8. Clique em Adicionar.

gcloud

Crie a sub-rede somente proxy com 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 Google Cloud submetidas a balanceamento de carga, que permite o tráfego do balanceador de carga e dos sistemas de verificação de integridade doGoogle 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 do sistema do qual você inicia sessões SSH. Neste exemplo, usamos a tag allow-ssh de destino para identificar as VMs a que isso se aplicará.
  • fw-allow-proxy-only-subnet: cria 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: 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 Google Cloud , acesse a página Políticas de firewall.

    Acesse as políticas de firewall

  2. Clique em Criar regra de firewall.

    1. Informe um Nome de fw-allow-health-check.
    2. Em Rede, selecione lb-network.
    3. Em Destinos, selecione Tags de destino especificadas.
    4. Preencha o campo Tags de destino com allow-health-check.
    5. Defina Filtro de origem como Intervalos IPv4.
    6. Defina Intervalos IPv4 de origem como 130.211.0.0/22 e 35.191.0.0/16.
    7. Em Protocolos e portas, selecione Portas e protocolos especificados.
    8. Marque a caixa de seleção TCP e insira 80 como números de porta.
    9. Clique em Criar.
  3. Clique em Criar regra de firewall novamente para criar a regra e permitir conexões SSH de entrada:

    • Name: fw-allow-ssh
    • Rede: lb-network
    • Prioridade: 1000
    • Direção do tráfego: entrada
    • Ação se houver 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 e digite: tcp:22
  4. Clique em Criar.

  5. Clique em Criar regra de firewall novamente para criar a regra que permite conexões de entrada da sub-rede somente proxy para os back-ends do Google Cloud:

    • Nome: fw-allow-proxy-only-subnet
    • Rede: lb-network
    • Prioridade: 1000
    • Direção do tráfego: entrada
    • Ação se houver 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 e digite: tcp:80
  6. 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. Quando você omite source-ranges, oGoogle Cloud interpreta a regra como sendo 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

Para reservar um endereço IP interno estático para o balanceador de carga, consulte Reservar um novo endereço IPv4 ou IPv6 interno estático.

Configurar o NEG zonal

Configure um NEG zonal com endpoints do tipo GCE_VM_IP_PORT na região REGION_A. Primeiro, crie as VMs. 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 VM.

    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. Para a Zona, consulte ZONE_A1.

  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 a seguir para criar mais três VMs, usando as seguintes combinações de nome e zona:

    • Nome: vm-a2, zona: ZONE_A1
    • Nome: vm-c1, zona: ZONE_A2
    • Nome: vm-c2, zona: ZONE_A2

gcloud

Crie as VMs executando o comando a seguir duas vezes usando estas combinações para VM_NAME e ZONE. O conteúdo do script é idêntico para as duas VMs.

  • VM_NAME: vm-a1 e ZONE: ZONE_A1
  • VM_NAME: vm-a2 e ZONE: ZONE_A1
  • VM_NAME: vm-c1 e ZONE: ZONE_A2
  • VM_NAME: vm-c2 e ZONE: ZONE_A2

    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

Para criar um grupo de endpoints de rede zonal:

  1. No console 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_A1.

  8. Insira a Porta padrão: 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-c
    • Zona: ZONE_A2

Adicione endpoints aos NEGs zonais:

  1. No console 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 criado na etapa anterior (por exemplo, zonal-neg-a). Você verá a página Detalhes do grupo de endpoints de rede.

  3. Na seção Endpoints da rede neste grupo, clique em Adicionar endpoint da rede. Você verá a página Adicionar endpoint de rede.

  4. Selecione uma Instância de VM (por exemplo, vm-a1). O nome, a zona e a sub-rede da VM são exibidos na seção Interface de rede.

    1. Insira o endereço IP do novo endpoint da rede. Clique em Verificar os endereços IP primários e o intervalo de IP do alias em nic0 para o endereço IP.
    2. Em Tipo de porta, selecione Padrão. O endpoint usa a porta 80 padrão 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.
  5. Clique novamente em Adicionar endpoint de rede. Selecione a segunda instância de VM, vm-a2, e repita essas etapas para adicionar os endpoints a zonal-neg-a.

  6. Repita todas as etapas nesta seção para adicionar endpoints de vm-c1 e vm-c2 a zonal-neg-c.

gcloud

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

    gcloud compute network-endpoint-groups create zonal-neg-a \
       --network-endpoint-type=GCE_VM_IP_PORT \
       --zone=ZONE_A1 \
       --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_A1 \
        --add-endpoint='instance=vm-a1,port=80' \
        --add-endpoint='instance=vm-a2,port=80'
    
  3. Crie um NEG zonal na zona ZONE_A2 com endpoints GCE_VM_IP_PORT.

    gcloud compute network-endpoint-groups create zonal-neg-c \
        --network-endpoint-type=GCE_VM_IP_PORT \
        --zone=ZONE_A2 \
        --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-c \
        --zone=ZONE_A2 \
        --add-endpoint='instance=vm-c1,port=80' \
        --add-endpoint='instance=vm-c2,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 Interno e clique em Próxima.
  6. Em Implantação entre regiões ou 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-int-tcp-lb.
  2. Em Região, selecione REGION_A.
  3. Em Rede, selecione lb-network.

Reservar uma sub-rede somente proxy

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

Configuração de back-end

  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. Na lista Verificação de integridade, clique em Criar verificação de integridade e insira as seguintes informações:
    1. Nome: tcp-health-check
    2. Protocolo: TCP
    3. Porta: 80
  5. Clique em Criar.
  6. 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.
  7. Configure o segundo back-end:

    1. Clique em Adicionar back-end.
    2. Em Novo back-end, selecione o grupo de instâncias zonal-neg-c.
    3. Mantenha os valores padrão restantes e clique em Concluído.
  8. No console 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.

Configuração de front-end

  1. Clique em Configuração de front-end.
  2. Em Nome, insira int-tcp-forwarding-rule.
  3. Em Sub-rede, selecione backend-subnet.
  4. Em Endereço IP, selecione int-tcp-ip-address.
  5. Em Número da porta, digite 9090. A regra de encaminhamento encaminha pacotes com uma porta de destino correspondente.
  6. Neste exemplo, não ative o Protocolo de proxy, porque ele não funciona com o software servidor HTTP Apache. Para mais informações, consulte Protocolo de proxy.
  7. Clique em Concluído.
  8. No console 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

  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 internal-tcp-proxy-bs \
       --load-balancing-scheme=INTERNAL_MANAGED \
       --protocol=TCP \
       --region=REGION_A \
       --health-checks=tcp-health-check \
       --health-checks-region=REGION_A
    
  3. Adicione o NEG zonal na zona ZONE_A1 ao serviço de back-end.

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

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

    gcloud compute target-tcp-proxies create int-tcp-target-proxy \
       --backend-service=internal-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 int-tcp-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=lb-network \
      --subnet=backend-subnet \
      --address=int-tcp-ip-address \
      --ports=9090 \
      --region=REGION_A \
      --target-tcp-proxy=int-tcp-target-proxy \
      --target-tcp-proxy-region=REGION_A
    

Testar o balanceador de carga

Para testar o balanceador de carga, crie uma VM cliente na mesma região que o balanceador de carga. Em seguida, envie o tráfego do cliente para o balanceador de carga.

Criar uma VM cliente

Crie uma VM cliente (client-vm) na mesma região do balanceador de carga.

Console

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

    Acessar instâncias de VM

  2. Clique em Criar instância.

  3. Defina o Nome como client-vm.

  4. Defina Zona como ZONE_A1.

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

  6. Clique em Rede e configure os seguintes campos:

    1. Em Tags de rede, insira allow-ssh.
    2. Em Interfaces de rede, selecione o seguinte:
      • Rede: lb-network
      • Sub-rede: backend-subnet
  7. Clique em Criar.

gcloud

A VM do cliente precisa estar na mesma rede e região VPC que o balanceador de carga. Ele não precisa estar na mesma sub-rede ou zona. O cliente usa a mesma sub-rede que as VMs de back-end.

gcloud compute instances create client-vm \
    --zone=ZONE_A1 \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=backend-subnet

Enviar tráfego ao 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. Use o SSH para se conectar à instância do cliente.

    gcloud compute ssh client-vm \
      --zone=ZONE_A1
    
  2. Verifique se o balanceador de carga está disponibilizando nomes de host de back-end conforme o esperado.

    1. Use o comando compute addresses describe para ver o endereço IP do balanceador de carga:

      gcloud compute addresses describe int-tcp-ip-address \
        --region=REGION_A
      

      Anote o endereço IP.

    2. Enviar tráfego ao balanceador de carga Substitua IP_ADDRESS pelo endereço IP do balanceador de carga:

      curl IP_ADDRESS:9090
      

A seguir