Configure um balanceador de carga de rede de passagem interno com NEGs zonais

Este guia mostra como implementar um Network Load Balancer de encaminhamento interno com back-ends de grupo de pontos finais de rede (NEG) zonais. Os NEGs zonais são recursos zonais que representam coleções de endereços IP ou combinações de endereço IP/porta para recursos Google Cloud numa única sub-rede. Os NEGs permitem-lhe criar agrupamentos lógicos de endereços IP ou combinações de endereços IP/portas que representam serviços de software em vez de VMs inteiras.

Antes de seguir este guia, familiarize-se com o seguinte:

Os equilibradores de carga de passagem internos só suportam NEGs zonais com GCE_VM_IP pontos finais.

Autorizações

Para seguir este guia, tem de criar instâncias e modificar uma rede num projeto. Deve ser proprietário ou editor do projeto, ou ter todas as seguintes funções IAM do Compute Engine:

Tarefa Função necessária
Crie redes, sub-redes e componentes do balanceador de carga Administrador da rede
Adicione e remova regras de firewall Administrador de segurança
Crie instâncias Administrador de instâncias do Compute

Para mais informações, consulte os seguintes guias:

Vista geral da configuração

Este guia mostra como configurar e testar um Network Load Balancer de encaminhamento interno com back-ends de NEG zonais.GCE_VM_IP Os passos nesta secção descrevem como configurar o seguinte:

  1. Uma rede VPC de exemplo denominada lb-network com uma sub-rede personalizada
  2. Regras de firewall que permitem ligações recebidas a VMs de back-end
  3. Quatro VMs:
    • VMs vm-a1 e vm-a2 na zona us-west1-a
    • VMs vm-c1 e vm-c2 na zona us-west1-c
  4. Dois NEGs zonais de back-end, neg-a na zona us-west1-a e neg-c na zona us-west1-c. Cada NEG tem os seguintes pontos finais:
    • neg-a contém estes dois pontos finais:
      • Endereço IP interno da VM vm-a1
      • Endereço IP interno da VM vm-a2
    • neg-c contém estes dois pontos finais:
      • Endereço IP interno da VM vm-c1
      • Endereço IP interno da VM vm-c2
  5. Uma VM cliente (vm-client) em us-west1-a para testar as ligações
  6. Os seguintes componentes do balanceador de carga de rede de encaminhamento interno:
    • Um serviço de back-end interno na região de us-west1 para gerir a distribuição de ligações aos dois NEGs zonais
    • Uma regra de encaminhamento interna e um endereço IP interno para o front-end do balanceador de carga

A arquitetura para este exemplo tem o seguinte aspeto:

Configuração do balanceador de carga de rede de encaminhamento interno com NEGs zonais
Configuração do balanceador de carga de rede de encaminhamento interno com NEGs zonais

Configure uma rede, uma região e uma sub-rede

O exemplo de balanceador de carga de rede de encaminhamento interno descrito nesta página é criado numa rede VPC de modo personalizado denominada lb-network.

As VMs de back-end, os NEGs zonais e os componentes do balanceador de carga deste exemplo estão localizados nesta região e sub-rede:

  • Região: us-west1
  • Sub-rede: lb-subnet, com o intervalo de endereços IP principal 10.1.2.0/24

Para criar a rede e a sub-rede de exemplo, siga estes passos.

Consola

  1. Aceda à página Redes VPC na Google Cloud consola.
    Aceda à página da rede VPC
  2. Clique em Criar rede de VPC.
  3. Introduza um Nome de lb-network.
  4. Na secção Sub-redes:
    • Defina o Subnet creation mode (Modo de criação de sub-rede) como Custom (Personalizado).
    • Na secção Nova sub-rede, introduza as seguintes informações:
      • Nome: lb-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:

    gcloud compute networks create lb-network --subnet-mode=custom
    
    1. Na rede lb-network, crie uma sub-rede para VMs de back-end na região us-west1:
    gcloud compute networks subnets create lb-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

Configure regras de firewall

Este exemplo usa as seguintes regras de firewall:

  • fw-allow-lb-access: uma regra de entrada, aplicável a todos os destinos na rede VPC, que permite o tráfego de origens no intervalo 10.1.2.0/24. Esta regra permite o tráfego de entrada de qualquer cliente localizado em lb-subnet.

  • fw-allow-ssh: Uma regra de entrada, aplicável às instâncias com balanceamento de carga, que permite a conetividade SSH de entrada na porta TCP 22 a partir de qualquer endereço. Pode escolher um intervalo de IPs de origem mais restritivo para esta regra. Por exemplo, pode especificar apenas os intervalos de IPs do sistema a partir do qual vai iniciar sessões SSH. Este exemplo usa a etiqueta de destino allow-ssh para identificar as VMs às quais deve ser aplicada.

Sem estas regras de firewall, a regra de negação predefinida de entrada bloqueia o tráfego de entrada para as instâncias de back-end.

Consola

  1. Na Google Cloud consola, aceda à página Políticas de firewall.
    Aceder a Políticas de firewall
  2. Clique em Criar regra de firewall e introduza as seguintes informações para criar a regra que permite o tráfego da sub-rede:
    • Nome: fw-allow-lb-access
    • Rede: lb-network
    • Prioridade: 1000
    • Direção do tráfego: entrada
    • Ação na correspondência: permitir
    • Alvos: todas as instâncias na rede
    • Filtro de origem: intervalos IPv4
    • Intervalos IPv4 de origem: 10.1.2.0/24
    • Protocolos e portas: permitir tudo
  3. Clique em Criar.
  4. Clique novamente em Criar regra de firewall para criar a regra que permite ligações SSH de entrada:
    • Nome: fw-allow-ssh
    • Rede: lb-network
    • Prioridade: 1000
    • Direção do tráfego: entrada
    • Ação na correspondência: permitir
    • Objetivos: etiquetas de objetivo especificadas
    • Etiquetas de segmentação: 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, em seguida, escreva: tcp:22
  5. Clique em Criar.
  6. Clique em Criar regra de firewall pela terceira vez para criar a regra que permite as Google Cloud verificações de funcionamento:
    • Nome: fw-allow-health-check
    • Rede: lb-network
    • Prioridade: 1000
    • Direção do tráfego: entrada
    • Ação na correspondência: permitir
    • Objetivos: etiquetas de objetivo especificadas
    • Etiquetas de segmentação: allow-health-check
    • Filtro de origem: intervalos IPv4
    • Intervalos de IPv4 de origem: 130.211.0.0/22 e 35.191.0.0/16
    • Protocolos e portas: permitir tudo
  7. Clique em Criar.

gcloud

  1. Crie a regra de firewall fw-allow-lb-access para permitir a comunicação de com a sub-rede:

    gcloud compute firewall-rules create fw-allow-lb-access \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  2. Crie a regra de firewall fw-allow-ssh para permitir a conetividade SSH a VMs com a etiqueta de rede allow-ssh. Quando omite source-ranges, Google Cloud interpreta a regra como 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 a regra fw-allow-health-check para permitir Google Cloud verificações de funcionamento.

    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,udp,icmp
    

Crie back-ends de NEG

Para demonstrar a natureza regional dos balanceadores de carga de rede de passagem interna, este exemplo usa dois back-ends NEG zonais, neg-a e neg-c, nas zonas us-west1-a e us- west1-c. O tráfego é equilibrado entre ambos os NEGs e entre os pontos finais em cada NEG.

Crie VMs

Para suportar este exemplo, cada uma das quatro VMs executa um servidor Web Apache que ouve nas seguintes portas TCP: 80, 8008, 8080, 8088, 443 e 8443.

A cada VM é atribuído um endereço IP interno no intervalo lb-subnet e um endereço IP externo (público) efémero. Pode remover os endereços IP externos mais tarde.

Os endereços IP externos não são necessários para VMs de back-end. No entanto, são úteis para este exemplo porque permitem que as VMs transfiram o Apache da Internet e permitem que se ligue através de SSH. Por predefinição, o Apache está configurado para ser associado a qualquer endereço IP. Os balanceadores de carga de rede de encaminhamento interno entregam pacotes preservando o IP de destino.

Certifique-se de que o software do servidor em execução nas VMs está a ouvir no endereço IP da regra de encaminhamento interno do balanceador de carga.

Para simplificar as instruções, estas VMs de back-end executam o Debian GNU Linux 10.

Consola

Crie VMs

  1. Aceda à página de instâncias de VM na Google Cloud consola.
    Aceda à página de instâncias de VM
  2. Repita os passos seguintes para criar quatro VMs, usando as seguintes combinações de nomes e zonas.
    • Nome: vm-a1, zona: us-west1-a
    • Nome: vm-a2, zona: us-west1-a
    • Nome: vm-c1, zona: us-west1-c
    • Nome: vm-c2, zona: us-west1-c
  3. Clique em Criar instância.
  4. Defina o Nome conforme indicado no passo 2.
  5. Para a Região, escolha us-west1 e escolha uma Zona, conforme indicado no passo 2.
  6. Na secção Disco de arranque, certifique-se de que a opção Debian GNU/Linux 12 (bookworm) está selecionada para as opções do disco de arranque. Clique em Escolher para alterar a imagem, se necessário.
  7. Clique em Opções avançadas e faça as seguintes alterações:

    • Clique em Rede e adicione as seguintes etiquetas de rede: allow-ssh e allow-health-check
    • Clique em Editar em Interfaces de rede, faça as seguintes alterações e, de seguida, clique em Concluído:
      • Rede: lb-network
      • Subnet: lb-subnet
      • IP interno principal: efémero (automático)
      • IP externo: efémero
    • Clique em Gestão. No campo Script de arranque, copie e cole o seguinte conteúdo do script. O conteúdo do script é idêntico para todas as quatro VMs:

      #! /bin/bash
      if [ -f /etc/startup_script_completed ]; then
      exit 0
      fi
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      file_ports="/etc/apache2/ports.conf"
      file_http_site="/etc/apache2/sites-available/000-default.conf"
      file_https_site="/etc/apache2/sites-available/default-ssl.conf"
      http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
      http_vh_prts="*:80 *:8008 *:8080 *:8088"
      https_listen_prts="Listen 443\nListen 8443"
      https_vh_prts="*:443 *:8443"
      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
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      prt_conf="$(cat "$file_ports")"
      prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
      prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
      echo "$prt_conf" | tee "$file_ports"
      http_site_conf="$(cat "$file_http_site")"
      http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
      echo "$http_site_conf_2" | tee "$file_http_site"
      https_site_conf="$(cat "$file_https_site")"
      https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
      echo "$https_site_conf_2" | tee "$file_https_site"
      systemctl restart apache2
      touch /etc/startup_script_completed
      
  8. Clique em Criar.

gcloud

Crie as quatro VMs executando o seguinte comando quatro vezes, usando estas quatro combinações para [VM-NAME] e [ZONE]. O conteúdo do script é idêntico para todas as quatro VMs.

  • [VM-NAME] de vm-a1 e [ZONE] de us-west1-a
  • [VM-NAME] de vm-a2 e [ZONE] de us-west1-a
  • [VM-NAME] de vm-c1 e [ZONE] de us-west1-c
  • [VM-NAME] de vm-c2 e [ZONE] de us-west1-c

    gcloud compute instances create VM-NAME \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check \
        --subnet=lb-subnet \
        --metadata=startup-script='#! /bin/bash
    if [ -f /etc/startup_script_completed ]; then
    exit 0
    fi
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    file_ports="/etc/apache2/ports.conf"
    file_http_site="/etc/apache2/sites-available/000-default.conf"
    file_https_site="/etc/apache2/sites-available/default-ssl.conf"
    http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
    http_vh_prts="*:80 *:8008 *:8080 *:8088"
    https_listen_prts="Listen 443\nListen 8443"
    https_vh_prts="*:443 *:8443"
    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
    prt_conf="$(cat "$file_ports")"
    prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
    prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
    echo "$prt_conf" | tee "$file_ports"
    http_site_conf="$(cat "$file_http_site")"
    http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
    echo "$http_site_conf_2" | tee "$file_http_site"
    https_site_conf="$(cat "$file_https_site")"
    https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
    echo "$https_site_conf_2" | tee "$file_https_site"
    systemctl restart apache2
    touch /etc/startup_script_completed'
    

Crie NEGs zonais GCE_VM_IP

Os NEGs (neg-a e neg-c) têm de ser criados nas mesmas zonas que as VMs criadas no passo anterior.

Consola

Para criar um grupo de pontos finais de rede zonal:

  1. Aceda à página Grupos de pontos finais de rede na Google Cloud consola.
    Aceda à página Grupos de pontos finais da rede
  2. Clique em Criar grupo de pontos finais de rede.
  3. Introduza um Nome para o NEG zonal: neg-a.
  4. Selecione o Tipo de grupo de pontos finais da rede: Grupo de pontos finais da rede (zonal).
  5. Selecione a rede: lb-network
  6. Selecione a Sub-rede: lb-subnet
  7. Selecione a zona: us-west1-a
  8. Clique em Criar.
  9. Repita estes passos para criar um segundo NEG zonal denominado neg-c na zona us-west1-c.

Adicione pontos finais ao NEG zonal:

  1. Aceda à página Grupos de pontos finais de rede na Google Cloud consola.
    Aceda aos grupos de pontos finais da rede
  2. Clique no Nome do primeiro grupo de pontos finais de rede criado no passo anterior (neg-a). É apresentada a página Detalhes do grupo de pontos finais da rede.
  3. Na secção Pontos finais de rede neste grupo, clique em Adicionar ponto final de rede. É apresentada a página Adicionar ponto final de rede.

    1. Clique em Instância de VM e selecione vm-a1 para adicionar os respetivos endereços IP internos como pontos finais de rede.
    2. Clique em Criar.
    3. Clique novamente em Adicionar ponto final de rede e, em Instância de VM, selecione vm-a2.
    4. Clique em Criar.
  4. Clique no Nome do segundo grupo de pontos finais de rede criado no passo anterior (neg-c). É apresentada a página Detalhes do grupo de pontos finais da rede.

  5. Na secção Pontos finais de rede neste grupo, clique em Adicionar ponto final de rede. É apresentada a página Adicionar ponto final de rede.

    1. Clique em Instância de VM e selecione vm-c1 para adicionar os respetivos endereços IP internos como pontos finais de rede.
    2. Clique em Criar.
    3. Clique novamente em Adicionar ponto final de rede e, em Instância de VM, selecione vm-c2.
    4. Clique em Criar.

gcloud

  1. Crie um NEG zonal denominado neg-a em us-west1-a com o comando gcloud compute network-endpoint-groups create:GCE_VM_IP

    gcloud compute network-endpoint-groups create neg-a \
        --network-endpoint-type=gce-vm-ip \
        --zone=us-west1-a \
        --network=lb-network \
        --subnet=lb-subnet
    
  2. Adicione pontos finais a neg-a:

    gcloud compute network-endpoint-groups update neg-a \
        --zone=us-west1-a \
        --add-endpoint='instance=vm-a1' \
        --add-endpoint='instance=vm-a2'
    
  3. Crie um NEG zonal denominado neg-c em us-west1-c com o comando gcloud compute network-endpoint-groups create:GCE_VM_IP

    gcloud compute network-endpoint-groups create neg-c \
        --network-endpoint-type=gce-vm-ip \
        --zone=us-west1-c \
        --network=lb-network \
        --subnet=lb-subnet
    
  4. Adicione pontos finais a neg-c:

    gcloud compute network-endpoint-groups update neg-c \
        --zone=us-west1-c \
        --add-endpoint='instance=vm-c1' \
        --add-endpoint='instance=vm-c2'
    

Configure os componentes do balanceador de carga

Estes passos configuram todos os componentes do balanceador de carga de rede de encaminhamento interno:

  • Serviço de back-end: para este exemplo, tem de transmitir tráfego HTTP através do balanceador de carga. Por isso, tem de usar o protocolo TCP e não o UDP.

  • Regra de encaminhamento: este exemplo cria uma única regra de encaminhamento interno.

  • Endereço IP interno: neste exemplo, especifica um endereço IP interno, 10.1.2.99, quando cria a regra de encaminhamento.

Consola

gcloud

  1. Crie uma nova verificação de funcionamento de HTTP regional.

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. Crie o serviço de back-end:

    gcloud compute backend-services create bs-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  3. Adicione os dois NEGs zonais, neg-a e neg-c, ao serviço de back-end:

    gcloud compute backend-services add-backend bs-ilb \
        --region=us-west1 \
        --network-endpoint-group=neg-a \
        --network-endpoint-group-zone=us-west1-a
    
    gcloud compute backend-services add-backend bs-ilb \
        --region=us-west1 \
        --network-endpoint-group=neg-c \
        --network-endpoint-group-zone=us-west1-c
    
  4. Crie uma regra de encaminhamento para o serviço de back-end. Quando criar a regra de encaminhamento, especifique 10.1.2.99 para o endereço IP interno na sub-rede.

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=10.1.2.99 \
        --ip-protocol=TCP \
        --ports=80,8008,8080,8088 \
        --backend-service=bs-ilb \
        --backend-service-region=us-west1
    

Teste o balanceador de carga

Este teste contacta o balanceador de carga a partir de uma VM cliente separada, ou seja, não a partir de uma VM de back-end do balanceador de carga. O comportamento esperado é que o tráfego seja distribuído entre as quatro VMs de back-end porque não foi configurada nenhuma afinidade de sessão.

Crie uma VM de cliente de teste

Este exemplo cria uma VM de cliente (vm-client) na mesma região que as VMs de back-end (servidor). O cliente é usado para validar a configuração do equilibrador de carga e demonstrar o comportamento esperado, conforme descrito na secção de testes.

Consola

  1. Aceda à página de instâncias de VM na Google Cloud consola.
    Aceda à página de instâncias de VM
  2. Clique em Criar instância.
  3. Defina o Nome como vm-client.
  4. Defina a Zona como us-west1-a.
  5. Clique em Opções avançadas e faça as seguintes alterações:
    • Clique em Rede e adicione o allow-ssh a Etiquetas de rede.
    • Clique no botão de edição em Interfaces de rede e faça as seguintes alterações. Em seguida, clique em Concluído:
      • Rede: lb-network
      • Subnet: lb-subnet
      • IP interno principal: efémero (automático)
      • IP externo: efémero
  6. Clique em Criar.

gcloud

A VM do cliente pode estar em qualquer zona na mesma região que o balanceador de carga e pode usar qualquer sub-rede nessa região. Neste exemplo, o cliente está na zona us-west1-a e usa a mesma sub-rede que as VMs de back-end.

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

Envie tráfego para o balanceador de carga

Execute os seguintes passos para estabelecer ligação ao equilibrador de carga.

  1. Ligue-se à instância de VM do cliente.

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. Faça um pedido Web ao equilibrador de carga através de curl para contactar o respetivo endereço IP. Repita o pedido para poder ver que as respostas provêm de VMs de back-end diferentes. O nome da VM que gera a resposta é apresentado no texto na resposta HTML, em virtude do conteúdo de /var/www/html/index.html em cada VM de back-end. As respostas esperadas têm o seguinte aspeto: Page served from: vm-a1 e Page served from: vm-a2.

    curl http://10.1.2.99
    

    A regra de encaminhamento está configurada para servir as portas 80, 8008, 8080 e 8088. Para enviar tráfego para essas outras portas, anexe dois pontos (:) e o número da porta após o endereço IP, da seguinte forma:

    curl http://10.1.2.99:8008
    

O que se segue?