Configurar um balanceador de carga do proxy TCP regional interno com back-ends NEG zonais

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

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 proxy TCP regional interno com um back-end de grupo de endpoints de rede (NEG, na sigla em inglês) zonal. 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 us-west1. 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:

Configuração de exemplo do balanceador de carga de proxy TCP regional interno com back-ends NEG zonais.
Configuração de exemplo do balanceador de carga de proxy TCP regional interno com back-ends NEG zonais.

O balanceador de carga do proxy TCP interno regional é um balanceador de carga 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. Um balanceador de carga de proxy TCP regional interno é 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 us-west1 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 us-west1 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:
      • Nome: backend-subnet
      • Região: us-west1
      • 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 us-west1 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=us-west1
    

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 us-west1 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 us-west1.
  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=us-west1 \
    --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, abra a página Firewalls.
    Acesse "Firewalls"
  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 ao lado de tcp e digite os números de porta, 80.
    9. Clique em Criar.
  3. Clique em Criar regra de firewall novamente para criar a regra que permite conexões SSH de entrada:
    • Nome: 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

Console

É possível reservar um endereço IP interno usando o console do Google Cloud.

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

    Acessar redes VPC

  2. Clique na rede usada para configurar a conectividade híbrida entre os ambientes.
  3. Clique em Endereços IP internos estáticos e em Reservar endereço estático.
  4. Em Nome, insira int-tcp-ip-address.
  5. Em Sub-rede, selecione backend-subnet.
  6. Se quiser especificar o endereço IP a ser reservado, em Endereço IP estático , selecioneDeixe-me escolher e preencha com um Endereço IP personalizado. Caso contrário, o sistema atribui automaticamente um endereço IP na sub-rede para você.
  7. Se você quiser usar esse endereço IP com várias regras de encaminhamento, em Objetivo, escolha Compartilhado.
  8. Clique em Reservar para concluir o processo.

gcloud

Reserve um endereço IP interno regional para a regra de encaminhamento do balanceador de carga.

gcloud compute addresses create int-tcp-ip-address \
    --region=us-west1 \
    --subnet=backend-subnet \
    --purpose=SHARED_LOADBALANCER_VIP

Configurar o NEG zonal

Configure um NEG zonal com endpoints do tipo GCE_VM_IP_PORT na região us-west1. 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 us-west1.
  5. Para a Zona, consulte us-west1-a.
  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
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    sudo echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    
  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: us-west1-a
    • Nome: vm-c1, zona: us-west1-c
    • Nome: vm-c2, zona: us-west1-c

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: us-west1-a
  • VM_NAME: vm-a2 e ZONE: us-west1-a
  • VM_NAME: vm-c1 e ZONE: us-west1-c
  • VM_NAME: vm-c2 e ZONE: us-west1-c

    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
         vm_hostname="$(curl -H "Metadata-Flavor:Google" \
         http://169.254.169.254/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. Acesse a página "Grupos de endpoints da rede" no Google Cloud Console.
    Acessar a página "Grupos de endpoints de 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 us-west1-a.
  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: us-west1-c

Adicione endpoints aos NEGs zonais:

  1. Acesse a página "Grupos de endpoints da rede" no Google Cloud Console.
    Acessar os grupos de endpoints de 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 us-west1-a com endpoints GCE_VM_IP_PORT.

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

    gcloud compute network-endpoint-groups create zonal-neg-c \
        --network-endpoint-type=GCE_VM_IP_PORT \
        --zone=us-west1-c \
        --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=us-west1-c \
        --add-endpoint='instance=vm-c1,port=80' \
        --add-endpoint='instance=vm-c2,port=80'
    

Configurar o balanceador de carga

Console

Inicie a configuração

  1. Acesse a página Balanceamento de carga no Console do Google Cloud.
    Acessar a página "Balanceamento de carga"
  2. Clique em Criar balanceador de carga.
  3. Em Balanceamento de carga TCP, clique em Iniciar configuração.
  4. Em Para a Internet ou somente interno, selecione Apenas entre minhas VMs.
  5. Em Várias regiões ou região única, selecione Somente região única.
  6. Em Tipo de balanceador de carga, selecione Proxy.
  7. Clique em Continuar.
  8. Em Nome, insira my-int-tcp-lb.
  9. Em Região, selecione us-west1.
  10. 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=us-west1 \
        --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=us-west1 \
       --health-checks=tcp-health-check \
       --health-checks-region=us-west1
    
  3. Adicione o NEG zonal na zona us-west1-a 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=us-west1-a \
       --balancing-mode=CONNECTION \
       --max-connections-per-endpoint=50 \
       --region=us-west1
    
  4. Adicione o NEG zonal na zona us-west1-c 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=us-west1-c \
       --balancing-mode=CONNECTION \
       --max-connections-per-endpoint=50 \
       --region=us-west1
    
  5. Crie o proxy TCP de destino.

    gcloud compute target-tcp-proxies create int-tcp-target-proxy \
       --backend-service=internal-tcp-proxy-bs \
       --region=us-west1
    
  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=us-west1 \
      --target-tcp-proxy=int-tcp-target-proxy \
      --target-tcp-proxy-region=us-west1
    

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 us-west1-a.

  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=us-west1-a \
    --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. Conecte-se via SSH à instância do cliente.

    gcloud compute ssh client-vm \
      --zone=us-west1-a
    
  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=us-west1
      

      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