Google Cloud Os balanceadores de carga de rede de proxy clássicos permitem-lhe usar um único endereço IP para todos os utilizadores em todo o mundo. Os equilibradores de carga de rede de proxy clássicos encaminham automaticamente o tráfego para instâncias de back-end mais próximas do utilizador.
Esta página contém instruções para configurar um balanceador de carga de rede de proxy clássico com back-ends de grupo de instâncias de VM e proxy TCP de destino. Antes de começar, leia a vista geral do equilibrador de carga de rede do proxy externo para ver informações detalhadas sobre o funcionamento destes equilibradores de carga.
Vista geral da configuração
Este exemplo demonstra como configurar um Network Load Balancer de proxy externo para um serviço que existe em duas regiões: região A e região B.
Para efeitos do exemplo, o serviço é um conjunto de servidores Apache configurados para responder na porta 110
. Muitos navegadores não permitem a porta 110
, pelo que a secção de testes usa curl
.
Neste exemplo, configura o seguinte:
- Quatro instâncias distribuídas entre duas regiões
- Grupos de instâncias, que contêm as instâncias
- Uma verificação de funcionamento para validar o estado de funcionamento da instância
- Um serviço de back-end que monitoriza as instâncias e impede que excedam a utilização configurada
- O proxy TCP de destino
- Um endereço IPv4 estático externo e uma regra de encaminhamento que envia tráfego de utilizadores para o proxy
- Um endereço IPv6 estático externo e uma regra de encaminhamento que envia tráfego de utilizadores para o proxy
- Uma regra de firewall que permite que o tráfego do balanceador de carga e do verificador de estado de funcionamento alcance as instâncias
Depois de configurar o balanceador de carga, teste a configuração.
Autorizações
Para seguir este guia, tem de conseguir criar instâncias e modificar uma rede num projeto. Tem de ser proprietário ou editor do projeto, ou ter todas as seguintes funções do IAM do Compute Engine:
Tarefa | Função necessária |
---|---|
Crie redes, sub-redes e componentes do balanceador de carga | Administrador da rede |
Adicione e remova regras de firewall | Administrador de segurança |
Crie instâncias | Administrador de instâncias do Compute |
Para mais informações, consulte os seguintes guias:
Configure back-ends de grupos de instâncias
Esta secção mostra como criar grupos de instâncias básicos, adicionar instâncias aos mesmos e, em seguida, adicionar essas instâncias a um serviço de back-end com uma verificação de estado. Normalmente, um sistema de produção usaria grupos de instâncias geridos com base em modelos de instâncias, mas esta configuração é mais rápida para os testes iniciais.
Configure instâncias
Para fins de teste, instale o Apache em quatro instâncias, duas em cada um de dois grupos de instâncias. Normalmente, os balanceadores de carga de rede de proxy externos não são usados para tráfego HTTP, mas o software Apache é usado frequentemente para testes.
Neste exemplo, as instâncias são criadas com a etiqueta tcp-lb
. Esta etiqueta é usada posteriormente pela regra de firewall.
Consola
Crie instâncias
Na Google Cloud consola, aceda à página Instâncias de VM.
Clique em Criar instância.
Defina Nome como
vm-a1
.Defina a Região como
REGION_A
.Defina a Zona como
ZONE_A
.Clique em Opções avançadas.
Clique em Rede e configure o seguinte campo:
- Para etiquetas de rede, introduza
tcp-lb
,allow-health-check-ipv6
.
- Para etiquetas de rede, introduza
Clique em Gestão. Introduza o seguinte script no campo Script de arranque.
sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-a1</h1></body></html>' | sudo tee /var/www/html/index.html
Clique em Criar.
Crie vm-a2
com as mesmas definições, exceto com o seguinte script no campo Script de arranque:
sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-a2</h1></body></html>' | sudo tee /var/www/html/index.html
Crie vm-b1
com as mesmas definições, exceto com a
região definida como REGION_B
e a
zona definida como ZONE_B
.
Introduza o seguinte script no campo Script de arranque:
sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-b1</h1></body></html>' | sudo tee /var/www/html/index.html
Crie vm-b2
com as mesmas definições, exceto com a
região definida como REGION_B
e a
zona definida como ZONE_B
.
Introduza o seguinte script no campo Script de arranque:
sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-b2</h1></body></html>' | sudo tee /var/www/html/index.html
gcloud
Crie
vm-a1
na zonaZONE_A
gcloud compute instances create vm-a1 \ --image-family debian-12 \ --image-project debian-cloud \ --tags tcp-lb \ --zone ZONE_A \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-a1</h1></body></html>' | tee /var/www/html/index.html EOF"
Crie
vm-a2
na zonaZONE_A
gcloud compute instances create vm-a2 \ --image-family debian-12 \ --image-project debian-cloud \ --tags tcp-lb \ --zone ZONE_A \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-a2</h1></body></html>' | tee /var/www/html/index.html EOF"
Crie
vm-b1
na zonaZONE_B
gcloud compute instances create vm-b1 \ --image-family debian-12 \ --image-project debian-cloud \ --tags tcp-lb \ --zone ZONE_B \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-b1</h1></body></html>' | tee /var/www/html/index.html EOF"
Crie
vm-b2
na zonaZONE_B
gcloud compute instances create vm-b2 \ --image-family debian-12 \ --image-project debian-cloud \ --tags tcp-lb \ --zone ZONE_B \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>vm-b2</h1></body></html>' | tee /var/www/html/index.html EOF"
Crie grupos de instâncias
Nesta secção, cria um grupo de instâncias em cada zona e adiciona as instâncias.
Consola
Na Google Cloud consola, aceda à página Grupos de instâncias.
Clique em Criar grupo de instâncias.
Clique em Novo grupo de instâncias não gerido.
Defina o Nome como
instance-group-a
.Defina a Zona como
ZONE_A
.Em Mapeamento de portas, clique em Adicionar porta. Um balanceador de carga envia tráfego para um grupo de instâncias através de uma porta designada. Crie uma porta com nome para mapear o tráfego de entrada para um número de porta específico.
- Defina Nome da portabilidade como
tcp110
. - Defina Transferir números como
110
.
- Defina Nome da portabilidade como
Em Instâncias de VM, selecione
vm-a1
evm-a2
.Deixe as outras definições como estão.
Clique em Criar.
Repita os passos, mas defina os seguintes valores:
- Nome:
instance-group-b
- Região:
REGION_B
- Zona:
ZONE_B
- Nome da porta:
tcp110
- Números de portas:
110
- Instâncias: vm-b1 e vm-b2.
- Nome:
gcloud
Crie o grupo de instâncias
instance-group-a
.gcloud compute instance-groups unmanaged create instance-group-a \ --zone ZONE_A
Crie uma porta com nome para o grupo de instâncias.
gcloud compute instance-groups set-named-ports instance-group-a \ --named-ports tcp110:110 \ --zone ZONE_A
Adicione
vm-a1
evm-a2
ainstance-group-a
.gcloud compute instance-groups unmanaged add-instances instance-group-a \ --instances vm-a1,vm-a2 \ --zone ZONE_A
Crie o grupo de instâncias
us-ig2
.gcloud compute instance-groups unmanaged create instance-group-b \ --zone ZONE_B
Crie uma porta com nome para o grupo de instâncias.
gcloud compute instance-groups set-named-ports instance-group-b \ --named-ports tcp110:110 \ --zone ZONE_B
Adicione
vm-b1
evm-b2
a instance-group-bgcloud compute instance-groups unmanaged add-instances instance-group-b \ --instances vm-b1,vm-b2 \ --zone ZONE_B
Agora, tem um grupo de instâncias por região. Cada grupo de instâncias tem duas instâncias de VM.
Crie uma regra de firewall para o balanceador de carga de rede de proxy externo
Configure a firewall para permitir o tráfego do balanceador de carga e do verificador de estado para as instâncias. Neste caso, vamos abrir a porta TCP 110. A verificação de estado vai usar a mesma porta. Uma vez que o tráfego entre o equilibrador de carga e as suas instâncias usa IPv4, só é necessário abrir intervalos IPv4.
Consola
Na Google Cloud consola, aceda à página Políticas de firewall.
Clique em Criar regra de firewall.
No campo Nome, introduza
allow-tcp-lb-and-health
.Selecione uma rede.
Em Segmentações, selecione Etiquetas de segmentação especificadas.
Defina as etiquetas de destino como
tcp-lb
.Defina o Filtro de origem como Intervalos IPv4.
Defina os Intervalos de IPv4 de origem para
130.211.0.0/22
35.191.0.0/16
.Em Protocolos e portas, defina Protocolos e portas especificados como
tcp:110
.Clique em Criar.
gcloud
gcloud compute firewall-rules create allow-tcp-lb-and-health \ --source-ranges 130.211.0.0/22,35.191.0.0/16 \ --target-tags tcp-lb \ --allow tcp:110
Configure o balanceador de carga
Consola
Inicie a configuração
Na Google Cloud consola, aceda à página Equilíbrio de carga.
- Clique em Criar equilibrador de carga.
- Para Tipo de balanceador de carga, selecione Balanceador de carga de rede (TCP/UDP/SSL) e clique em Seguinte.
- Para Proxy ou passagem, selecione Proxy de balanceamento de carga e clique em Seguinte.
- Para Público ou interno, selecione Público (externo) e clique em Seguinte.
- Para a Implementação global ou de região única, selecione Melhor para cargas de trabalho globais e clique em Seguinte.
- Para Geração do balanceador de carga, selecione Proxy clássico Balanceador de carga de rede e clique em Seguinte.
- Clique em Configurar.
Configuração básica
Defina o Nome como my-tcp-lb
.
Configuração do back-end
- Clique em Configuração de back-end.
- Na lista Tipo de back-end, selecione Grupos de instâncias.
- Na lista Protocolo, selecione TCP.
- Configure a verificação de estado:
- Na lista Verificação de funcionamento, selecione Criar verificação de funcionamento.
- No campo Nome, introduza
my-tcp-health-check
. - Na lista Protocolo, selecione TCP.
- No campo Porta, introduza
110
. - Mantenha os restantes valores predefinidos.
- Clique em Criar.
- Configure o primeiro back-end:
- Em Novo back-end, selecione o grupo de instâncias
instance-group-a
. - Mantenha os restantes valores predefinidos.
- Em Novo back-end, selecione o grupo de instâncias
- Configure o segundo back-end:
- Clique em Adicionar back-end.
- Selecione o grupo de instâncias
instance-group-b
. - Em Números de portas, elimine
80
e adicione110
.
- Na Google Cloud consola, verifique se existe uma marca de verificação junto a Configuração de back-end. Caso contrário, verifique novamente se concluiu todos os passos.
Configuração do frontend
- Clique em Configuração do front-end.
- Adicione a primeira regra de encaminhamento:
- Introduza um Nome de
my-tcp-lb-forwarding-rule
. - Em Protocolo, selecione TCP.
- Em Endereço IP, selecione Criar endereço IP:
- Introduza um Nome de
tcp-lb-static-ip
. - Clique em Reservar.
- Introduza um Nome de
- Defina Porta como
110
. - Neste exemplo, não ative o protocolo proxy porque não funciona com o software do servidor HTTP Apache. Para mais informações, consulte o artigo Protocolo de proxy.
- Clique em Concluído.
- Introduza um Nome de
- Adicione a segunda regra de encaminhamento:
- Clique em Adicionar IP e porta do front-end.
- Introduza um Nome de
my-tcp-lb-ipv6-forwarding-rule
. - Em Protocolo, selecione TCP.
- Defina a versão do IP como
IPv6
. - Em Endereço IP, clique em Criar endereço IP.
- Introduza um nome de
tcp-lb-ipv6-static-ip
. - Clique em Reservar.
- Introduza um nome de
- Defina Porta como
110
. - Neste exemplo, não ative o protocolo proxy porque não funciona com o software do servidor HTTP Apache. Para mais informações, consulte o artigo Protocolo de proxy.
- Clique em Concluído.
Na Google Cloud consola, verifique se existe uma marca de verificação junto a Configuração do front-end. Caso contrário, verifique novamente se concluiu todos os passos anteriores.
Reveja e finalize
- Clique em Rever e finalizar.
- Reveja as definições de configuração do equilibrador de carga.
- Opcional: clique em Código equivalente para ver o pedido da API REST que vai ser usado para criar o balanceador de carga.
- Clique em Criar.
gcloud
- Crie uma verificação de funcionamento.
gcloud compute health-checks create tcp my-tcp-health-check --port 110
- Crie um serviço de back-end.
gcloud compute backend-services create my-tcp-lb \ --load-balancing-scheme EXTERNAL \ --global-health-checks \ --global \ --protocol TCP \ --health-checks my-tcp-health-check \ --timeout 5m \ --port-name tcp110
- Adicione grupos de instâncias ao seu serviço de back-end.
gcloud compute backend-services add-backend my-tcp-lb \ --global \ --instance-group instance-group-a \ --instance-group-zone ZONE_A \ --balancing-mode UTILIZATION \ --max-utilization 0.8
gcloud compute backend-services add-backend my-tcp-lb \ --global \ --instance-group instance-group-b \ --instance-group-zone ZONE_B \ --balancing-mode UTILIZATION \ --max-utilization 0.8
- Configure um proxy TCP de destino. Se quiser ativar o
cabeçalho do proxy, defina-o como
PROXY_V1
em vez deNONE
.gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy \ --backend-service my-tcp-lb \ --proxy-header NONE
- Reserve endereços IPv4 e IPv6 estáticos globais.
Os seus clientes podem usar estes endereços IP para aceder ao seu serviço com balanceamento de carga.
gcloud compute addresses create tcp-lb-static-ipv4 \ --ip-version=IPV4 \ --global
gcloud compute addresses create tcp-lb-static-ipv6 \ --ip-version=IPV6 \ --global
- Configure regras de encaminhamento globais para os dois endereços.
gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \ --load-balancing-scheme EXTERNAL \ --global \ --target-tcp-proxy my-tcp-lb-target-proxy \ --address tcp-lb-static-ipv4 \ --ports 110
gcloud compute forwarding-rules create my-tcp-lb-ipv6-forwarding-rule \ --load-balancing-scheme EXTERNAL \ --global \ --target-tcp-proxy my-tcp-lb-target-proxy \ --address tcp-lb-static-ipv6 \ --ports 110
Teste o balanceador de carga
Obtenha o endereço IP do balanceador de carga.
Para obter o endereço IPv4, execute o seguinte comando:
gcloud compute addresses describe tcp-lb-static-ipv4
Para obter o endereço IPv6, execute o seguinte comando:
gcloud compute addresses describe tcp-lb-static-ipv6
Envie tráfego para o balanceador de carga executando o seguinte comando. Substitua
LB_IP_ADDRESS
pelo endereço IPv4 ou IPv6 do seu equilibrador de carga.curl -m1 LB_IP_ADDRESS:110
Por exemplo, se o endereço IPv6 atribuído for
[2001:db8:1:1:1:1:1:1/96]:110
, o comando deve ter o seguinte aspeto:curl -m1 http://[2001:db8:1:1:1:1:1:1]:110
Se não conseguir aceder ao equilibrador de carga, experimente os passos descritos em Resolução de problemas da configuração.
Opções de configuração adicionais
Esta secção expande o exemplo de configuração para oferecer opções de configuração alternativas e adicionais. Todas as tarefas são opcionais. Pode realizá-las por qualquer ordem.
Protocolo PROXY para reter informações de ligação do cliente
O Network Load Balancer de proxy termina as ligações TCP do cliente e cria novas ligações às instâncias. Por predefinição, as informações de porta e IP do cliente original não são preservadas.
Para preservar e enviar as informações de ligação originais para as suas instâncias, ative o protocolo PROXY versão 1. Este protocolo envia um cabeçalho adicional que contém o endereço IP de origem, o endereço IP de destino e os números das portas para a instância como parte do pedido.
Certifique-se de que as instâncias de back-end do balanceador de carga de rede do proxy estão a executar servidores que suportam cabeçalhos do protocolo PROXY. Se os servidores não estiverem configurados para suportar cabeçalhos do protocolo PROXY, as instâncias de back-end devolvem respostas vazias.
Se definir o protocolo PROXY para o tráfego de utilizadores, também o pode definir para as verificações de funcionamento. Se estiver a verificar o estado de funcionamento e a publicar conteúdo na mesma porta, defina o --proxy-header
da verificação de funcionamento de modo a corresponder à definição do balanceador de carga.
Normalmente, o cabeçalho do protocolo PROXY é uma única linha de texto legível pelo utilizador no seguinte formato:
PROXY TCP4 <client IP> <load balancing IP> <source port> <dest port>\r\n
O exemplo seguinte mostra um protocolo PROXY:
PROXY TCP4 192.0.2.1 198.51.100.1 15221 110\r\n
No exemplo anterior, o IP do cliente é 192.0.2.1
, o IP de equilíbrio de carga é 198.51.100.1
, a porta do cliente é 15221
e a porta de destino é 110
.
Quando o IP do cliente não é conhecido, o balanceador de carga gera um cabeçalho do protocolo PROXY no seguinte formato:
PROXY UNKNOWN\r\n
Atualize o cabeçalho do protocolo PROXY para o proxy de destino
A configuração de exemplo do balanceador de carga nesta página mostra como ativar o cabeçalho do protocolo PROXY durante a criação do balanceador de carga de rede do proxy. Use estes passos para alterar o cabeçalho do protocolo PROXY para um proxy de destino existente.
Consola
Na Google Cloud consola, aceda à página Equilíbrio de carga.
- Clique em Editar para o equilibrador de carga.
- Clique em Configuração do front-end.
- Altere o valor do campo Protocolo proxy para Ativado.
- Clique em Atualizar para guardar as alterações.
gcloud
No comando seguinte, edite o campo --proxy-header
e defina-o como NONE
ou PROXY_V1
, consoante o seu requisito.
gcloud compute target-tcp-proxies update TARGET_PROXY_NAME \ --proxy-header=[NONE | PROXY_V1]
Configure a afinidade de sessão
A configuração de exemplo cria um serviço de back-end sem afinidade de sessão.
Estes procedimentos mostram como atualizar um serviço de back-end para o exemplo do equilibrador de carga, de modo que o serviço de back-end use a afinidade de IP do cliente ou a afinidade de cookies gerados.
Quando a afinidade de IP do cliente está ativada, o balanceador de carga direciona os pedidos de um cliente específico para a mesma VM de back-end com base num hash criado a partir do endereço IP do cliente e do endereço IP do balanceador de carga (o endereço IP externo de uma regra de encaminhamento externo).
Consola
Para ativar a afinidade de sessão de IP do cliente:
Na Google Cloud consola, aceda à página Equilíbrio de carga.
Clique em Back-ends.
Clique em my-tcp-lb (o nome do serviço de back-end que criou para este exemplo) e clique em Editar.
Na página Detalhes do serviço de back-end, clique em Configuração avançada.
Em Afinidade de sessão, selecione IP do cliente no menu.
Clique em Atualizar.
gcloud
Use o seguinte comando da CLI Google Cloud para atualizar o serviço de back-end, especificando a afinidade da sessão do IP do cliente:my-tcp-lb
gcloud compute backend-services update my-tcp-lb \ --global \ --session-affinity=CLIENT_IP
API
Para definir a afinidade de sessão do IP do cliente, faça um pedido PATCH
ao método
backendServices/patch
.
PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/us-west1/backendServices/my-tcp-lb
{
"sessionAffinity": "CLIENT_IP"
}
Ative a drenagem de ligações
Pode ativar a drenagem de ligações nos serviços de back-end para garantir uma interrupção mínima para os seus utilizadores quando uma instância que está a servir tráfego é terminada, removida manualmente ou removida por um escalador automático. Para saber mais sobre a drenagem de ligações, leia a documentação Ativar a drenagem de ligações.
O que se segue?
- Vista geral do External proxy Network Load Balancer
- Registo e monitorização do Proxy Network Load Balancer
- Limpe uma configuração de equilíbrio de carga