Neste guia, mostramos como implantar um balanceador de carga de rede de passagem interna com back-ends de grupo de endpoints de rede (NEG, na sigla em inglês) zonal. Os NEGs zonais são recursos zonais que representam conjuntos de endereços IP ou combinações de endereço IP/porta para recursos do Google Cloud em uma sub-rede. Os NEGs permitem criar agrupamentos lógicos de endereços IP ou combinações de endereço IP/porta que representam serviços de software em vez de VMs inteiras.
Antes de seguir as instruções deste guia, familiarize-se com os itens abaixo:
Os balanceadores de carga de rede de passagem interna são compatíveis apenas com NEGs zonais com endpoints GCE_VM_IP
.
Permissões
Para seguir este guia, você precisa criar instâncias e modificar uma rede em um projeto. É necessário ser proprietário ou editor de um projeto ou ter todos os seguintes papéis de IAM do Compute Engine:
Tarefa | Papel necessário |
---|---|
Criar componentes do balanceador de carga, sub-redes e redes | Administrador de rede |
Adicionar e remover regras de firewall | Administrador de segurança |
Criar instâncias | Administrador da instância da computação |
Para mais informações, consulte estes guias:
Visão geral da configuração
Neste guia, mostramos como configurar e testar um balanceador de carga de rede de passagem interna com back-ends de NEG zonal GCE_VM_IP
. Nas etapas desta seção, veja como configurar o seguinte:
- Uma rede VPC de amostra chamada
lb-network
com uma sub-rede personalizada - Regras de firewall que permitem conexões de entrada com VMs de back-end
- Quatro VMs:
- VMs
vm-a1
evm-a2
na zonaus-west1-a
- VMs
vm-c1
evm-c2
na zonaus-west1-c
- VMs
- Dois NEGs zonais de back-end,
neg-a
na zonaus-west1-a
eneg-c
na zonaus-west1-c
. Cada NEG terá os seguintes endpoints:neg-a
contém estes dois endpoints:- Endereço IP interno da VM
vm-a1
- Endereço IP interno da VM
vm-a2
- Endereço IP interno da VM
neg-c
contém estes dois endpoints:- Endereço IP interno da VM
vm-c1
- Endereço IP interno da VM
vm-c2
- Endereço IP interno da VM
- Uma VM cliente (
vm-client
) emus-west1-a
para testar conexões - Os componentes do balanceador de carga de rede de passagem interna a seguir:
- Um serviço de back-end interno na região
us-west1
para gerenciar a distribuição de conexões para os dois NEGs zonais - Uma regra de encaminhamento interna e um endereço IP interno para o front-end do balanceador de carga
- Um serviço de back-end interno na região
A arquitetura deste exemplo é a seguinte:
Configurar uma rede, uma região e uma sub-rede
O exemplo de balanceador de carga de rede de passagem interna descrito nesta página é criado em uma rede VPC de modo personalizado chamada lb-network
.
As VMs de back-end, NEGs zonal e os componentes do balanceador de carga deste exemplo estão localizados nesta região e sub-rede:
- Região:
us-west1
- Sub-rede:
lb-subnet
, com intervalo de endereços IP principal10.1.2.0/24
Para criar o exemplo de rede e sub-rede, siga estas etapas.
Console
- Acesse a página "Redes VPC" no Console do Google Cloud.
Acessar a página "Redes VPC" - Clique em Criar rede VPC.
- Informe um Nome de
lb-network
. - Na seção Sub-redes:
- Defina o Modo de criação de sub-rede como Personalizado.
- Na seção Nova sub-rede, insira as informações a seguir:
- Name:
lb-subnet
- Região:
us-west1
- Intervalo de endereços IP:
10.1.2.0/24
- Clique em Concluído.
- Name:
- Clique em Criar.
gcloud
Crie a rede VPC personalizada:
gcloud compute networks create lb-network --subnet-mode=custom
- Na rede
lb-network
, crie uma sub-rede para VMs de back-end na regiãous-west1
:
gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
- Na rede
Configurar regras de firewall
Este exemplo usa as seguintes regras de firewall:
fw-allow-lb-access
: uma regra de entrada, aplicável a todos os destinos na rede VPC, permitindo tráfego de origens no intervalo10.1.2.0/24
. Essa regra permite o tráfego de entrada de qualquer cliente localizado emlb-subnet
.fw-allow-ssh
: uma regra de entrada, aplicável às instâncias submetidas a balanceamento de carga, que permite a conectividade SSH de entrada na porta TCP 22 proveniente de qualquer endereço. É possível escolher um intervalo de IP de origem mais restritivo para essa regra, por exemplo, especificando apenas os intervalos de IP do sistema que iniciará as sessões SSH. Neste exemplo, usamos a tagallow-ssh
de destino para identificar as VMs a que isso se aplicará.
Sem essas regras de firewall, a regra padrão de negação de entrada bloqueará o tráfego que chega para as instâncias de back-end.
Console
- No Console do Google Cloud, acesse a página políticas de Firewall.
Acesse as políticas de firewall - Clique em Criar regra de firewall e insira as seguintes informações para criar a regra que permite o tráfego de sub-rede:
- Nome:
fw-allow-lb-access
- Rede:
lb-network
- Prioridade:
1000
- Direção do tráfego: entrada
- Ação se houver correspondência: permitir
- Destinos: todas as instâncias na rede
- Filtro de origem: intervalos IPv4
- Intervalos IPv4 de origem:
10.1.2.0/24
- Protocolos e portas: permitir todos
- Nome:
- Clique em Criar.
- Clique em Criar regra de firewall novamente para criar a regra que permite conexões SSH de entrada:
- Nome:
fw-allow-ssh
- Rede:
lb-network
- Prioridade:
1000
- Direção do tráfego: entrada
- Ação se houver correspondência: permitir
- Destinos: tags de destino especificadas
- Tags de meta:
allow-ssh
- Filtro de origem: intervalos IPv4
- Intervalos IPv4 de origem:
0.0.0.0/0
- Protocolos e portas: escolha Protocolos e portas especificados e digite:
tcp:22
- Nome:
- Clique em Criar.
- Clique em Criar regra de firewall pela terceira vez para criar uma regra que permita
as verificações de integridade do Google Cloud:
- Name:
fw-allow-health-check
- Rede:
lb-network
- Prioridade:
1000
- Direção do tráfego: entrada
- Ação se houver correspondência: permitir
- Destinos: tags de destino especificadas
- Tags de meta:
allow-health-check
- Filtro de origem: intervalos IPv4
- Intervalos IPv4 de origem:
130.211.0.0/22
e35.191.0.0/16
- Protocolos e portas: permitir todos
- Name:
- Clique em Criar.
gcloud
Crie a regra de firewall
fw-allow-lb-access
para permitir a comunicação a partir da sub-rede:gcloud compute firewall-rules create fw-allow-lb-access \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=10.1.2.0/24 \ --rules=tcp,udp,icmp
Crie a regra de firewall
fw-allow-ssh
que permita a conectividade SSH para VMs com a tag de redeallow-ssh
. Se você omitirsource-ranges
, o Google Cloud interpretará que a regra autoriza a conexão proveniente de qualquer origem.gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
Crie a regra
fw-allow-health-check
para permitir verificações de integridade do Google Cloud.gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
Criar back-ends de NEG
Para demonstrar a natureza regional dos balanceadores de carga de rede de passagem interna, este exemplo usa dois back-ends de NEG zonal, neg-a
e neg-c
, nas zonas us-west1-a
e us-
west1-c
. O tráfego é balanceado por carga nos NEGs e nos endpoints de cada NEG.
Criar VMs
Para ser compatível com este exemplo, cada uma das quatro VMs executa um servidor da Web Apache que detecta as seguintes portas TCP: 80, 8008, 8080, 8088, 443 e 8443.
Cada VM recebe um endereço IP interno no lb-subnet
e um endereço IP externo (público)
temporário. É possível remover os endereços IP externos posteriormente.
Endereços IP externos não são necessários para VMs de back-end. No entanto, eles são úteis para este exemplo porque permitem que as VMs façam o download do Apache pela Internet e permitem que você se conecte usando SSH. Por padrão, o Apache é configurado para ser vinculado a qualquer endereço IP. Os balanceadores de carga de rede de passagem interna entregam pacotes preservando o IP de destino.
Verifique se o software servidor executado nas suas VMs está escutando no endereço IP da regra de firewall interna do balanceador de carga.
Para simplificar a instrução, essas VMs de back-end executam o Debian GNU Linux 10.
Console
Criar VMs
- Acesse a página Instâncias de VM no Console do Google Cloud.
Acessar a página "Instâncias de VM" - Repita as etapas a seguir para criar quatro VMs. Use estas combinações de nome e zona.
- Nome:
vm-a1
, zona:us-west1-a
- Nome:
vm-a2
, zona:us-west1-a
- Nome:
vm-c1
, zona:us-west1-c
- Nome:
vm-c2
, zona:us-west1-c
- Nome:
- Clique em Criar instância.
- Defina o Nome como indicado na etapa 2.
- Em Região, escolha
us-west1
e escolha uma Zona, como indicado na etapa 2. - Na seção Disco de inicialização, verifique se Debian GNU/Linux 12 (bookworm) está selecionado para as opções de disco de inicialização. Clique em Escolher para alterar a imagem se necessário.
Clique em Opções avançadas e faça as seguintes alterações:
- Clique em Rede e adicione as seguintes tags de rede:
allow-ssh
eallow-health-check
. - Clique em Editar
- Rede:
lb-network
- Sub-rede:
lb-subnet
- IP interno primário: temporário (automático)
- IP externo: temporário
em
Interfaces de rede, faça as
seguintes alterações e clique em Concluído:
- Rede:
Clique em Gerenciamento. No campo Script de inicialização, copie e cole o conteúdo do script a seguir, que é o mesmo para as quatro VMs:
#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed
- Clique em Rede e adicione as seguintes tags de rede:
Clique em Criar.
gcloud
Execute o seguinte comando quatro vezes para criar as quatro VMs, usando estas quatro combinações para [VM-NAME]
e [ZONE]
. O conteúdo do script é o mesmo para as quatro VMs.
[VM-NAME]
devm-a1
e[ZONE]
deus-west1-a
[VM-NAME]
devm-a2
e[ZONE]
deus-west1-a
[VM-NAME]
devm-c1
e[ZONE]
deus-west1-c
[VM-NAME]
devm-c2
e[ZONE]
deus-west1-c
gcloud compute instances create VM-NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check \ --subnet=lb-subnet \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'
Criar GCE_VM_IP
NEGs zonais
Os NEGs (neg-a
e neg-c
) precisam ser criados nas mesmas zonas que as VMs criadas na etapa anterior.
Console
Para criar um grupo de endpoints de rede zonal:
- Acesse a página "Grupos de endpoints da rede" no Google Cloud Console.
Acessar a página "Grupos de endpoints de rede" - Clique em Criar grupo de endpoints de rede.
- Insira um Nome para o NEG zonal:
neg-a
- Selecione o Tipo de grupo de endpoints da rede: Grupo de endpoints da rede (Zonal).
- Selecione Rede: lb-network
- Selecione a Sub-rede: lb-subnet
- Selecione a Zona: us-west1-a
- Clique em Criar.
- Repita essas etapas para criar um segundo NEG zonal chamado
neg-c
, na zona us-west1-c.
Adicione endpoints ao NEG zonal:
- Acesse a página "Grupos de endpoints da rede" no Google Cloud Console.
Acessar os grupos de endpoints de rede - Clique no Nome do primeiro grupo de endpoints de rede criado na etapa anterior (neg-a). Você verá a página Detalhes do grupo de endpoints de rede.
Na seção Endpoints da rede neste grupo, clique em Adicionar endpoint da rede. Você verá a página Adicionar endpoint de rede.
- Clique em Instância de VM e selecione vm-a1 para adicionar os endereços IP internos como endpoints da rede.
- Clique em Criar.
- Clique mais uma vez em Adicionar endpoint da rede e, em Instância de VM, selecione vm-a2.
- Clique em Criar.
Clique no Nome do segundo grupo de endpoints de rede criado na etapa anterior (neg-c). Você verá a página Detalhes do grupo de endpoints de rede.
Na seção Endpoints da rede neste grupo, clique em Adicionar endpoint da rede. Você verá a página Adicionar endpoint de rede.
- Clique em Instância de VM e selecione vm-c1 para adicionar os endereços IP internos como endpoints da rede.
- Clique em Criar.
- Clique mais uma vez em Adicionar endpoint da rede e, em Instância de VM, selecione vm-c2.
- Clique em Criar.
gcloud
Crie um NEG zonal
GCE_VM_IP
chamadoneg-a
emus-west1-a
usando o comandogcloud compute network-endpoint-groups create
:gcloud compute network-endpoint-groups create neg-a \ --network-endpoint-type=gce-vm-ip \ --zone=us-west1-a \ --network=lb-network \ --subnet=lb-subnet
Adicione endpoints a
neg-a
:gcloud compute network-endpoint-groups update neg-a \ --zone=us-west1-a \ --add-endpoint='instance=vm-a1' \ --add-endpoint='instance=vm-a2'
Crie um NEG zonal
GCE_VM_IP
chamadoneg-c
emus-west1-c
usando o comandogcloud compute network-endpoint-groups create
:gcloud compute network-endpoint-groups create neg-c \ --network-endpoint-type=gce-vm-ip \ --zone=us-west1-c \ --network=lb-network \ --subnet=lb-subnet
Adicione endpoints a
neg-c
:gcloud compute network-endpoint-groups update neg-c \ --zone=us-west1-c \ --add-endpoint='instance=vm-c1' \ --add-endpoint='instance=vm-c2'
Configurar componentes do balanceador de carga
Estas etapas configuram todos os componentes do balanceador de carga de rede de passagem interna:
Serviço de back-end: para este exemplo, você precisa transmitir o tráfego HTTP por meio do balanceador de carga. Portanto, você precisa usar TCP, não UDP.
Regra de encaminhamento: neste exemplo, criamos uma regra de encaminhamento interna.
Endereço IP interno: neste exemplo, você especifica um endereço IP interno,
10.1.2.99
, ao criar a regra de encaminhamento.
Console
gcloud
Crie uma nova verificação de integridade HTTP regional.
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
Crie o serviço de back-end:
gcloud compute backend-services create bs-ilb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
Adicione os dois NEGs zonais,
neg-a
eneg-c
, ao serviço de back-end:gcloud compute backend-services add-backend bs-ilb \ --region=us-west1 \ --network-endpoint-group=neg-a \ --network-endpoint-group-zone=us-west1-a
gcloud compute backend-services add-backend bs-ilb \ --region=us-west1 \ --network-endpoint-group=neg-c \ --network-endpoint-group-zone=us-west1-c
Crie uma regra de encaminhamento do serviço de back-end. Ao criar a regra de encaminhamento, especifique
10.1.2.99
para o endereço IP interno na sub-rede.gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=bs-ilb \ --backend-service-region=us-west1
Testar o balanceador de carga
Neste teste, o balanceador de carga é contatado por uma VM cliente separada, e não por uma VM de back-end do balanceador de carga. O comportamento esperado é que o tráfego seja distribuído entre as quatro VMs de back-end porque nenhuma afinidade de sessão foi configurada.
Criar uma VM do cliente de teste
Neste exemplo, criamos uma VM cliente (vm-client
) na mesma região das VMs de back-end (servidor). O cliente é usado para validar a configuração do balanceador de carga e demonstrar o comportamento esperado, conforme descrito na seção de teste.
Console
- Acesse a página Instâncias de VM no Console do Google Cloud.
Acessar a página "Instâncias de VM" - Clique em Criar instância.
- Defina o Nome como
vm-client
. - Defina a Zona como
us-west1-a
. - Clique em Opções avançadas e faça as seguintes alterações:
- Clique em Rede e adicione
allow-ssh
a Tags de rede. - Clique no botão de editar em Interfaces de rede e faça as alterações a seguir. Depois, clique em Concluído:
- Rede:
lb-network
- Sub-rede:
lb-subnet
- IP interno primário: temporário (automático)
- IP externo: temporário
- Rede:
- Clique em Rede e adicione
- Clique em Criar.
gcloud
A VM cliente pode estar em qualquer zona na mesma região que o balanceador de carga, podendo usar qualquer sub-rede nessa região. Neste exemplo, o cliente está na zona us-west1-a
e usa a mesma sub-rede das VMs de back-end.
gcloud compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=lb-subnet
Enviar tráfego ao balanceador de carga
Siga as etapas abaixo para se conectar ao balanceador de carga.
Conecte-se à instância da VM cliente.
gcloud compute ssh vm-client --zone=us-west1-a
Faça uma solicitação da Web para o balanceador de carga usando
curl
para contatar o endereço IP dele. Repita a solicitação para ver que as respostas provêm de diferentes VMs de back-end. O nome da VM que gera a resposta é exibido no texto na resposta HTML, em virtude do conteúdo de/var/www/html/index.html
em cada VM de back-end. As respostas esperadas são assim:Page served from: vm-a1
ePage served from: vm-a2
.curl http://10.1.2.99
A regra de encaminhamento está configurada para exibir as portas
80
,8008
,8080
e8088
. Para enviar tráfego para essas outras portas, anexe dois pontos (:
) e o número da porta após o endereço IP, desta maneira:curl http://10.1.2.99:8008
A seguir
- Para definir outras opções de configuração, como ativar o acesso global, aceitar tráfego em todas as portas e aceitar tráfego em várias portas usando duas regras de encaminhamento, consulte Outras opções de configuração para balanceadores de carga de rede de passagem interna.
- Para noções básicas importantes, consulte Visão geral do balanceador de carga de rede de passagem interna.
- Para informações importantes sobre failover, consulte Conceitos de failover para balanceadores de carga de rede de passagem interna.
- Para informações sobre como configurar o Logging e o Monitoring para balanceadores de carga de rede de passagem interna, consulte esta página.
- Para informações sobre como acessar balanceadores de carga de rede de passagem interna por redes de peering conectadas à rede VPC, consulte esta página.
- Para informações sobre como resolver problemas com o balanceador de carga de rede de passagem interna, consulte esta página.