Este guia faculta instruções para criar uma configuração de balanceador de carga de rede de encaminhamento externo com back-ends de grupos de destino. O exemplo pressupõe que tem vários servidores Web em instâncias do Compute Engine nos quais quer equilibrar o tráfego. Este cenário configura uma configuração de balanceamento de carga da camada 4 para distribuir o tráfego HTTP por instâncias em bom estado. As verificações de estado HTTP básicas estão configuradas para garantir que o tráfego é enviado apenas para instâncias em bom estado.
Este exemplo equilibra a carga do tráfego HTTP, mas pode usar balanceadores de carga de rede de encaminhamento externo baseados em conjunto de destino para equilibrar a carga do tráfego TCP, UDP e SSL. Antes de começar, leia a Vista geral do balanceador de carga de rede de encaminhamento externo para informações conceptuais sobre os balanceadores de carga de rede de encaminhamento externo.
Antes de começar
Instale a CLI do Google Cloud. Para uma vista geral completa da ferramenta,
consulte o guia da ferramenta gcloud. Pode encontrar comandos relacionados com o
equilíbrio de carga no grupo de comandos gcloud compute.
Também pode obter ajuda detalhada para qualquer comando gcloud através da flag --help:
gcloud compute http-health-checks create --help
Se não executou o Google Cloud CLI anteriormente, execute primeiro o comando
gcloud init para fazer a autenticação.
Além disso, tem de criar um endereço IP externo estático para o balanceador de carga. Se estiver a usar uma imagem fornecida pelo Compute Engine, as instâncias da máquina virtual (VM) são configuradas automaticamente para processar este endereço IP. Se estiver a usar qualquer outra imagem, tem de configurar este endereço como um alias em eth0 ou como um loopback em cada instância.
Este guia pressupõe que está familiarizado com o bash.
Configurar instâncias de VM do Compute Engine
Para este cenário de equilíbrio de carga, vai criar três instâncias de VM do Compute Engine e instalar o Apache nas mesmas. Adiciona uma regra de firewall que permite que o tráfego HTTP alcance as instâncias.
As instâncias que participam como VMs de back-end para equilibradores de carga de rede de encaminhamento direto externos têm de estar a executar o ambiente convidado do Linux, o ambiente convidado do Windows ou outros processos adequados que ofereçam uma funcionalidade equivalente.
Configurar as instâncias de back-end
Consola
Na Google Cloud consola, aceda à página Instâncias de VM.
Clique em Criar instância.
Defina Nome como
www1.Defina a Região como us-central1.
Defina a Zona como us-central1-b.
Em Disco de arranque, a imagem do SO predefinida do Debian GNU/Linux 12 (bookworm) já está selecionada.
Clique em Opções avançadas.
Clique em Rede e configure o seguinte campo:
- Para etiquetas de rede, introduza
network-lb-tag.
- Para etiquetas de rede, introduza
Clique em Gestão. Introduza o seguinte script no campo Script de arranque.
#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html
- Clique em Criar.
Crie uma instância denominada
www2com as mesmas definições, exceto com o seguinte script inserido no campo Automatização, Script de arranque.#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html
Crie uma instância denominada
www3com as mesmas definições, exceto com o seguinte script inserido no campo Automatização, Script de arranque.#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html
gcloud
Os comandos abaixo são todos executados no seu sistema local e pressupõem um pedido de comando bash.
Para ver os nomes, os atributos e o estado das imagens do SO, use o comando gcloud compute images list.
Crie três novas máquinas virtuais numa determinada zona e atribua-lhes todas a mesma etiqueta. Este exemplo define a zona como us-central1-b. A definição do campo
tagspermite-lhe fazer referência a todas estas instâncias de uma só vez, como com uma regra de firewall. Estes comandos também instalam o Apache em cada instância e atribuem a cada instância uma página inicial única.gcloud compute instances create www1 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"gcloud compute instances create www2 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html"gcloud compute instances create www3 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html"
api
Crie a instância www1 na zona us-central1-b com o
instances.insert
método
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances
{
"canIpForward": false,
"deletionProtection": false,
"disks": [
{
"type": "PERSISTENT",
"boot": true,
"mode": "READ_WRITE",
"autoDelete": true,
"deviceName": "www1",
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/debian-12-buster-v20220719",
"diskType": "projects/[PROJECT_ID]/zones/us-central1-b/diskTypes/pd-standard",
"diskSizeGb": "10"
}
}
],
"machineType": "projects/[PROJECT_ID]/zones/us-central1-b/machineTypes/e2-standard-2",
"metadata": {
"items": [
{
"key": "startup-script",
"value": "sudo apt-get update\nsudo apt-get install apache2 -y\nsudo a2ensite default-ssl\nsudo a2enmod ssl\nsudo service apache2 restart\necho '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"
}
]
},
"name": "www1",
"networkInterfaces": [
{
"network": "projects/[PROJECT_ID]/global/networks/default",
"subnetwork": "projects/[PROJECT_ID]/regions/us-central1/subnetworks/default"
}
],
"tags": {
"items": [
"network-lb-tag"
]
}
}
Crie instâncias com os nomes www2 e www3 com as mesmas definições, exceto
substitua www1 nos campos deviceName, value e name.
Criar uma regra de firewall para permitir tráfego externo para estas instâncias de VM
Consola
Na Google Cloud consola, aceda à página Políticas de firewall.
Clique em Criar regra de firewall.
Introduza um Nome de
www-firewall-network-lb.Selecione a Rede à qual a regra de firewall se aplica (Predefinição).
Em Segmentações, selecione Etiquetas de segmentação especificadas.
No campo Etiquetas alvo, introduza
network-lb-tag.Defina o Filtro de origem como Intervalos IPv4.
Defina os Intervalos IPv4 de origem como
0.0.0.0/0, o que permite tráfego de qualquer origem.Em Protocolos e portas especificados, selecione a caixa de verificação TCP e introduza
80.Clique em Criar. Pode demorar algum tempo até que a consola apresente a nova regra de firewall ou pode ter de clicar em Atualizar para ver a regra.
gcloud
gcloud compute firewall-rules create www-firewall-network-lb \
--target-tags network-lb-tag --allow tcp:80
api
Crie uma regra de firewall que permita todo o tráfego na sub-rede com o método
firewalls.insert
**
POST https://compute.googleapis.com/compute/projects/[PROJECT_ID]/global/firewalls
{
"name": "www-firewall-network-lb",
"direction": "INGRESS",
"priority": 1000,
"targetTags": [
"network-lb-tag"
],
"allowed": [
{
"IPProtocol": "tcp",
"ports": [
"80"
]
}
],
"sourceRanges": [
"0.0.0.0/0"
]
}
Obter os endereços IP externos das suas instâncias e verificar se estão em execução
Consola
Na Google Cloud consola, aceda à página Instâncias de VM.
Veja os endereços das suas instâncias na coluna IP externo.
Verifique se as suas instâncias estão em execução procurando uma marca de verificação verde à esquerda do nome da instância. Se não vir uma marca de verificação verde, consulte a página de resolução de problemas gerais para instâncias.
gcloud
Liste as suas instâncias para obter os respetivos endereços IP na coluna
EXTERNAL_IP.gcloud compute instances list
Verifique se cada instância está em execução.
Na linha de comandos, execute
curlusando o endereço IP externo de cada instância para confirmar que todas as instâncias respondem.curl http://[IP_ADDRESS]
api
Obtenha informações sobre a instância www1 com o método
instances.get
Certifique-se de que o campo status indica RUNNING e procure o endereço IP externo no campo natIP.
GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/www1
{
"kind": "compute#instance",
"id": "6734015273571474749",
"creationTimestamp": "2018-11-09T11:45:23.487-08:00",
"name": "www1",
"description": "",
"tags": {
"items": [
"network-lb-tag"
],
"fingerprint": "9GVlO4gPawg="
},
"machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/machineTypes/e2-standard-2",
"status": "RUNNING",
"zone": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b",
"canIpForward": false,
"networkInterfaces": [
{
"kind": "compute#networkInterface",
"network": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/subnetworks/default",
"networkIP": "10.128.0.2",
"name": "nic0",
"accessConfigs": [
{
"kind": "compute#accessConfig",
"type": "ONE_TO_ONE_NAT",
"name": "External NAT",
"natIP": "35.192.37.233",
"networkTier": "PREMIUM"
}
],
"fingerprint": "lxD5f5ua_sw="
}
],
"disks": [
{
"kind": "compute#attachedDisk",
"type": "PERSISTENT",
"mode": "READ_WRITE",
"source": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/disks/www1",
"deviceName": "www1",
"index": 0,
"boot": true,
"autoDelete": true,
"licenses": [
"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-buster"
],
"interface": "SCSI",
"guestOsFeatures": [
{
"type": "VIRTIO_SCSI_MULTIQUEUE"
}
]
}
],
"metadata": {
"kind": "compute#metadata",
"fingerprint": "IyHRmHoJx6E=",
"items": [
{
"key": "startup-script",
"value": "#! /bin/bash\n sudo apt-get update\n sudo apt-get install apache2 -y\n sudo service apache2 restart\n echo '\u003c!doctype html\u003e\u003chtml\u003e\u003cbody\u003e\u003ch1\u003ewww1\u003c/h1\u003e\u003c/body\u003e\u003c/html\u003e' | tee /var/www/html/index.html"
}
]
},
"serviceAccounts": [
{
"email": "674259759219-compute@developer.gserviceaccount.com",
"scopes": [
"https://www.googleapis.com/auth/devstorage.read_only",
"https://www.googleapis.com/auth/logging.write",
"https://www.googleapis.com/auth/monitoring.write",
"https://www.googleapis.com/auth/servicecontrol",
"https://www.googleapis.com/auth/service.management.readonly",
"https://www.googleapis.com/auth/trace.append"
]
}
],
"selfLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/www1",
"scheduling": {
"onHostMaintenance": "MIGRATE",
"automaticRestart": true,
"preemptible": false
},
"cpuPlatform": "Intel Haswell",
"labelFingerprint": "42WmSpB8rSM=",
"startRestricted": false,
"deletionProtection": false
}
Repita esta chamada API para www2 e www3.
Configurar o serviço de balanceamento de carga
Em seguida, configure o serviço de balanceamento de carga.
Quando configura o serviço de equilíbrio de carga, as suas instâncias de máquinas virtuais recebem pacotes destinados ao endereço IP externo estático que configura. Se estiver a usar uma imagem fornecida pelo Compute Engine, as suas instâncias são configuradas automaticamente para processar este endereço IP. Se estiver a usar outra imagem, tem de configurar este endereço como um alias em eth0 ou como um loopback em cada instância.
Consola
Não pode usar a Google Cloud consola para criar equilibradores de carga de rede de encaminhamento externo baseados em conjunto de destinos. Em alternativa, use o gcloud ou a API REST.
gcloud
Crie um endereço IP externo estático para o balanceador de carga
gcloud compute addresses create network-lb-ip-1 \ --region us-central1Adicione um recurso de verificação de funcionamento de HTTP antigo
Este exemplo usa as predefinições do mecanismo de verificação de funcionamento, mas também pode personalizar a verificação de funcionamento por si.
gcloud compute http-health-checks create basic-check
Adicione um grupo de destino
Adicione um conjunto de destino na mesma região que as instâncias da máquina virtual. Use a verificação de funcionamento criada no passo anterior para este conjunto de destino. Os conjuntos de destino requerem um serviço de verificação de estado para funcionar.
gcloud compute target-pools create www-pool \ --region us-central1 --http-health-check basic-checkAdicione as suas instâncias ao grupo de destino
gcloud compute target-pools add-instances www-pool \ --instances www1,www2,www3 \ --instances-zone us-central1-bAs instâncias num conjunto de destino têm de pertencer à mesma região, mas podem estar distribuídas por diferentes zonas na mesma região. Por exemplo, pode ter instâncias na zona
us-central1-fe instâncias na zonaus-central1-bnum único conjunto de destino porque estão na mesma região,us-central1.Adicione uma regra de encaminhamento
Adicione uma regra de encaminhamento que sirva em nome de um intervalo de portas e de endereços IP externos que apontam para o seu conjunto de destino. Para o campo
--address, use o endereço IP numérico ou o respetivo nome totalmente qualificado.gcloud compute forwarding-rules create www-rule \ --region us-central1 \ --ports 80 \ --address network-lb-ip-1 \ --target-pool www-pool
api
Crie um endereço IP externo estático para o balanceador de carga
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID/regions/us-central1/addresses { "name": "network-lb-ip-1" }Adicione uma verificação de funcionamento de HTTP antiga
Este exemplo usa as predefinições do mecanismo de verificação do estado de funcionamento, mas também pode personalizá-lo.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks { "name": "basic-check" }Adicione um grupo de destinos
Adicione um conjunto de destino na mesma região que as instâncias da máquina virtual. Use a verificação de funcionamento criada no passo anterior para este conjunto de destino. Os conjuntos de destino requerem um serviço de verificação de estado para funcionar.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools { "name": "www-pool", "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks/basic-check" ] }Adicione as suas instâncias ao grupo de destino
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-pool/addInstance { "instances": [ { "instance": "projects/[PROJECT_ID]/zones/us-central1-b/instances/www1" } ] }Repita esta chamada API para as instâncias
www2ewww3.As instâncias num conjunto de destino têm de pertencer à mesma região, mas podem estar distribuídas por diferentes zonas na mesma região. Por exemplo, pode ter instâncias na zona
us-central1-fe instâncias na zonaus-central1-bnum único conjunto de destino porque estão na mesma região,us-central1.Adicione uma regra de encaminhamento
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules { "name": "www-rule", "portRange": "80", "loadBalancingScheme": "EXTERNAL", "target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-network-lb" }
Enviar tráfego para as suas instâncias
Agora que o serviço de balanceamento de carga está configurado, pode começar a enviar tráfego para a regra de encaminhamento e ver o tráfego disperso para diferentes instâncias.
Procurar o endereço IP externo da regra de encaminhamento
Consola
- Aceda ao separador Regras de encaminhamento na página de balanceamento de carga Avançado
na Google Cloud consola.
Aceda ao separador Regras de encaminhamento - Localize
www-rule, a regra de encaminhamento usada pelo balanceador de carga. - Na coluna Endereço IP para
www-rule, tome nota do endereço IP externo indicado.
gcloud
Introduza o seguinte comando para ver o endereço IP externo da www-rule
regra de encaminhamento usada pelo balanceador de carga.
gcloud compute forwarding-rules describe www-rule --region us-central1
api
Veja o endereço IP externo da regra de encaminhamento www-rulecom o
forwardingRules.get
método
Na saída, procure o campo IPAddress.
GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules/www-rule
{
"kind": "compute#forwardingRule",
"id": "5133886346582800002",
"creationTimestamp": "2018-11-09T14:21:33.574-08:00",
"name": "www-rule",
"description": "",
"region": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1",
"IPAddress": "35.232.228.9",
"IPProtocol": "TCP",
"portRange": "80-80",
"target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-network-lb",
"selfLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules/www-rule",
"loadBalancingScheme": "EXTERNAL",
"networkTier": "PREMIUM"
}O ICMP não é suportado para instâncias de back-end
Os balanceadores de carga de rede de encaminhamento externo não enviam pacotes ICMP para instâncias de back-end. Se enviar um pacote ICMP, por exemplo, com ping ou traceroute, a resposta não é proveniente das instâncias de back-end do balanceador de carga.
Google Cloud A infraestrutura pode enviar uma resposta ICMP, mesmo que tenha regras de firewall que proíbam o tráfego ICMP nas instâncias de back-end do balanceador de carga. Não é possível alterar este comportamento.
Usar o comando curl para aceder ao endereço IP externo
A resposta ao comando curl alterna aleatoriamente entre as três instâncias.
Se a sua resposta não tiver êxito inicialmente, pode ter de aguardar aproximadamente
30 segundos para que a configuração seja totalmente carregada e as suas instâncias sejam
marcadas como em bom estado antes de tentar novamente:
$ while true; do curl -m1 IP_ADDRESS; done
O que se segue?
- Para saber como os balanceadores de carga de rede de encaminhamento externo funcionam com pools de destino, consulte a vista geral do balanceador de carga de rede de encaminhamento externo baseado em pools de destino.
- Para saber como os equilibradores de carga de rede de encaminhamento externo funcionam com serviços de back-end regionais em vez de conjuntos de destino, consulte o seguinte:
- Para configurar a proteção avançada contra DDoS de rede para um Network Load Balancer de passagem externo através do Cloud Armor, consulte o artigo Configure a proteção avançada contra DDoS de rede.
- Para saber mais sobre problemas e soluções alternativas quando usa um balanceador de carga de rede de encaminhamento externo para tráfego UDP, consulte o artigo Use UDP with external passthrough Network Load Balancers (Use o UDP com balanceadores de carga de rede de encaminhamento externo).
- Para eliminar recursos para que não lhe sejam faturados, consulte o artigo Limpe uma configuração de equilíbrio de carga.