Neste documento, mostramos como criar um balanceador de carga de rede de passagem externa global para balancear o tráfego entre back-ends de NEG por zona implantados em várias regiões.
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 um balanceador de carga de rede de passagem externa global com back-ends de NEG zonais implantados nas regiões us-west1 e europe-west2.
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.
Neste exemplo, os seguintes componentes são configurados:
Quatro VMs de back-end:
vm-us-1evm-us-2na zonaus-west1-avm-eu-1evm-eu-2na zonaeurope-west2-a
Dois NEGs zonais com endpoints
GCE_VM_IP:- Anexe
nic0devm-us-1evm-us-2ao NEG na zonaus-west1-a. - Anexe
nic0devm-eu-1evm-eu-2ao NEG na zonaeurope-west2-a.
- Anexe
Um único balanceador de carga de rede de passagem externa global para equilibrar o tráfego
TCP:80entre os quatro endpoints de rede.
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.
É possível configurar um balanceador de carga de rede de passagem externa global para ter GCE_VM_IP
endpoints de rede que podem referenciar a interface de rede de uma VM
cujo tipo de pilha pode ser somente IPv4 ou de pilha dupla.
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 |
gcloud
Crie a 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 endpoints de rede 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-west1Crie uma sub-rede chamada
lb-subnet-eupara os endpoints de rede na regiãoeurope-west2.Para somente tráfego IPv4, use o seguinte comando para criar uma sub-rede somente IPv4:
gcloud compute networks subnets create lb-subnet-eu \ --stack-type=IPV4_ONLY \ --network=lb-network \ --range=10.1.3.0/24 \ --region=europe-west2Para o tráfego IPv4 e IPv6, use o seguinte comando para criar uma sub-rede de pilha dupla:
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
Crie regras de firewall
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 firewall-allow-traffic-ipv4 \ --network=lb-network \ --target-tags=allow-traffic \ --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 firewall-allow-traffic-ipv6 \ --network=lb-network \ --target-tags=allow-traffic \ --allow=tcp:80 \ --source-ranges=::/0
Criar VMs de back-end
Para este exemplo de balanceamento de carga, crie quatro VMs, conforme destacado na seção Visão geral da configuração.
Neste exemplo, a interface nic0 da VM está associada à rede VPC lb-network e a uma das sub-redes, lb-subnet-us ou lb-subnet-eu. A interface de rede referenciada pelo
endpoint GCE_VM_IP precisa estar na mesma sub-rede VPC associada
ao NEG zonal.
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 |
gcloud
Execute o comando gcloud compute instances create quatro vezes para criar as quatro VMs, usando as seguintes quatro combinações para VM_NAME, REGION, ZONE e SUBNET.
O script Bash é idêntico para todas as quatro VMs.
| VM_NAME | REGION | ZONE | SUBNET |
|---|---|---|---|
vm-us-1 |
us-west1 |
us-west1-a |
lb-subnet-us |
vm-us-2 |
us-west1 |
us-west1-a |
lb-subnet-us |
vm-eu-1 |
europe-west2 |
europe-west2-a |
lb-subnet-eu |
vm-eu-2 |
europe-west2 |
europe-west2-a |
lb-subnet-eu |
Para criar VMs de back-end com interfaces de rede somente IPv4, use o comando a seguir.
gcloud compute instances create VM_NAME \
--zone=ZONE \
--image-family=debian-12 \
--image-project=debian-cloud \
--tags=allow-traffic \
--network-interface=network=lb-network,subnet=SUBNET,stack-type=IPV4_ONLY \
--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 instances create VM_NAME \
--zone=ZONE \
--image-family=debian-12 \
--image-project=debian-cloud \
--tags=allow-traffic \
--network-interface=network=lb-network,subnet=SUBNET,stack-type=IPV4_IPV6,ipv6-network-tier=PREMIUM \
--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 NEGs zonais com GCE_VM_IP endpoints
Para este exemplo de balanceamento de carga, crie dois NEGs zonais com endpoints GCE_VM_IP.
- NEG por zona
neg-usna zonaus-west1-a. O NEG zonal consiste em dois endpoints de rede:- Anexe
nic0devm-us-1evm-us-2ao NEG zonalneg-us
- Anexe
- NEG por zona
neg-euemeurope-west2-a. O NEG zonal consiste em dois endpoints de rede:- Anexe
nic0devm-eu-1evm-eu-2ao NEG zonalneg-eu
- Anexe
Ao criar um NEG zonal com endpoints GCE_VM_IP, é preciso associá-lo explicitamente a uma sub-rede da VPC antes de adicionar endpoints ao NEG. O balanceador de carga entrega pacotes à interface de rede que está na sub-rede VPC associada ao NEG. Neste
exemplo, os endpoints do NEG zonal vão apontar para nic0 das VMs.
gcloud
Crie um NEG zonal
GCE_VM_IPchamadoneg-usna zonaus-west1-a.gcloud compute network-endpoint-groups create neg-us \ --network-endpoint-type=gce-vm-ip \ --zone=us-west1-a \ --network=lb-network \ --subnet=lb-subnet-usAdicione endpoints ao NEG zonal
neg-us.gcloud compute network-endpoint-groups update neg-us \ --zone=us-west1-a \ --add-endpoint='instance=vm-us-1' \ --add-endpoint='instance=vm-us-2'Crie um NEG zonal
GCE_VM_IPchamadoneg-euna zonaeurope-west2-a.gcloud compute network-endpoint-groups create neg-eu \ --network-endpoint-type=gce-vm-ip \ --zone=europe-west2-a \ --network=lb-network \ --subnet=lb-subnet-euAdicione endpoints ao NEG zonal
neg-eu.gcloud compute network-endpoint-groups update neg-eu \ --zone=europe-west2-a \ --add-endpoint='instance=vm-eu-1' \ --add-endpoint='instance=vm-eu-2'
Reservar endereços IP externo globais
Um balanceador de carga de rede de passagem externa global requer dois endereços IP externo globais, um de cada grupo de disponibilidade. Esses dois endereços IP são anexados à regra de encaminhamento do balanceador de carga.
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 o balanceador de carga
A configuração de um balanceador de carga de rede de passagem externa global envolve a criação de uma verificação de integridade, um serviço de back-end e uma regra de encaminhamento.
gcloud
Crie uma verificação de integridade TCP configurada para gerar sondagens
TCP:80gcloud 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 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --health-checks=hc-tcp-80 \ --global
Adicione os NEGs zonais como back-ends ao serviço de back-end.
Adicione o NEG zonal na zona
us-west1-aao serviço de back-end.gcloud beta compute backend-services add-backend lb-backend-service \ --network-endpoint-group=neg-us \ --network-endpoint-group-zone=us-west1-a \ --balancing-mode=RATE \ --max-rate-per-endpoint=100000 \ --globalAdicione o NEG zonal na zona
europe-west2-aao serviço de back-end.gcloud beta compute backend-services add-backend lb-backend-service \ --network-endpoint-group=neg-eu \ --network-endpoint-group-zone=europe-west2-a \ --balancing-mode=RATE \ --max-rate-per-endpoint=100000 \ --globalCrie uma regra de encaminhamento global para veicular o tráfego
TCP:80. 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-ipv4 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=TCP \ --ports=80 \ --backend-service=lb-backend-service \ --global \ --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
Para o tráfego IPv6:
gcloud beta compute forwarding-rules create lb-forwarding-rule-ipv6 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=TCP \ --ports=80 \ --backend-service=lb-backend-service \ --global \ --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
Testar o balanceador de carga
Consiga os endereços IP reservados anexados à regra de encaminhamento.
gcloud beta compute forwarding-rules describe lb-forwarding-rule-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_1.Envie o tráfego para um dos endereços IP.
curl http://IP_ADDRESS_AVAILABILITY_GROUP_0
curl http://IP_ADDRESS_AVAILABILITY_GROUP_1
Você vai receber respostas das VMs de back-end em regiões diferentes, dependendo da sua localização e da integridade do back-end.
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 Cloud de Confiance 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