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:
-
Crie uma rede VPC, uma sub-rede e componentes de balanceamento de carga:
Papel de administrador de rede do Compute (
roles/compute.networkAdmin) -
Criar regras de firewall:
Função de administrador de segurança do Compute (
roles/compute.securityAdmin) -
Criar instâncias de VM:
Papel Administrador da instância do Compute (
roles/compute.instanceAdmin)
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.
Balanceador de carga
TCPna porta 80A regra de encaminhamento desse balanceador de carga está configurada para capturar apenas o tráfego
TCPque chega especificamente na porta80.- Quando um pacote chega a um endereço IP de regra de encaminhamento, oGoogle Cloud primeiro verifica se é um pacote
TCPe se a porta de destino é exatamente80. - Se essas condições forem atendidas, o pacote será capturado por essa regra de encaminhamento
TCPespecífica e roteado para um back-end com base no serviço de back-end referenciado.
- Quando um pacote chega a um endereço IP de regra de encaminhamento, oGoogle Cloud primeiro verifica se é um pacote
Balanceador de carga
L3_DEFAULTpara tráfegoTCP:8080eUDPA regra de encaminhamento desse balanceador de carga usa o protocolo
L3_DEFAULTe 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:8080eUDPchegue às instâncias de VM de back-end. Portanto, mesmo que a regra de encaminhamentoL3_DEFAULTcapture 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áfegoTCP:8080eUDP. - Em seguida, o pacote é roteado para um back-end com base no serviço de back-end referenciado.
Google Cloud prioriza a regra
TCPmais específica na porta80antes de permitir que o tráfego restante flua para uma regraL3_DEFAULTno mesmo endereço IP.- 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
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.
- Sub-rede:
Região:
europe-west2- Sub-rede:
lb-subnet-eu, com intervalo de endereços IPv4 principal 10.1.3.0/24.
- Sub-rede:
gcloud
Criar uma rede VPC. Neste exemplo, a rede VPC é chamada de
lb-network.gcloud compute networks create lb-network --subnet-mode=custom
Na rede VPC (
lb-network), crie sub-redes em duas regiões.Crie uma sub-rede chamada
lb-subnet-uspara os back-ends na regiãous-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-west1Para 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-west1Para 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-west1Crie uma sub-rede chamada
lb-subnet-eupara os back-ends na regiãoeurope-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-west2Para 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-west2Para 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:
Reserve o primeiro endereço IP externo global chamado
lb-ipv4-ag0no grupo de disponibilidade 0.gcloud beta compute addresses create lb-ipv4-ag0 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \ --ip-version=IPV4Reserve o segundo endereço IP externo global
lb-ipv4-ag1no 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:
Reserve o primeiro endereço IP externo global chamado
lb-ipv6-ag0no grupo de disponibilidade 0.gcloud beta compute addresses create lb-ipv6-ag0 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \ --ip-version=IPV6Reserve o segundo endereço IP externo global
lb-ipv6-ag1no 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:
- Os intervalos de IP de verificação de integridade do Google;
- o protocolo IP e as portas configuradas na verificação de integridade
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/0para tráfego IPv4 e::/0para 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/0Para 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
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'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
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
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
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
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
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-aao 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 \ --globalAdicione o grupo de instâncias na zona
europe-west2-aao 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 \ --globalCrie 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:
- Os intervalos de IP de verificação de integridade do Google;
- o protocolo IP e as portas configuradas na verificação de integridade
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/0para tráfego IPv4 e::/0para 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.
Para permitir que o tráfego IPv4 alcance back-ends nos grupos de instâncias
ig-us-l3-defaulteig-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/0Para permitir que o tráfego IPv6 alcance back-ends nos grupos de instâncias
ig-us-l3-defaulteig-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
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'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
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
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
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
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
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-aao 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 \ --globalAdicione o grupo de instâncias na zona
europe-west2-aao 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 \ --globalCrie uma regra de encaminhamento global com o campo
ip-protocoldefinido comoL3_DEFAULTpara 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
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-ipv4oulb-forwarding-rule-l3-default-ipv4para conferir os endereços IP externo.gcloud compute forwarding-rules describe lb-forwarding-rule-tcp-80-ipv4 \ --globalIsso retorna dois endereços IP, um para cada grupo de disponibilidade. Esses endereços IP são chamados de
IP_ADDRESS_AVAILABILITY_GROUP_0eIP_ADDRESS_AVAILABILITY_GROUP_1nas 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
Faça solicitações da Web (por TCP na porta 80) para o balanceador de carga usando
curlpara 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ânciasig-us-tcp-80ouig-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ânciasig-us-l3-defaultouig-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
- Referências da API Cloud Load Balancing e da CLI gcloud
- Limpar uma configuração de balanceamento de carga