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 do Compute

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 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, digite 10.129.0.0/23.

  8. Clique em Add.

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

    • Name: 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. 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

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

  6. Na seção Disco de inicialização, verifique se o sistema operacional Debian e a versão 10 (buster) estão selecionados 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-10 \
        --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 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_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 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 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. 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-c.
    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.

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

    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-10 \
    --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