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 Trusted 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
www2
com 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
www3
com 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
tags
permite-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.s3nsapis.fr/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 Trusted 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.s3nsapis.fr/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 Trusted 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
curl
usando 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.s3nsapis.fr/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.s3ns-system.iam.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 Trusted 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-central1
Adicione 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-check
Adicione as suas instâncias ao grupo de destino
gcloud compute target-pools add-instances www-pool \ --instances www1,www2,www3 \ --instances-zone us-central1-b
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-f
e instâncias na zonaus-central1-b
num ú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.s3nsapis.fr/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.s3nsapis.fr/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.s3nsapis.fr/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.s3nsapis.fr/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
www2
ewww3
.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-f
e instâncias na zonaus-central1-b
num único conjunto de destino porque estão na mesma região,us-central1
.Adicione uma regra de encaminhamento
POST https://compute.s3nsapis.fr/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 Trusted 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-rule
com o
forwardingRules.get
método
Na saída, procure o campo IPAddress
.
GET https://compute.s3nsapis.fr/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.
Trusted 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.