Um balanceador de carga de rede de encaminhamento externo é um balanceador de carga regional da camada 4. Os balanceadores de carga de rede de encaminhamento externo distribuem o tráfego TCP e UDP entre instâncias de máquinas virtuais (VMs) de back-end na mesma região numa rede da nuvem virtual privada (VPC). Um balanceador de carga de encaminhamento externo pode receber tráfego de qualquer uma das seguintes origens:
- Qualquer cliente na Internet
- Google Cloud VMs com IPs externos
- Google Cloud VMs que têm acesso à Internet através do Cloud NAT ou do NAT baseado em instâncias
Consoante a configuração da regra de encaminhamento, cada equilibrador de carga baseado em conjunto de destino suporta um dos seguintes tipos de tráfego de protocolo:
- TCP
- UDP
- TCP e UDP
O âmbito do balanceador de carga é regional e não global. Isto significa que todas as instâncias de back-end de um balanceador de carga de rede de encaminhamento externo têm de estar localizadas na mesma região. Pode colocar back-ends em qualquer zona da região.
Os balanceadores de carga de rede de encaminhamento externo suportam todas as portas. Pode usar um balanceador de carga de rede de encaminhamento externo para equilibrar o tráfego TCP ou UDP. Uma vez que o balanceador de carga é um balanceador de carga de passagem, os seus back-ends terminam a ligação TCP com balanceamento de carga ou os próprios pacotes UDP. Por exemplo, pode executar um servidor Web HTTPS nos seus back-ends e usar um balanceador de carga de rede de passagem externo para encaminhar pedidos para o mesmo, terminando o TLS nos próprios back-ends.
Se estiver a criar aplicações no GKE, recomendamos que use o controlador de serviços do GKE integrado, que implementa equilibradores de carga em nome dos utilizadores do GKE. Google Cloud Isto é igual à arquitetura de balanceamento de carga autónoma, exceto que o respetivo ciclo de vida é totalmente automatizado e controlado pelo GKE. Para ver detalhes, consulte o artigo Exponha apps através de serviços.
Arquitetura
O balanceador de carga é composto por vários componentes de configuração. Um único equilibrador de carga pode ter o seguinte:
- Um grupo de destino
- Várias regras de encaminhamento
Um Network Load Balancer de encaminhamento externo tem sempre um grupo de destino. Várias regras de encaminhamento podem fazer referência ao conjunto de destino.
O conjunto de destino é um back-end para o balanceador de carga. Especifica as instâncias de back-end entre as quais o tráfego é equilibrado. Cada regra de encaminhamento é um front-end para o balanceador de carga. Tenha em atenção que existem limites para o número de regras de encaminhamento e conjuntos de destino por projeto.
Os balanceadores de carga de encaminhamento externo equilibram a carga nos seus sistemas com base nos dados do protocolo IP recebidos, como o endereço, a porta e o tipo de protocolo.
O Network Load Balancer de passagem externo é um balanceador de carga de passagem, pelo que os seus back-ends recebem o pedido do cliente original. O balanceador de carga de rede de encaminhamento externo não faz nenhum encaminhamento nem descarregamento de Transport Layer Security (TLS). O tráfego é encaminhado diretamente para as suas VMs.
Quando cria uma regra de encaminhamento para o equilibrador de carga, recebe um endereço IP virtual (VIP) efémero ou reserva um VIP originário de um bloco de rede regional.
Em seguida, associa essa regra de encaminhamento aos seus conjuntos de destinos. O VIP é transmitido por multicast a partir dos pontos de presença globais da Google, mas os back-ends são regionais. O balanceador de carga não pode ter back-ends que abranjam várias regiões.
Pode usar Google Cloud firewalls para controlar ou filtrar o acesso às VMs de back-end.
O Network Load Balancer de passagem externo examina as portas de origem e destino, o endereço IP e o protocolo para determinar como encaminhar os pacotes. Para o tráfego TCP, pode modificar o comportamento de encaminhamento do balanceador de carga configurando a afinidade de sessão. O balanceador de carga de encaminhamento externo encaminha pacotes para a primeira interface de rede
(nic0
) das instâncias no conjunto de destino.
O balanceador de carga preserva os endereços IP de origem dos pacotes recebidos. O endereço IP de destino dos pacotes recebidos é o endereço IP externo regional associado à regra de encaminhamento do balanceador de carga.
Algoritmo de distribuição de carga
Por predefinição, para distribuir o tráfego pelas instâncias, o valor de afinidade de sessão está definido como NONE
. O Cloud Load Balancing escolhe uma instância com base num hash do IP e da porta de origem, do IP e da porta de destino, e do protocolo. Isto significa que as ligações TCP recebidas são distribuídas pelas instâncias e que cada nova ligação pode ser encaminhada para uma instância diferente. Todos os pacotes de uma ligação são direcionados para a mesma instância até a ligação ser fechada. As ligações estabelecidas não são tidas em conta no processo de equilíbrio de carga.
Independentemente da definição de afinidade de sessão, todos os pacotes de uma ligação são direcionados para a instância escolhida até a ligação ser fechada. Uma associação existente não tem impacto nas decisões de equilíbrio de carga para novas associações recebidas. Isto pode resultar num desequilíbrio entre os back-ends se estiverem a ser usadas ligações TCP de longa duração.
Pode escolher uma definição de afinidade de sessão diferente se precisar de várias ligações de um cliente para a mesma instância.
Grupos de destino
Um recurso target pool define um grupo de instâncias que devem receber tráfego de entrada de regras de encaminhamento. Quando uma regra de encaminhamento direciona o tráfego para um grupo de destino, o Cloud Load Balancing escolhe uma instância destes grupos de destino com base num hash do IP e da porta de origem, bem como do IP e da porta de destino. Cada conjunto de destino opera numa única região e distribui o tráfego para a primeira interface de rede (nic0
) da instância de back-end. Para mais informações sobre como o tráfego é distribuído pelas instâncias,
consulte a secção Algoritmo de distribuição de carga.
Os balanceadores de carga de encaminhamento externo não são proxies. As respostas das VMs de back-end vão diretamente para os clientes e não regressam através do equilibrador de carga. O balanceador de carga preserva os endereços IP de origem dos pacotes. O endereço IP de destino dos pacotes recebidos é o endereço IP externo regional associado à regra de encaminhamento do balanceador de carga. Consequentemente:
As instâncias que participam como VMs de back-end para equilibradores de carga de rede de encaminhamento externo têm de executar o ambiente guest Linux, ambiente guest Windows> adequado ou outros processos que ofereçam uma capacidade equivalente.
O ambiente do SO convidado (ou um processo equivalente) é responsável por configurar rotas locais em cada VM de back-end. Estas rotas permitem que a VM aceite pacotes com um destino que corresponda ao endereço IP da regra de encaminhamento do balanceador de carga.
Nas instâncias de back-end que aceitam tráfego com balanceamento de carga, tem de configurar o software para associar ao endereço IP associado à regra de encaminhamento do balanceador de carga (ou a qualquer endereço IP,
0.0.0.0/0
).
Os equilibradores de carga de encaminhamento externo suportam o autoscaler do Compute Engine, o que permite aos utilizadores realizar o dimensionamento automático nos grupos de instâncias num conjunto de destino com base na utilização do back-end. Para mais informações, consulte o artigo Dimensionamento com base na utilização da CPU.
Se pretender que o seu conjunto de destino contenha uma única instância de VM, considere usar a funcionalidade de encaminhamento de protocolos.
Só é possível usar conjuntos de destinos com regras de encaminhamento que processam tráfego TCP e UDP. Para todos os outros protocolos, tem de criar uma instância de destino. Tem de criar um conjunto de destinos antes de o poder usar com uma regra de encaminhamento. Cada projeto pode ter até 50 conjuntos de alvos.
Regras de encaminhamento
As regras de encaminhamento funcionam em conjunto com os conjuntos de destino para suportar o balanceamento de carga. Para usar o balanceamento de carga, tem de criar uma regra de encaminhamento que direcione o tráfego para pools de destino específicos. Não é possível equilibrar a carga do seu tráfego sem uma regra de encaminhamento.
Cada regra de encaminhamento estabelece correspondência entre um endereço IP específico, um protocolo e, opcionalmente, um intervalo de portas e um único conjunto de destino. Quando o tráfego é enviado para um endereço IP externo servido por uma regra de encaminhamento, a regra de encaminhamento direciona esse tráfego para o conjunto de destino correspondente.
Se estiver a fazer o balanceamento de carga de pacotes UDP que provavelmente vão ser fragmentados antes de chegarem à sua Google Cloud rede VPC, consulte o artigo Balanceamento de carga e pacotes UDP fragmentados.
Os balanceadores de carga de rede de encaminhamento externo baseados em pool segmentados suportam os seguintes protocolos
para cada regra de encaminhamento: TCP
ou UDP
. Se quiser que o balanceador de carga encaminhe todo o tráfego do protocolo IP, tem de usar um balanceador de carga de rede de passagem externo baseado em serviço de back-end.
Várias regras de encaminhamento
Pode configurar várias regras de encaminhamento externas regionais para o mesmo Network Load Balancer de passagem externa. Opcionalmente, cada regra de encaminhamento pode ter um endereço IP externo regional diferente ou várias regras de encaminhamento podem ter o mesmo endereço IP externo regional.
A configuração de várias regras de encaminhamento externo regionais pode ser útil para os seguintes exemplos de utilização:
- Tem de configurar mais do que um endereço IP externo para o mesmo conjunto de destino.
- Tem de configurar intervalos de portas diferentes ou protocolos diferentes usando o mesmo endereço IP externo para o mesmo conjunto de destino.
Quando usar várias regras de encaminhamento, certifique-se de que configura o software em execução nas VMs de back-end para que se associe a todos os endereços IP necessários. Isto é necessário porque o endereço IP de destino dos pacotes entregues através do balanceador de carga é o endereço IP externo regional associado à respetiva regra de encaminhamento externo regional.
Verificações de funcionamento
As verificações de funcionamento garantem que o Compute Engine encaminha novas ligações apenas para instâncias que estão em funcionamento e prontas para as receber. O Compute Engine envia pedidos de verificação de estado a cada instância na frequência especificada. Depois de uma instância exceder o número permitido de falhas na verificação de estado, deixa de ser considerada uma instância elegível para receber novo tráfego.
Para permitir o encerramento e o fecho normais das ligações TCP, as ligações existentes não são terminadas ativamente. No entanto, não é garantido que as ligações existentes a um back-end não saudável permaneçam viáveis durante longos períodos. Se possível, deve iniciar um processo de encerramento normal o mais rapidamente possível para o seu back-end não saudável.
O verificador de estado continua a consultar instâncias não íntegras e devolve uma instância ao conjunto quando ocorre o número especificado de verificações bem-sucedidas. Se todas as instâncias estiverem marcadas como UNHEALTHY
, o balanceador de carga direciona o novo tráfego para todas as instâncias existentes.
Os balanceadores de carga de rede de encaminhamento externo baseiam-se em verificações de funcionamento HTTP antigas para determinar o estado de funcionamento das instâncias. Mesmo que o seu serviço não use HTTP, tem de executar um servidor Web básico em cada instância que o sistema de verificação de estado pode consultar.
As verificações de funcionamento HTTPS antigas não são suportadas para balanceadores de carga de rede de passagem externos e não podem ser usadas com a maioria dos outros tipos de balanceadores de carga.
Regras de firewall
As verificações de funcionamento dos balanceadores de carga de rede de encaminhamento externo são enviadas a partir destes intervalos de IP. Tem de criar regras de firewall de permissão de entrada que permitam o tráfego desses intervalos.
Os balanceadores de carga de rede de encaminhamento externo são balanceadores de carga de encaminhamento, o que significa que as suas regras de firewall têm de permitir o tráfego dos endereços IP de origem do cliente. Se o seu serviço estiver aberto à Internet, é mais fácil permitir o tráfego de todos os intervalos de IP. Se quiser restringir o acesso para que apenas determinados endereços IP de origem sejam permitidos, pode configurar regras de firewall para aplicar essa restrição, mas tem de permitir o acesso a partir dos intervalos de IP de verificação de estado.
Para ver um exemplo de regra de firewall e um exemplo de configuração, consulte o artigo Regras de firewall para balanceadores de carga de rede de encaminhamento externo.
Endereços IP para pacotes de pedidos e de retorno
Quando uma VM de back-end recebe um pacote com balanceamento de carga de um cliente, a origem e o destino do pacote são os seguintes:
- Origem: o endereço IP externo associado a uma Google Cloud VM ou um endereço IP encaminhável pela Internet de um sistema que se liga ao equilibrador de carga.
- Destino: o endereço IP da regra de encaminhamento do balanceador de carga.
Uma vez que o balanceador de carga é um balanceador de carga de passagem (não um proxy), os pacotes chegam com o endereço IP de destino da regra de encaminhamento do balanceador de carga. Configure o software executado nas VMs de back-end para fazer o seguinte:
- Ouvir (associar a) o endereço IP da regra de encaminhamento do balanceador de carga ou qualquer endereço IP (
0.0.0.0
ou::
) - Se o protocolo da regra de encaminhamento do balanceador de carga suportar portas: ouça (associe-se a) uma porta incluída na regra de encaminhamento do balanceador de carga
Os pacotes de retorno são enviados diretamente das VMs de back-end do balanceador de carga para o cliente. Os endereços IP de origem e destino do pacote de retorno dependem do protocolo:
- O TCP é orientado para a ligação, pelo que as VMs de back-end têm de responder com pacotes cujos endereços IP de origem correspondam ao endereço IP da regra de encaminhamento para que o cliente possa associar os pacotes de resposta à ligação TCP adequada.
- O UDP não tem ligação, pelo que as VMs de back-end podem enviar pacotes de resposta cujos endereços IP de origem correspondem ao endereço IP da regra de encaminhamento ou correspondem a qualquer endereço IP atribuído à VM. Na prática, a maioria dos clientes espera que a resposta seja proveniente do mesmo endereço IP para o qual enviaram pacotes.
A tabela seguinte resume as origens e os destinos dos pacotes de respostas:
Tipo de tráfego | Origem | Destino |
---|---|---|
TCP | O endereço IP da regra de encaminhamento do balanceador de carga | A origem do pacote de pedido |
UDP | Para a maioria dos exemplos de utilização, o endereço IP da regra de encaminhamento do balanceador de carga 1 | A origem do pacote de pedido |
1 Quando uma VM tem um endereço IP externo ou quando está a usar o Cloud NAT, também é possível definir o endereço IP de origem do pacote de resposta para o endereço IPv4 interno principal da NIC da VM. Google Cloud Em alternativa, o Cloud NAT altera o endereço IP de origem do pacote de resposta para o endereço IPv4 externo da NIC ou um endereço IPv4 externo do Cloud NAT para enviar o pacote de resposta para o endereço IP externo do cliente. Não usar o endereço IP da regra de encaminhamento como origem é um cenário avançado porque o cliente recebe um pacote de resposta de um endereço IP externo que não corresponde ao endereço IP para o qual enviou um pacote de pedido.
Caminhos de planeamento de trajetos especiais
Google Cloud usa rotas especiais não definidas na sua rede VPC para verificações de funcionamento. Para mais informações, consulte o artigo Caminhos para verificações de estado.
Arquitetura de VPC partilhada
A tabela seguinte resume os componentes da VPC partilhada para balanceadores de carga de rede de encaminhamento externo:
Endereço IP | Regra de encaminhamento | Componentes de back-end |
---|---|---|
A tem de ser definido um endereço IP externo regional no mesmo projeto que as instâncias com balanceamento de carga. | Uma regra de encaminhamento externo regional tem de ser definida no mesmo projeto que as instâncias no conjunto de destino (o projeto de serviço). | O conjunto de destino tem de ser definido no mesmo projeto e na mesma região onde existem as instâncias no conjunto de destino. As verificações de estado de funcionamento associadas ao grupo de destino também têm de ser definidas no mesmo projeto. |
Distribuição de tráfego
A forma como um Network Load Balancer de encaminhamento externo baseado em pool de destino distribui novas ligações depende da forma como a afinidade de sessão foi configurada.
Afinidade de sessão
A afinidade de sessão controla o método de hash usado para distribuir novas ligações
de clientes para as VMs de back-end do equilibrador de carga. Os equilibradores de carga baseados em conjunto de destino usam o parâmetro sessionAffinity
para configurar a afinidade de sessão.
Para mais informações, consulte o artigo Usar grupos de alvos.
Balanceamento de carga e pacotes UDP fragmentados
Se estiver a fazer o balanceamento de carga de pacotes UDP, tenha em atenção o seguinte:
- Os pacotes não fragmentados são processados normalmente em todas as configurações.
- Os pacotes UDP podem ficar fragmentados antes de chegarem ao Google Cloud. As redes intervenientes podem aguardar que todos os fragmentos cheguem antes de os encaminharem, o que causa um atraso, ou podem rejeitar fragmentos.O Google Cloud não aguarda que todos os fragmentos cheguem; encaminha cada fragmento assim que chega.
Uma vez que os fragmentos UDP subsequentes não contêm a porta de destino, podem ocorrer problemas nestas situações:
- Se a afinidade da sessão dos conjuntos de destino estiver definida como
NONE
(afinidade de 5 tuplos), os fragmentos subsequentes podem ser ignorados porque o equilibrador de carga não consegue calcular o hash de 5 tuplos. - Se existir mais do que uma regra de encaminhamento de UDP para o mesmo endereço IP com balanceamento de carga, os fragmentos subsequentes podem chegar à regra de encaminhamento errada.
- Se a afinidade da sessão dos conjuntos de destino estiver definida como
Se esperar pacotes UDP fragmentados, faça o seguinte:
- Defina a afinidade de sessão como
NONE
,CLIENT_IP_PROTO
ouCLIENT_IP
.- A definição da afinidade de sessão como
NONE
indica que não é necessário manter a afinidade. Por conseguinte, o balanceador de carga usa um hash de 5 tuplos para selecionar um back-end para pacotes não fragmentados, mas um hash de 3 tuplos para pacotes fragmentados. - Definir a afinidade de sessão como
CLIENT_IP_PROTO
ouCLIENT_IP
significa que as portas de origem e destino não são usadas para aplicar hash e, por isso, é calculado o mesmo hash para pacotes fragmentados e não fragmentados.
- A definição da afinidade de sessão como
- Use apenas uma regra de encaminhamento de UDP por endereço IP com balanceamento de carga. Isto garante que todos os fragmentos chegam à mesma regra de encaminhamento.
Com estas definições, os fragmentos UDP do mesmo pacote são encaminhados para a mesma instância para remontagem.
Usar instâncias de destino como back-ends
Se estiver a usar instâncias de destino como back-ends para o balanceador de carga de rede de encaminhamento externo e esperar pacotes UDP fragmentados, use apenas uma regra de encaminhamento UDP por endereço IP com balanceamento de carga e configure a regra de encaminhamento para aceitar tráfego em todas as portas 0-65535. Isto garante que todos os fragmentos chegam à mesma regra de encaminhamento, mesmo que não tenham a mesma porta de destino.
Limitações
- 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.
- Os balanceadores de carga de rede de encaminhamento externo baseados em pool de destino não são compatíveis com o Cloud Logging.
O que se segue?
- O Cloud Armor suporta a proteção avançada contra DDoS de rede para equilibradores de carga de rede de encaminhamento externo. Para mais informações, consulte o artigo Configure a proteção avançada contra DDoS de rede.
- Para configurar um balanceador de carga de rede de encaminhamento externo e distribuir o tráfego por um conjunto de instâncias do Apache, consulte o artigo Configure um balanceador de carga de rede de encaminhamento externo com pools de destino.
- Para saber como os equilibradores de carga de encaminhamento externo funcionam com serviços de back-end regionais
em vez de conjuntos de destino, consulte:
- Vista geral do balanceador de carga de rede de encaminhamento externo baseado em serviço de back-end
- Configure um Network Load Balancer de encaminhamento externo com serviços de back-end
- Faça a transição dos balanceadores de carga de rede de encaminhamento externo de conjuntos de destino para serviços de back-end