Configurar um balanceador de carga de rede de passagem externa global para vários protocolos IP

Neste documento, mostramos como criar um balanceador de carga de rede de passagem externa global para balancear o tráfego TCP, UDP, ESP, GRE, ICMP e ICMPv6.

Você pode usar essa configuração para:

  • Balancear a carga do tráfego que usa protocolos IP diferentes de TCP ou UDP.

  • Atenda a vários protocolos com um único balanceador de carga. Por exemplo, os serviços IPSec geralmente processam alguma combinação de tráfego IKE e NAT-T baseado em ESP e UDP.

Antes de começar

Certifique-se de que sua configuração atenda aos seguintes pré-requisitos.

Instalar a CLI do Google Cloud

As instruções neste guia usam a Google Cloud CLI para configurar um balanceador de carga de rede de passagem externa global. Para instalar, consulte Instalar a CLI gcloud.

Funções exigidas

Se você for o criador do projeto, vai receber o papel de proprietário (roles/owner). Por padrão, o papel de proprietário (roles/owner) ou de editor (roles/editor) inclui as permissões necessárias para seguir este documento.

Se você não é o criador do projeto, as permissões necessárias precisam ser concedidas ao principal apropriado. Por exemplo, um principal pode ser uma Conta do Google (para usuários finais) ou uma conta de serviço.

Para ter as permissões necessárias para configurar um balanceador de carga de rede de transferência externa global com back-ends de grupo de instâncias de VM, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Para mais informações sobre papéis e permissões do Cloud Load Balancing, consulte Papéis e permissões. Para mais informações sobre como definir políticas do IAM com concessões condicionais para regras de encaminhamento, consulte Condições do IAM para regras de encaminhamento.

Visão geral da configuração

O diagrama a seguir mostra dois balanceadores de carga de rede de passagem externa globais para o mesmo par de endereços IP, cada um atendendo a um conjunto diferente de protocolos e portas IP. Para entender como funciona um balanceador de carga de rede de passagem externa global, consulte a seção Arquitetura no guia de visão geral.

  1. Balanceador de carga TCP na porta 80

    A regra de encaminhamento desse balanceador de carga está configurada para capturar apenas o tráfego TCP que chega especificamente na porta 80.

    • Quando um pacote chega a um endereço IP de regra de encaminhamento, oGoogle Cloud primeiro verifica se é um pacote TCP e se a porta de destino é exatamente 80.
    • Se essas condições forem atendidas, o pacote será capturado por essa regra de encaminhamento TCP específica e roteado para um back-end com base no serviço de back-end referenciado.
  2. Balanceador de carga L3_DEFAULT para tráfego TCP:8080 e UDP

    A regra de encaminhamento desse balanceador de carga usa o protocolo L3_DEFAULT e está configurada para aceitar tráfego em todas as portas. Nessa configuração, ela atua como a regra catch-all que processa o tráfego que a primeira regra de encaminhamento não processa (como UDP, ICMP e todo o tráfego TCP, exceto a porta 80).

    • Se um pacote chegar a um endereço IP de regra de encaminhamento que não corresponda ao tráfego TCP específico que chega na porta 80 (por exemplo, se for tráfego UDP, um ping ICMP ou tráfego TCP na porta 8080 ou 443), esse pacote será capturado pela regra de encaminhamento L3_DEFAULT.
    • Adicione uma regra de firewall para permitir que apenas o tráfego TCP:8080 e UDP chegue às instâncias de VM de back-end. Portanto, mesmo que a regra de encaminhamento L3_DEFAULT capture todo o tráfego do protocolo IP em todas as portas, a regra de firewall limita o tráfego com balanceamento de carga ao tráfego TCP:8080 e UDP.
    • Em seguida, o pacote é roteado para um back-end com base no serviço de back-end referenciado.

    Google Cloud prioriza a regra TCP mais específica na porta 80 antes de permitir que o tráfego restante flua para uma regra L3_DEFAULT no mesmo endereço IP.

Dois balanceadores de carga de rede de passagem externa globais enviam tráfego para back-ends de grupos de instâncias de VM
    implantados nas regiões "us-west1" e "europe-west2".
Dois balanceadores de carga de rede de passagem externa globais para o mesmo par de endereços IP, cada um atendendo a um conjunto diferente de protocolos e portas IP (clique para ampliar).

Configurar a rede e as sub-redes

O exemplo usa uma rede VPC de modo personalizado chamada lb-network com sub-redes em duas regiões diferentes.

A tabela a seguir resume a compatibilidade entre os tipos de tráfego do balanceador de carga, as interfaces de rede da VM de back-end e os tipos de pilha de sub-rede da VPC. Confira os requisitos de compatibilidade da interface de rede da VM de back-end com as sub-redes da VPC, conforme descrito no guia de arquitetura do balanceador de carga de rede de passagem externa global.

Tipo de tráfego do balanceador de carga Tipo de pilha da interface de rede da VM de back-end Tipo de pilha da sub-rede VPC
Somente tráfego IPv4 IPV4_ONLY IPV4_ONLY ou IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Somente tráfego IPv6 IPV6_ONLY IPV6_ONLY ou IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Tráfego IPv4 e IPv6 IPV4_IPV6 IPV4_IPV6

Os back-ends usados neste exemplo estão localizados nas seguintes regiões e sub-redes. Embora você possa escolher qual intervalo de endereços IPv4 será configurado na sub-rede,o Google Cloud atribui automaticamente um intervalo de endereços IPv6 /64 a toda a sub-rede.

  • Região: us-west1

    • Sub-rede: lb-subnet-us, com intervalo de endereços IPv4 principal 10.1.2.0/24.
  • Região: europe-west2

    • Sub-rede: lb-subnet-eu, com intervalo de endereços IPv4 principal 10.1.3.0/24.

gcloud

  1. Criar uma rede VPC. Neste exemplo, a rede VPC é chamada de lb-network.

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Na rede VPC (lb-network), crie sub-redes em duas regiões.

    Crie uma sub-rede chamada lb-subnet-us para os back-ends na região us-west1.

    Para criar uma sub-rede somente IPv4, use o seguinte comando:

    gcloud compute networks subnets create lb-subnet-us \
        --stack-type=IPV4_ONLY \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

    Para criar uma sub-rede de pilha dupla, use o seguinte comando:

    gcloud compute networks subnets create lb-subnet-us \
        --stack-type=IPV4_IPV6 \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

    Para criar uma sub-rede somente IPv6, use o seguinte comando:

    gcloud compute networks subnets create lb-subnet-us \
        --stack-type=IPV6_ONLY \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --region=us-west1
    

    Crie uma sub-rede chamada lb-subnet-eu para os back-ends na região europe-west2.

    Para criar uma sub-rede somente IPv4, use o seguinte comando:

    gcloud compute networks subnets create lb-subnet-eu \
        --stack-type=IPV4_ONLY \
        --network=lb-network \
        --range=10.1.3.0/24 \
        --region=europe-west2
    

    Para criar uma sub-rede de pilha dupla, use o seguinte comando:

    gcloud compute networks subnets create lb-subnet-eu \
        --stack-type=IPV4_IPV6 \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --range=10.1.3.0/24 \
        --region=europe-west2
    

    Para criar uma sub-rede somente IPv6, use o seguinte comando:

    gcloud compute networks subnets create lb-subnet-eu \
        --stack-type=IPV6_ONLY \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --range=10.1.3.0/24 \
        --region=europe-west2
    

Reservar endereços IP externo globais

Reserve dois endereços IP externo globais, um de cada grupo de disponibilidade. Como mostrado na Visão geral da configuração, os dois balanceadores de carga de rede de passagem externa globais compartilham o mesmo par de endereços IP.

Para um balanceador de carga de rede de passagem externa global, os endereços IP da regra de encaminhamento são completamente dissociados das sub-redes VPC. Os endereços IP pertencem a pools de endereços IP externo globais do Google ou a prefixos delegados públicos IPv4 externos globais BYOIP de grupos de disponibilidade distintos e não estão associados a nenhuma sub-rede VPC.

Quando você configura uma regra de encaminhamento IPv6, os endereços IP da regra de encaminhamento são alocados como prefixos /96.

gcloud

Para o tráfego IPv4:

  1. Reserve o primeiro endereço IP externo global chamado lb-ipv4-ag0 no grupo de disponibilidade 0.

    gcloud beta compute addresses create lb-ipv4-ag0 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \
        --ip-version=IPV4
    
  2. Reserve o segundo endereço IP externo global lb-ipv4-ag1 no grupo de disponibilidade 1.

    gcloud beta compute addresses create lb-ipv4-ag1 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \
        --ip-version=IPV4
    

Para o tráfego IPv6:

  1. Reserve o primeiro endereço IP externo global chamado lb-ipv6-ag0 no grupo de disponibilidade 0.

    gcloud beta compute addresses create lb-ipv6-ag0 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \
        --ip-version=IPV6
    
  2. Reserve o segundo endereço IP externo global lb-ipv6-ag1 no grupo de disponibilidade 1.

    gcloud beta compute addresses create lb-ipv6-ag1 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \
        --ip-version=IPV6
    

Configurar um balanceador de carga para tráfego TCP na porta 80

Siga as etapas desta seção para configurar um balanceador de carga de rede de passagem externa global que captura o tráfego TCP na porta 80.

Criar regras de firewall para permitir apenas o tráfego TCP:80

Para configurar seu ambiente de produção com segurança, crie duas regras de firewall separadas:

  • Regra de firewall de verificação de integridade, configurada para permitir o tráfego de entrada de:

  • Regra de firewall de tráfego do usuário, configurada para permitir o tráfego de entrada de:

    • os intervalos de IP de origem do cliente específicos que precisam acessar o balanceador de carga e
    • o protocolo IP e as portas configurados nas regras de encaminhamento

Observe o seguinte:

  • Se o aplicativo estiver atendendo a todos os usuários da Internet sem nenhuma limitação, configure os intervalos de IP de origem 0.0.0.0/0 para tráfego IPv4 e ::/0 para tráfego IPv6.

  • Se você configurou a verificação de integridade para sondar o protocolo IP e as portas do balanceamento de carga, é possível configurar uma única regra de firewall mesclando as regras de firewall de verificação de integridade e de tráfego de usuários.

gcloud

Crie uma regra de firewall que permita que o tráfego TCP de todos os intervalos de origem alcance suas instâncias de VM de back-end na porta 80. Essa porta e protocolo são usados para balanceamento de carga e verificação de integridade.

  • Para permitir todo o tráfego IPv4, execute o seguinte comando:

      gcloud compute firewall-rules create allow-traffic-tcp-80-ipv4 \
          --network=lb-network \
          --target-tags=allow-traffic-tcp-80 \
          --allow=tcp:80 \
          --source-ranges=0.0.0.0/0
    
  • Para permitir todo o tráfego IPv6, execute o seguinte comando:

      gcloud compute firewall-rules create allow-traffic-tcp-80-ipv6 \
          --network=lb-network \
          --target-tags=allow-traffic-tcp-80 \
          --allow=tcp:80 \
          --source-ranges=::/0
    

Criar instâncias de VM de back-end

Para este exemplo de balanceamento de carga, crie grupos gerenciados de instâncias nas zonas us-west1-a e europe-west2-a. O grupo gerenciado de instâncias consiste em instâncias de VM que hospedam os servidores de back-end do balanceador de carga. Para fins de demonstração, os back-ends estão executando o servidor Apache na porta 80. Em resposta às solicitações do cliente, eles veiculam os próprios nomes de host.

O grupo de instâncias faz referência a um modelo de instância, que é usado para criar VMs de back-end.

A tabela a seguir resume a compatibilidade entre os tipos de tráfego do balanceador de carga, as interfaces de rede da VM de back-end e os tipos de pilha de sub-rede da VPC. Confira os requisitos de compatibilidade da interface de rede da VM de back-end com as sub-redes da VPC, conforme descrito no guia de arquitetura do balanceador de carga de rede de passagem externa global.

Tipo de tráfego do balanceador de carga Tipo de pilha da interface de rede da VM de back-end Tipo de pilha da sub-rede VPC
Somente tráfego IPv4 IPV4_ONLY IPV4_ONLY ou IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Somente tráfego IPv6 IPV6_ONLY IPV6_ONLY ou IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Tráfego IPv4 e IPv6 IPV4_IPV6 IPV4_IPV6

Criar um modelo de instância

Neste exemplo, você cria modelos de instância regionais nas regiões us-west1 e europe-west2.

gcloud

  1. Crie um modelo de instância na região us-west1.

    Para criar VMs de back-end com interfaces de rede somente IPv4, use o comando a seguir.

    gcloud compute instance-templates create ig-template-us-tcp-80 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-tcp-80 \
        --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'
    

    Para criar VMs de back-end com interfaces de rede de pilha dupla, use o comando a seguir.

    gcloud compute instance-templates create ig-template-us-tcp-80 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-tcp-80 \
        --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'
    

    Para criar VMs de back-end com interfaces de rede somente IPv6, use o seguinte comando.

    gcloud compute instance-templates create ig-template-us-tcp-80 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-tcp-80 \
        --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. Crie um modelo de instância na região europe-west2.

    Para criar VMs de back-end com interfaces de rede somente IPv4, use o comando a seguir.

    gcloud compute instance-templates create ig-template-eu-tcp-80 \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-tcp-80 \
        --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'
    

    Para criar VMs de back-end com interfaces de rede de pilha dupla, use o comando a seguir.

    gcloud compute instance-templates create ig-template-eu-tcp-80 \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-tcp-80 \
        --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'
    

    Para criar VMs de back-end com interfaces de rede somente IPv6, use o seguinte comando.

    gcloud compute instance-templates create ig-template-eu-tcp-80 \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-tcp-80 \
        --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'
    

Criar grupos gerenciados de instâncias zonais

Neste exemplo, você cria dois grupos gerenciados de instâncias zonais: um na zona us-west1-a e outro na zona europe-west2-a.

gcloud

  1. Crie um grupo gerenciado de instâncias na zona us-west1-a.

    gcloud compute instance-groups managed create ig-us-tcp-80 \
      --template=ig-template-us-tcp-80 \
      --size=2 \
      --zone=us-west1-a
    
  2. Crie um grupo gerenciado de instâncias na zona europe-west2-a.

    gcloud compute instance-groups managed create ig-eu-tcp-80 \
      --template=ig-template-eu-tcp-80 \
      --size=2 \
      --zone=europe-west2-a
    

Criar os componentes do Cloud Load Balancing

Para criar os componentes do Cloud Load Balancing de um balanceador de carga de rede de passagem externa global, faça o seguinte.

gcloud

  1. Crie uma verificação de integridade TCP configurada para gerar sondagens TCP:80.

    gcloud compute health-checks create tcp hc-tcp-80 \
      --global \
      --port=80
    
  2. Crie um serviço de back-end global com o esquema de balanceamento de carga EXTERNAL_PASSTHROUGH.

    gcloud beta compute backend-services create lb-backend-service-tcp-80 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --health-checks=hc-tcp-80 \
      --global
    
  3. Adicione os grupos de instâncias como back-ends ao serviço de back-end.

    Adicione o grupo de instâncias na zona us-west1-a ao serviço de back-end.

    gcloud beta compute backend-services add-backend lb-backend-service-tcp-80 \
        --instance-group=ig-us-tcp-80 \
        --instance-group-zone=us-west1-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    

    Adicione o grupo de instâncias na zona europe-west2-a ao serviço de back-end.

    gcloud beta compute backend-services add-backend lb-backend-service-tcp-80 \
        --instance-group=ig-eu-tcp-80 \
        --instance-group-zone=europe-west2-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    
  4. Crie uma regra de encaminhamento global para veicular o tráfego TCP:80.

    Verifique se a versão IP da sua regra de encaminhamento corresponde ao tipo de pilha das interfaces de rede da VM de back-end.

    A regra de encaminhamento faz referência a endereços IP de cada grupo de disponibilidade.

    Para o tráfego IPv4:

    gcloud beta compute forwarding-rules create lb-forwarding-rule-tcp-80-ipv4 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=TCP \
      --ports=80 \
      --backend-service=lb-backend-service-tcp-80 \
      --global \
      --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
    

    Para o tráfego IPv6:

    gcloud beta compute forwarding-rules create lb-forwarding-rule-tcp-80-ipv6 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=TCP \
      --ports=80 \
      --backend-service=lb-backend-service-tcp-80 \
      --global \
      --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
    

Configurar um balanceador de carga para o tráfego TCP:8080 e UDP

Siga as etapas desta seção para configurar um balanceador de carga de rede de passagem externa global para veicular o tráfego TCP:8080 e UDP.

Crie regras de firewall para permitir apenas o tráfego TCP:8080 e UDP.

Para configurar seu ambiente de produção com segurança, crie duas regras de firewall separadas:

  • Regra de firewall de verificação de integridade, configurada para permitir o tráfego de entrada de:

  • Regra de firewall de tráfego do usuário, configurada para permitir o tráfego de entrada de:

    • os intervalos de IP de origem do cliente específicos que precisam acessar o balanceador de carga e
    • o protocolo IP e as portas configurados nas regras de encaminhamento

Observe o seguinte:

  • Se o aplicativo estiver atendendo a todos os usuários da Internet sem nenhuma limitação, configure os intervalos de IP de origem 0.0.0.0/0 para tráfego IPv4 e ::/0 para tráfego IPv6.

  • Se você configurou a verificação de integridade para sondar o protocolo IP e as portas do balanceamento de carga, é possível configurar uma única regra de firewall mesclando as regras de firewall de verificação de integridade e de tráfego de usuários.

gcloud

Crie uma regra de firewall que permita o tráfego TCP:8080 e UDP de todos os intervalos de origem para alcançar as instâncias de VM de back-end. Esses protocolos são usados para balanceamento de carga, enquanto a porta TCP 8080 também é usada para verificação de integridade.

  1. Para permitir que o tráfego IPv4 alcance back-ends nos grupos de instâncias ig-us-l3-default e ig-eu-l3-default, crie a seguinte regra de firewall.

    gcloud compute firewall-rules create allow-traffic-l3-default-ipv4 \
        --network=lb-network \
        --target-tags=allow-traffic-l3-default \
        --allow=tcp:8080,udp \
        --source-ranges=0.0.0.0/0
    
  2. Para permitir que o tráfego IPv6 alcance back-ends nos grupos de instâncias ig-us-l3-default e ig-eu-l3-default, crie a seguinte regra de firewall.

    gcloud compute firewall-rules create allow-traffic-l3-default-ipv6 \
        --network=lb-network \
        --target-tags=allow-traffic-l3-default \
        --allow=tcp:8080,udp \
        --source-ranges=::/0
    

Criar instâncias de VM de back-end

Para este exemplo de balanceamento de carga, crie grupos gerenciados de instâncias nas zonas us-west1-a e europe-west2-a. O grupo gerenciado de instâncias consiste em instâncias de VM que hospedam os servidores de back-end do balanceador de carga. Para fins de demonstração, os back-ends veiculam nomes de host próprios. O script de inicialização também configura o servidor Apache para detectar na porta 8080 em vez da porta 80.

O grupo de instâncias faz referência a um modelo de instância, que é usado para criar VMs de back-end.

A tabela a seguir resume a compatibilidade entre os tipos de tráfego do balanceador de carga, as interfaces de rede da VM de back-end e os tipos de pilha de sub-rede da VPC. Confira os requisitos de compatibilidade da interface de rede da VM de back-end com as sub-redes da VPC, conforme descrito no guia de arquitetura do balanceador de carga de rede de passagem externa global.

Tipo de tráfego do balanceador de carga Tipo de pilha da interface de rede da VM de back-end Tipo de pilha da sub-rede VPC
Somente tráfego IPv4 IPV4_ONLY IPV4_ONLY ou IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Somente tráfego IPv6 IPV6_ONLY IPV6_ONLY ou IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Tráfego IPv4 e IPv6 IPV4_IPV6 IPV4_IPV6

Criar um modelo de instância

Neste exemplo, você cria modelos de instância regionais nas regiões us-west1 e europe-west2.

gcloud

  1. Crie um modelo de instância na região us-west1.

    Para criar VMs de back-end com interfaces de rede somente IPv4, use o comando a seguir.

    gcloud compute instance-templates create ig-template-us-l3-default \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-l3-default \
        --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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

    Para criar VMs de back-end com interfaces de rede de pilha dupla, use o comando a seguir.

    gcloud compute instance-templates create ig-template-us-l3-default \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-l3-default \
        --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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

    Para criar VMs de back-end com interfaces de rede somente IPv6, use o seguinte comando.

    gcloud compute instance-templates create ig-template-us-l3-default \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-l3-default \
        --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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    
  2. Crie um modelo de instância na região europe-west2.

    Para criar VMs de back-end com interfaces de rede somente IPv4, use o comando a seguir.

    gcloud compute instance-templates create ig-template-eu-l3-default \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-l3-default \
        --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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

    Para criar VMs de back-end com interfaces de rede de pilha dupla, use o comando a seguir.

    gcloud compute instance-templates create ig-template-eu-l3-default \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-l3-default \
        --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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

    Para criar VMs de back-end com interfaces de rede somente IPv6, use o seguinte comando.

    gcloud compute instance-templates create ig-template-eu-l3-default \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-l3-default \
        --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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

Criar grupos gerenciados de instâncias zonais

Neste exemplo, você cria dois grupos gerenciados de instâncias zonais: um na zona us-west1-a e outro na zona europe-west2-a.

gcloud

  1. Crie um grupo gerenciado de instâncias na zona us-west1-a.

    gcloud compute instance-groups managed create ig-us-l3-default \
      --template=ig-template-us-l3-default \
      --size=2 \
      --zone=us-west1-a
    
  2. Crie um grupo gerenciado de instâncias na zona europe-west2-a.

    gcloud compute instance-groups managed create ig-eu-l3-default \
      --template=ig-template-eu-l3-default \
      --size=2 \
      --zone=europe-west2-a
    

Criar os componentes do Cloud Load Balancing

Para criar os componentes do Cloud Load Balancing de um balanceador de carga de rede de passagem externa global, faça o seguinte.

gcloud

  1. Crie uma verificação de integridade TCP configurada para gerar sondagens TCP:8080.

    gcloud compute health-checks create tcp hc-tcp-8080 \
      --global \
      --port=8080
    
  2. Crie um serviço de back-end global com o esquema de balanceamento de carga EXTERNAL_PASSTHROUGH.

    gcloud beta compute backend-services create lb-backend-service-l3-default \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --health-checks=hc-tcp-8080 \
      --global
    
  3. Adicione os grupos de instâncias como back-ends ao serviço de back-end.

    Adicione o grupo de instâncias na zona us-west1-a ao serviço de back-end.

    gcloud beta compute backend-services add-backend lb-backend-service-l3-default \
        --instance-group=ig-us-l3-default \
        --instance-group-zone=us-west1-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    

    Adicione o grupo de instâncias na zona europe-west2-a ao serviço de back-end.

    gcloud beta compute backend-services add-backend lb-backend-service-l3-default \
        --instance-group=ig-eu-l3-default \
        --instance-group-zone=europe-west2-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    
  4. Crie uma regra de encaminhamento global com o campo ip-protocol definido como L3_DEFAULT para processar todo o tráfego de protocolo IP (tráfego TCP diferente da porta 80, UDP, ESP e ICMP). Você precisa criar duas regras de encaminhamento para processar o tráfego IPv4 e IPv6.

    Verifique se a versão IP da sua regra de encaminhamento corresponde ao tipo de pilha das interfaces de rede da VM de back-end.

    A regra de encaminhamento faz referência a endereços IP de cada grupo de disponibilidade.

    Para o tráfego IPv4:

    gcloud beta compute forwarding-rules create lb-forwarding-rule-l3-default-ipv4 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=L3_DEFAULT \
      --ports=all \
      --backend-service=lb-backend-service-l3-default \
      --global \
      --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
    

    Para o tráfego IPv6:

    gcloud beta compute forwarding-rules create lb-forwarding-rule-l3-default-ipv6 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=L3_DEFAULT \
      --ports=all \
      --backend-service=lb-backend-service-l3-default \
      --global \
      --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
    

Testar o balanceador de carga

Agora que o serviço de balanceamento de carga foi configurado, comece a enviar tráfego para os endereços IP externo do balanceador de carga e veja o tráfego ser distribuído às instâncias de back-end.

Receber os endereços IP externo do balanceador de carga

  1. Consiga os endereços IP reservados anexados à regra de encaminhamento. A regra de encaminhamento dos dois balanceadores de carga usa o mesmo par de endereços IP. Portanto, é possível usar lb-forwarding-rule-tcp-80-ipv4 ou lb-forwarding-rule-l3-default-ipv4 para conferir os endereços IP externo.

      gcloud compute forwarding-rules describe lb-forwarding-rule-tcp-80-ipv4 \
          --global
    

    Isso retorna dois endereços IP, um para cada grupo de disponibilidade. Esses endereços IP são chamados de IP_ADDRESS_AVAILABILITY_GROUP_0 e IP_ADDRESS_AVAILABILITY_GROUP_1 nas etapas a seguir.

Enviar tráfego ao balanceador de carga

Este procedimento envia tráfego externo ao balanceador de carga. Execute os testes a seguir para verificar se o tráfego TCP na porta 80 está sendo balanceado pelos grupos de instâncias ig-us-tcp-80 ou ig-eu-tcp-80 enquanto o restante do tráfego (TCP:8080 e UDP) está sendo balanceado pelos grupos de instâncias ig-us-l3-default ou ig-eu-l3-default.

Como verificar o comportamento com solicitações TCP na porta 80

  1. Faça solicitações da Web (por TCP na porta 80) para o balanceador de carga usando curl para contatar o endereço IP dele.

    • Em clientes com conectividade IPv4, execute o seguinte comando:

      while true; do curl -m1 IP_ADDRESS_AVAILABILITY_GROUP_0; done
      

    Observe o texto retornado pelo comando curl. O texto mostra o nome da VM de back-end que gera a resposta. Por exemplo, Page served from: VM_NAME. As respostas vêm apenas de instâncias nos grupos de instâncias ig-us-tcp-80 ou ig-eu-tcp-80.

    Isso mostra que o tráfego TCP enviado para o endereço IP do balanceador de carga na porta 80 é processado pela regra de encaminhamento TCP.

Como verificar o comportamento com solicitações TCP na porta 8080

Faça solicitações da Web (por TCP na porta 8080) para o balanceador de carga usando curl para contatar o endereço IP dele.

  • Em clientes com conectividade IPv4, execute o seguinte comando:

    while true; do curl -m1 IP_ADDRESS_AVAILABILITY_GROUP_0:8080; done
    

    Observe o texto retornado pelo comando curl. As respostas vêm apenas de instâncias nos grupos de instâncias ig-us-l3-default ou ig-eu-l3-default.

    Isso mostra que o tráfego TCP enviado para o endereço IP do balanceador de carga na porta 8080 é processado pela regra de encaminhamento L3_DEFAULT.

Verificar a tabela de roteamento local para os endereços IP do balanceador de carga

As tabelas de roteamento local das VMs de back-end contêm os endereços IP do balanceador de carga de rede de passagem externa global.

Para verificar as rotas locais na VM de back-end, conecte-se a ela usando SSH e execute o seguinte comando:

  ip route list table local

A resposta é a seguinte:

local 10.1.2.5 dev ens4 proto kernel scope host src 10.1.2.5
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
local 136.124.69.214 dev ens4 proto 66 scope host
local 136.124.83.205 dev ens4 proto 66 scope host

No exemplo anterior, 136.124.69.214 e 136.124.83.205 são os endereços IP atribuídos à regra de encaminhamento do balanceador de carga. As entradas de linha local 136.124.69.214 dev ens4 proto 66 scope host e local 136.124.83.205 dev ens4 proto 66 scope host na tabela de roteamento local da VM permitem que pacotes endereçados aos endereços IP do balanceador de carga sejam aceitos pelo back-end. O Google Cloud ambiente de convidado é responsável por adicionar essa entrada.

A entrada da tabela de roteamento local na VM de back-end aceita o pacote para entrega local do host, em que a pilha de rede o entrega ao aplicativo em escuta. Os pacotes de resposta do aplicativo são enviados diretamente ao cliente.

O endereço IP do balanceador de carga não é configurado na interface de rede da VM. Para verificar isso, execute o seguinte comando:

  ip addr list

A resposta é a seguinte: Os endereços IP (136.124.69.214 e 136.124.83.205) aparecem na tabela de roteamento local, mas não estão configurados na interface de rede.

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: ens4:  mtu 1460 qdisc fq_codel state UP group default qlen 1000
    link/ether 42:01:0a:01:02:0d brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 10.1.2.13/32 metric 100 scope global dynamic ens4
       valid_lft 84283sec preferred_lft 84283sec
    inet6 fe80::4001:aff:fe01:20d/64 scope link
       valid_lft forever preferred_lft forever

A seguir