Configurar um balanceador de carga de rede de proxy externo regional com back-ends de grupos de instâncias de VM

Um balanceador de carga de rede de proxy externo regional é 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 instâncias gerenciadas (MIG, na sigla em inglês).

Antes de começar, leia a Visão geral do balanceador de carga de rede de proxy externo.

Neste exemplo, usaremos o balanceador de carga para distribuir o tráfego TCP entre as VMs de back-end em dois grupos gerenciados de instâncias zonais na região A. Para o propósito deste exemplo, o serviço é um conjunto de servidores Apache configurados para responder na porta 110. Muitos navegadores não permitem a porta 110, portanto, a seção de teste usa curl.

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 com back-ends de grupo de instâncias.
Exemplo de configuração do balanceador de carga de rede de proxy externo com back-ends de grupos de instâncias

Um balanceador de carga de rede de proxy externo regional é 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 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 em 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 no Região B que usa 10.129.0.0/23 como o intervalo de endereços IP principal

Criar a rede e as sub-redes

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 da sub-rede como Personalizado.

  5. Crie uma sub-rede para os back-ends do balanceador de carga. 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
  6. Clique em Concluído.

  7. 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: 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-ssh: uma regra de entrada, aplicável às instâncias cuja carga está sendo balanceada, que permite a conectividade SSH de entrada na porta TCP 22 proveniente 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 de destino allow-ssh.

  • fw-allow-health-check: uma regra de entrada, aplicável às instâncias submetidas ao balanceamento de carga, que permite todo o tráfego TCP dos sistemas de verificação de integridade do Google Cloud (em 130.211.0.0/22 e 35.191.0.0/16). Este exemplo usa a tag de destino allow-health-check.

  • fw-allow-proxy-only-subnet. uma regra de entrada que permite que as conexões da sub-rede somente proxy alcancem os back-ends.

Sem essas regras de firewall, a regra padrão de negação de entrada bloqueará o tráfego que chega para as instâncias de back-end.

As tags de destino definem as instâncias de back-end. Sem as tags de destino, as regras de firewall se aplicam a todas as instâncias de back-end na rede VPC. Ao criar as VMs de back-end, inclua as tags de destino especificadas, conforme mostrado em Criar um grupo gerenciado de instâncias.

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 novamente para criar uma regra que autorize conexões SSH de entrada. Preencha os seguintes campos:

    • Name: fw-allow-ssh
    • Rede: lb-network
    • 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.
  3. Clique em Criar.

  4. Clique em Criar regra de firewall pela segunda vez para criar a regra que autorize as verificações de integridade do Google Cloud:

    • Name: fw-allow-health-check
    • Rede: lb-network
    • Direção do tráfego: entrada
    • Ação na correspondência: permitir
    • 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.

      Como prática recomendada, limite esta regra somente aos protocolos e portas que correspondem aos usados por sua verificação de integridade. Se você usar tcp:80 para o protocolo e a porta, o Google Cloud poderá usar HTTP na porta 80 para entrar em contato com suas VMs, mas não poderá usar HTTPS na porta 443 para entrar em contato com elas.

  5. Clique em Criar.

  6. Clique em Criar regra de firewall uma terceira vez para criar a regra que permite que os servidores proxy do balanceador de carga se conectem aos back-ends:

    • Name: fw-allow-proxy-only-subnet
    • Rede: lb-network
    • 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 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
    
  2. Crie a regra fw-allow-health-check para permitir verificações de integridade do Google Cloud. Neste exemplo, é permitido todo o tráfego TCP de sondagens de verificação de integridade. No entanto, é possível configurar um conjunto mais restrito de portas para atender às suas necessidades.

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --target-tags=allow-health-check \
        --rules=tcp:80
    
  3. Crie a regra fw-allow-proxy-only-subnet para permitir que os proxies Envoy da região se conectem aos seus back-ends. Defina --source-ranges como os intervalos alocados da sua sub-rede somente proxy, neste exemplo, 10.129.0.0/23.

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

Reserve o endereço IP do balanceador de carga

Reserve um endereço IP estático para o 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
    

Criar um grupo gerenciado de instâncias

Nesta seção, mostramos como criar dois back-ends de grupos gerenciados de instâncias (MIG, na sigla em inglês) na região A para o balanceador de carga. O MIG fornece instâncias de VM que executam os servidores Apache de back-end para este exemplo. Normalmente, um balanceador de carga de rede de proxy externo regional não é usado para o tráfego HTTP, mas O software Apache é normalmente usado para testes.

Console

Criar um modelo de instância

  1. No Console do Google Cloud, acesse a página Modelos de instância.

    Acesse "Modelos de instância"

  2. Clique em Criar modelo de instância.

  3. Em Nome, insira ext-reg-tcp-proxy-backend-template.

  4. Certifique-se de que o disco de inicialização esteja configurado como uma imagem Debian. Por exemplo, Debian GNU/Linux 9 (stretch). Estas instruções usam comandos que estão disponíveis apenas no Debian, como apt-get.

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

  6. 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
  7. 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
     
  8. Clique em Criar.

Criar um grupo gerenciado de instâncias

  1. No Console do Google Cloud, acesse a página Grupos de instâncias.

    Acesse grupo de instâncias

  2. Clique em Criar grupo de instâncias.

  3. Selecione Novo grupo gerenciado de instâncias (sem estado). Para mais informações, consulte Criar um MIG com discos com estado.

  4. Em Nome, insira mig-a.

  5. Em Local, selecione Zona única.

  6. Em Região, selecione REGION_A.

  7. Em Zona, selecione ZONE_A.

  8. Em Modelo de instância, selecione ext-reg-tcp-proxy-backend-template.

  9. Especifique o número de instâncias que você quer criar no grupo.

    Neste exemplo, especifique as seguintes opções em Escalonamento automático:

    • Em Modo de escalonamento automático, selecione Off:do not autoscale.
    • Em Número máximo de instâncias, insira 2.
  10. Em Mapeamento de portas, clique em Adicionar porta.

    • Em Nome da porta, insira tcp80.
    • Em Número da porta, digite 80.
  11. Clique em Criar.

  12. Para criar um segundo grupo de instâncias gerenciadas, repita as etapas Criar um grupo de instâncias gerenciadas e use as configurações a seguir:

    • Name: mig-b
    • Zona: ZONE_B

    Mantenha todas as outras configurações iguais.

gcloud

As instruções da Google Cloud CLI neste guia pressupõem que você esteja usando o Cloud Shell ou outro ambiente com bash instalado.

  1. Para criar um modelo de instância de VM com o servidor HTTP, use o comando gcloud compute instance-templates create:

    gcloud compute instance-templates create ext-reg-tcp-proxy-backend-template \
        --region=REGION_A \
        --network=lb-network \
        --subnet=backend-subnet \
        --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --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'
    
  2. Criar um grupo gerenciado de instâncias na zona ZONE_A:

    gcloud compute instance-groups managed create mig-a \
        --zone=ZONE_A \
        --size=2 \
        --template=ext-reg-tcp-proxy-backend-template
    
  3. Criar um grupo gerenciado de instâncias na zona ZONE_B:

    gcloud compute instance-groups managed create mig-b \
        --zone=ZONE_B \
        --size=2 \
        --template=ext-reg-tcp-proxy-backend-template
    

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. Em Tipo de back-end, selecione Grupo de instâncias.
  3. Em Protocol, selecione TCP.
  4. Em Porta nomeada, insira tcp80.
  5. Configure o primeiro back-end:
    1. Em Novo back-end, selecione o grupo de instâncias mig-a.
    2. Em Números de portas, insira 80.
    3. Mantenha os valores padrão restantes e clique em Concluído.
  6. Configure o segundo back-end:
    1. Clique em Adicionar back-end.
    2. Em Novo back-end, selecione o grupo de instâncias mig-b.
    3. Em Números de portas, insira 80.
    4. Mantenha os valores padrão restantes e clique em Concluído.
  7. 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. Defina a Porta como 80.
  8. Mantenha os valores padrão restantes e clique em Salvar.
  9. 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-reg-tcp-forwarding-rule.
  3. Em Sub-rede, selecione backend-subnet.
  4. Em Endereço IP, selecione o endereço IP reservado anteriormente: LB_IP_ADDRESS
  5. Em Número da porta, digite 110. 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 Analisar e finalizar.
  2. Revise suas configurações do balanceador de carga.
  3. Opcional: clique em Código equivalente para ver a solicitação da API REST usada para criar o balanceador de carga.
  4. Clique em Criar.

gcloud

  1. Criar uma verificação de integridade regional:

    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 ext-reg-tcp-proxy-bs \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=TCP \
        --port-name=tcp80 \
        --region=REGION_A \
        --health-checks=tcp-health-check \
        --health-checks-region=REGION_A
    
  3. Adicionar grupos de instâncias ao serviço de back-end:

    gcloud compute backend-services add-backend ext-reg-tcp-proxy-bs \
        --region=REGION_A \
        --instance-group=mig-a \
        --instance-group-zone=ZONE_A \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8
     
    gcloud compute backend-services add-backend ext-reg-tcp-proxy-bs \
        --region=REGION_A \
        --instance-group=mig-b \
        --instance-group-zone=ZONE_B \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8
    
  4. Crie um proxy TCP de destino:

    gcloud compute target-tcp-proxies create ext-reg-tcp-target-proxy \
        --backend-service=ext-reg-tcp-proxy-bs \
        --proxy-header=NONE \
        --region=REGION_A
    

    Se quiser ativar o cabeçalho proxy, defina-o como PROXY_V1 em vez de NONE. 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.

  5. Crie a regra de encaminhamento. Para --ports, especifique um único número de porta de 1-65535. Este exemplo usa a porta 110. A regra de encaminhamento encaminha pacotes com uma porta de destino correspondente.

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

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
    

Outras opções de configuração

Nesta seção, o exemplo é detalhado para fornecer outras opções de configuração. Todas as tarefas são opcionais. É possível realizá-las em qualquer ordem.

Ativar a afinidade de sessão

A configuração de exemplo cria um serviço de back-end sem afinidade da sessão.

Nestes procedimentos, você verá um exemplo de como atualizar um serviço de back-end para um balanceador de carga criado anteriormente. Com isso, o serviço de back-end usa a afinidade de IP do cliente ou a afinidade de cookie gerado.

Quando a afinidade de IP do cliente está ativada, o balanceador de carga direciona as solicitações de um determinado cliente para a mesma VM de back-end. Isso é feito com base em um hash criado a partir do endereço IP do cliente e do endereço IP do balanceador de carga (o endereço IP externo de uma regra de encaminhamento externo).

Para ativar a afinidade da sessão de IP do cliente, conclua as etapas a seguir.

Console

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

    Acessar o "Balanceamento de carga"

  2. Clique em Back-ends.

  3. Clique em ext-reg-tcp-proxy-bs (o nome do serviço de back-end que você criou para este exemplo) e, em seguida, clique em Editar.

  4. Na página Detalhes do serviço de back-end, clique em Configuração avançada.

  5. Em Afinidade da sessão, selecione IP do cliente.

  6. Clique em Atualizar.

gcloud

Para atualizar o serviço de back-end ext-reg-tcp-proxy-bs e especificar a afinidade da sessão de IP do cliente, use o comando gcloud compute backend-services update ext-reg-tcp-proxy-bs:

gcloud compute backend-services update ext-reg-tcp-proxy-bs \
    --region=REGION_A \
    --session-affinity=CLIENT_IP

A seguir