O balanceamento de carga TCP/UDP interno do Google Cloud é um balanceador de carga regional criado na pilha de virtualização de rede Andromeda.
O balanceamento de carga TCP/UDP interno distribui o tráfego entre instâncias de máquina virtual (VM) interna na mesma região em uma rede de nuvem privada virtual (VPC). Com ela, é possível executar e escalonar serviços em um endereço IP interno que seja acessível apenas para sistemas na mesma rede VPC ou sistemas conectados à sua rede VPC.
Um serviço de balanceamento de carga TCP/UDP interno tem um front-end (a regra de encaminhamento)
e um back-end (o serviço de back-end). Use grupos de instâncias ou
NEGs zonais GCE_VM_IP
como back-ends no serviço de back-end. Neste exemplo, mostramos
os back-ends de grupos de instâncias.
Conheça as diferenças entre os balanceadores de carga do Google Cloud nos documentos a seguir:
- Visão geral do balanceamento de carga
- Como escolher um balanceador de carga
- Recursos do balanceador de carga
Casos de uso
Use o balanceamento de carga TCP/UDP interno nas seguintes circunstâncias:
- Você precisa de um balanceador de carga de alto desempenho de camada 4 para tráfego TCP ou UDP.
Se você estiver veiculando tráfego por meio de TLS (SSL), é aceitável fazer com que o tráfego SSL encerrado pelos back-ends em vez de no balanceador de carga. O balanceador de carga TCP/UDP interno não pode encerrar o tráfego SSL.
Você precisa encaminhar os pacotes originais sem proxy. Por exemplo, se você precisa que o endereço IP de origem do cliente seja preservado.
Você tem uma configuração atual que usa um balanceador de carga de passagem e quer migrá-lo sem alterações.
Os balanceadores de carga TCP/UDP internos lidam com muitos casos de uso. Nesta seção, veremos alguns exemplos detalhados.
Exemplos de acesso
Acesse um balanceador de carga TCP/UDP interno na rede VPC por uma rede conectada usando o seguinte:
- Peering de rede VPC
- Cloud VPN e Cloud Interconnect
Para exemplos detalhados, consulte Balanceamento de carga TCP/UDP interno e redes conectadas.
Exemplo de serviço da Web de três camadas
Use o balanceamento de carga TCP/UDP interno com outros balanceadores de carga. Por exemplo, se você incorporar balanceadores de carga HTTP externos, o balanceador de carga HTTP(S) externo será a camada da Web e dependerá dos serviços por trás do balanceador de carga TCP/UDP interno.
No diagrama a seguir, você verá o exemplo de uma configuração de três camadas que usa balanceadores de carga HTTP(S) externos e balanceadores de carga TCP/UDP internos:
Serviço da Web de três camadas com exemplo de acesso global
Se você ativar o acesso global, as VMs da Web podem estar em outra região, como mostrado no diagrama a seguir.
Este exemplo de aplicativo multicamada mostra:
- Uma camada da Web voltada para a Internet disponível globalmente que equilibra a carga do tráfego com balanceamento de carga HTTP(S)
- Uma camada interna de banco de dados de balanceamento de carga de back-end na região
us-east1
acessada pela camada global da Web. - Uma VM cliente que faz parte da camada da Web na região
europe-west1
com acesso à camada do banco de dados de balanceamento de carga interno localizada emus-east1
.
Como usar balanceadores de carga TCP/UDP internos como próximos saltos
Use um balanceador de carga TCP/UDP interno como o próximo gateway a que os pacotes serão encaminhados no caminho até o destino final. Para fazer isso, defina o balanceador de carga como o próximo salto em uma rota estática personalizada.
Um balanceador de carga TCP/UDP interno implantado como próximo salto em uma rota personalizada processa todo o tráfego, independentemente do protocolo (TCP, UDP ou ICMP).
Veja uma arquitetura de amostra usando um balanceador de carga TCP/UDP interno como o próximo salto para um gateway NAT. É possível rotear o tráfego para os back-ends de firewall ou appliance virtual de gateway por meio de um balanceador de carga TCP/UDP interno.
Outros casos de uso incluem:
- "Hub and spoke": como trocar rotas de próximo salto usando
o peering de rede VPC: é possível configurar uma topologia "hub-and-spoke" com
seus appliances virtuais de firewall de próximo salto localizados na rede VPC
hub
. Rotas que usam o balanceador de carga como próximo salto na rede VPChub
podem ser usadas em cada redespoke
. - Balanceamento de carga para várias NICs nas VMs de back-end.
Para mais informações sobre esses casos de uso, consulte Balanceadores de carga TCP/UDP internos como próximos saltos.
Balanceamento de carga para aplicativos do GKE
Se você estiver criando aplicativos no GKE, recomendamos usar o controlador de serviços do GKE integrado, que implanta balanceadores de carga do Google Cloud em nome dos usuários do GKE. Isso é o mesmo que a arquitetura de balanceamento de carga independente descrita nesta página, exceto pelo fato de o ciclo de vida dela ser totalmente automatizado e controlado pelo GKE.
Documentação relacionada do GKE:
Como funciona o balanceamento de carga TCP/UDP interno
Os balanceadores de carga TCP/UDP internos têm as seguintes características:
- São um serviço gerenciado.
- Não são um proxy.
- São implementados em redes virtuais.
Ao contrário de um balanceador de carga de proxy, um balanceador de carga TCP/UDP interno não encerra conexões de clientes e depois abre novas conexões com back-ends. Em vez disso, um balanceador de carga TCP/UDP interno roteia as conexões diretamente dos clientes para os back-ends íntegros, sem nenhuma interrupção.
- Não há dispositivo intermediário ou ponto único de falha.
- As solicitações do cliente para o endereço IP do balanceador de carga vão diretamente para as VMs de back-end íntegras.
- As respostas das VMs de back-end vão diretamente para os clientes, e não voltam pelo balanceador de carga. As respostas TCP usam retorno direto do servidor. Para mais informações, consulte Pedidos TCP e UDP e pacotes de retorno.
O balanceador de carga monitora a integridade da VM usando sondagens de verificação de integridade. Para mais informações, consulte a seção Verificação de integridade.
O
ambiente de convidado do Linux,
o do Windows
ou um processo equivalente do Google Cloud configura cada VM de back-end com o endereço IP do
balanceador de carga. Para VMs criadas a partir de imagens do Google Cloud, o agente de
convidado (antigo ambiente de convidado do Windows ou Linux) instala a rota local do endereço
IP do balanceador de carga. As instâncias do Google Kubernetes Engine baseadas no Container-Optimized OS implementam isso usando iptables
.
A rede virtual do Google Cloud gerencia o fornecimento de tráfego, escalonando conforme apropriado.
Protocolos, esquema e escopo
Cada balanceador de carga TCP/UDP interno é compatível com:
- Um serviço de back-end com esquema de balanceamento de carga
INTERNAL
e o protocolo TCP ou UDP (mas não ambos) - VMs de back-end especificadas como:
- Grupos gerenciados e não gerenciados de instâncias que estão localizados em uma região e rede VPC ou
- Grupos de endpoints de rede (NEGs) de back-end com endpoints de
tipo
GCE_VM_IP
localizados na mesma região e rede VPC. Os endpoints no NEG precisam ser endereços IP internos primários na mesma sub-rede e zona usadas pelo NEG.
- Uma ou mais regras de encaminhamento, cada uma usando o protocolo TCP ou UDP, correspondendo ao protocolo do serviço de back-end
- Cada regra de encaminhamento com o próprio endereço IP exclusivo ou várias regras de encaminhamento que compartilham um endereço IP comum
- Cada regra de encaminhamento com até cinco portas ou todas as portas
- Se o acesso global estiver ativado, os clientes em qualquer região
- Se o acesso global estiver desativado, os clientes na mesma região do balanceador de carga
Os balanceadores de carga TCP/UDP internos não são compatíveis com:
- VMs de back-end em várias regiões
- Equilíbrio de tráfego com origem na Internet, a menos que esteja usando um balanceador de carga externo
Acesso de cliente
A VM cliente precisa estar na mesma rede ou em uma rede VPC conectada usando peering da rede VPC. Ative o acesso global para que as instâncias de VMs clientes de qualquer região acessem o balanceador de carga TCP/UDP interno.
Na tabela a seguir, é possível ver um resumo do acesso do cliente.
Acesso global desativado | Acesso global ativado |
---|---|
Os clientes precisam estar na mesma região que o balanceador de carga. Também precisam estar na mesma rede VPC do balanceador de carga ou em uma conectada à do balanceador usando o peering da rede VPC. | Os clientes podem estar em qualquer região. Ainda precisam estar na mesma rede VPC do balanceador de carga ou em uma conectada à do balanceador usando peering da rede VPC. |
Os clientes locais podem acessar o balanceador de carga por meio de túneis do Cloud VPN ou anexos de interconexão (VLANs). Esses túneis ou anexos precisam estar na mesma região do balanceador de carga. | Os clientes locais podem acessar o balanceador de carga por meio de túneis do Cloud VPN ou anexos de interconexão (VLANs). Esses túneis ou anexos podem estar em qualquer região. |
Endereços IP para pacotes de solicitação e retorno
Quando uma VM de back-end recebe um pacote com carga balanceada de um cliente, a origem e o destino do pacote são os seguintes:
- Origem: o endereço IP interno principal do cliente ou o endereço IP de um dos intervalos de IP do alias do cliente.
- Destino: o endereço IP da regra de encaminhamento do balanceador de carga.
Como o balanceador de carga é um balanceador de carga de transmissão, e não um proxy, os pacotes chegam carregando o endereço IP de destino da regra de encaminhamento do balanceador de carga. O software em execução nas VMs de back-end precisa ser configurado para fazer o seguinte:
- Detectar (vincular) 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: detectar em (vincular) 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 de destino do pacote de retorno dependem do protocolo:
- O TCP é orientado por conexão. Assim, as VMs de back-end respondem 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 à conexão TCP apropriada.
- O UDP não tem conexão. Portanto, as VMs de back-end podem enviar pacotes de resposta com endereços IP de origem que correspondam ao endereço IP da regra de encaminhamento ou a qualquer endereço IP atribuído à VM. Na prática, a maioria dos clientes espera que a resposta seja do mesmo endereço IP que enviou os pacotes.
Nesta tabela, há um resumo das origens e dos destinos dos pacotes de resposta:
Tipo de tráfego | Origem | Destino |
---|---|---|
TCP | O endereço IP da regra de encaminhamento do balanceador de carga | A origem do pacote solicitante |
UDP | Na maioria dos casos de uso, o endereço IP da regra de encaminhamento do balanceador de carga † | A origem do pacote solicitante |
† É possível definir a origem do pacote de resposta para o endereço IPv4 interno principal da NIC da VM ou um intervalo de endereços IP do alias. Se a VM estiver com o encaminhamento de IP ativado, origens de endereço IP arbitrárias também poderão ser usadas. Não usar o endereço IP da regra de encaminhamento como uma origem é um cenário avançado, porque o cliente recebe um pacote de resposta de um endereço IP interno que não corresponde ao endereço IP a que ele enviou um pacote de solicitação.
Arquitetura
Um balanceador de carga TCP/UDP interno com vários back-ends distribui conexões entre todos esses back-ends. Para informações sobre o método de distribuição e as opções de configuração, consulte Distribuição de tráfego.
É possível usar grupos de instâncias ou NEGs zonais, mas não uma combinação de ambos, como back-ends para um balanceador de carga TCP/UDP interno:
- Se você escolher grupos de instâncias, será possível usar grupos não gerenciados de instâncias, grupos gerenciados de instâncias zonais, grupos gerenciados de instâncias regionais ou uma combinação desses tipos de grupo de instâncias.
- Se você escolher NEGs zonais, use NEGs zonais
GCE_VM_IP
.
Em Alta disponibilidade, você encontra instruções sobre como projetar um balanceador de carga interno que não dependa de uma única zona.
As instâncias que participam como VMs de back-end para balanceadores de carga TCP/UDP internos precisam executar
o ambiente de convidado do Linux ou do Windows apropriado ou outros processos
que proporcionem funcionalidade equivalente. Esse ambiente de convidado precisa
contatar o servidor de metadados (metadata.google.internal
e 169.254.169.254
) para
ler os metadados da instância a fim de gerar rotas locais para aceitar o tráfego
enviado ao endereço IP interno do balanceador de carga.
Neste diagrama, ilustramos a distribuição de tráfego
entre VMs localizadas em dois grupos de instâncias separados. O tráfego enviado
da instância do cliente para o endereço IP do balanceador de carga (10.10.10.9
)
é distribuído entre as VMs de back-end em qualquer um dos grupos de instâncias. As respostas enviadas de
qualquer uma das VMs de back-end exibidas são entregues diretamente à VM cliente.
O balanceamento de carga TCP/UDP interno pode ser usado com uma rede VPC de modo personalizado ou automático. Também é possível criar balanceadores de carga TCP/UDP internos com uma rede legada disponível.
Os balanceadores de carga TCP/UDP internos consistem nos seguintes componentes do Google Cloud.
Componente | Motivo | Requisitos |
---|---|---|
Endereço IP interno | Este é o endereço do balanceador de carga. | É preciso que o endereço IP interno esteja na mesma sub-rede que a regra de encaminhamento interno. A sub-rede precisa estar na mesma região e na mesma rede VPC do serviço de back-end. |
Regra de encaminhamento interno | Uma regra de encaminhamento interno, combinada ao endereço IP interno, é o front-end do balanceador de carga. Ela define o protocolo e as portas que o balanceador de carga aceita e direciona o tráfego para um serviço de back-end interno regional. | As regras de encaminhamento para balanceadores de carga TCP/UDP internos precisam: • ter um load-balancing-scheme de INTERNAL ;• usar ip-protocol de TCP ou
UDP , correspondendo ao protocol do serviço
de back-end;• referenciar subnet na mesma rede VPC
e na mesma região do serviço de back-end. |
Serviço de back-end interno regional | O serviço de back-end interno regional define o protocolo usado para
a comunicação com os back-ends e especifica uma verificação de
integridade. Os back-ends podem ser grupos não gerenciados de instâncias, grupos
gerenciados de instâncias zonais, grupos gerenciados de instâncias regionais ou NEGs zonais com
endpoints GCE_VM_IP . |
O serviço de back-end precisa: • ter load-balancing-scheme de INTERNAL ;• usar protocol de TCP ou
UDP , correspondendo ao ip-protocol da regra
de encaminhamento;• ter uma verificação de integridade vinculada; • ter uma região vinculada. A regra de encaminhamento e todos os back-ends precisam estar na mesma região que o serviço de back-end • Estar associados a uma única rede VPC. Quando não especificada, a rede é inferida com base na que é usada pela interface de rede padrão de cada VM de back-end ( nic0 ).Mesmo que o serviço de back-end não esteja vinculado a uma sub-rede específica, a sub-rede da regra de encaminhamento precisa estar na mesma rede VPC do serviço de back-end. |
Verificação de integridade | Cada serviço de back-end precisa ter uma verificação de integridade vinculada. A verificação
de integridade define os parâmetros sob os quais o Google Cloud considera
os back-ends que gerencia qualificados para receber tráfego. Somente VMs de
back-end íntegras recebem o tráfego enviado de VMs do
cliente para o endereço IP do balanceador de carga. |
Por mais que a regra de encaminhamento e o serviço de back-end possam usar
TCP ou UDP , o Google Cloud não tem
uma verificação de integridade para o tráfego UDP. Para mais informações, consulte
verificações de integridade e tráfego UDP.
|
Endereço IP interno
O balanceamento de carga TCP/UDP interno usa um endereço IPv4 interno do intervalo de IP principal da sub-rede selecionado ao criar a regra de encaminhamento interno. O endereço IP não pode ser de um intervalo de IP secundário da sub-rede.
Especifique o endereço IP de um balanceador de carga TCP/UDP interno ao criar a regra de encaminhamento. Escolha receber um endereço IP temporário ou usar um endereço IP reservado.
Regras de firewall
Seu balanceador de carga TCP/UDP interno requer as seguintes regras de firewall:
- Uma regra de permissão de entrada para permitir o tráfego dos intervalos de verificação de integridade
- Uma regra de permissão de entrada que permite o tráfego dos endereços IP internos dos clientes
O exemplo em Como configurar regras de firewall mostra como criar ambos.
Regras de encaminhamento
Uma regra de encaminhamento especifica o protocolo e as portas em que o balanceador de carga aceita tráfego. Como os balanceadores de carga TCP/UDP internos não são proxies, passam o tráfego para back-ends no mesmo protocolo e na mesma porta.
Um balanceador de carga TCP/UDP interno exige, no mínimo, uma regra de encaminhamento interno. Defina várias regras de encaminhamento para o mesmo balanceador de carga.
A regra de encaminhamento precisa referenciar uma sub-rede específica na mesma rede VPC e na mesma região dos componentes de back-end do balanceador de carga. Esse requisito tem as seguintes implicações:
- A sub-rede especificada para a regra de encaminhamento não precisa ser igual a uma das usadas pelas VMs de back-end. No entanto, a sub-rede precisa estar na mesma região da regra de encaminhamento.
- Quando você cria uma regra de encaminhamento interno, o Google Cloud escolhe um endereço IP interno regional disponível pelo intervalo de endereços IP principal da sub-rede selecionada. Como alternativa, especifique um endereço IP interno no intervalo de IP principal da sub-rede.
Regras de encaminhamento e acesso global
As regras de encaminhamento dos balanceadores de carga TCP/UDP internos são regionais, mesmo quando o acesso global
está ativado. Depois de ativar o acesso global, a sinalização allowGlobalAccess
da regra de encaminhamento
interno regional é definida como true
.
Regras de encaminhamento e especificações de porta
Ao criar uma regra de encaminhamento interno, escolha uma das seguintes especificações de porta:
- Especifique entre uma e cinco portas, por número.
- Especifique
ALL
para encaminhar tráfego a todas as portas.
Com uma regra de encaminhamento interno compatível com todas as portas TCP ou UDP, é possível fazer com que as VMs de back-end executem vários aplicativos, cada um na própria porta. O tráfego enviado para uma determinada porta é entregue ao aplicativo correspondente, e todos os aplicativos usam o mesmo endereço IP.
Quando precisar encaminhar o tráfego em mais de cinco portas específicas, combine
regras de firewall com as regras de encaminhamento. Ao criar a
regra de encaminhamento, especifique todas as portas e crie regras de firewall de entrada allow
que tenham apenas tráfego para as portas correspondentes. Aplique as regras de firewall às
VMs de back-end.
Não modifique regras de encaminhamento depois de criá-las. Se precisar alterar as portas especificadas ou o endereço IP interno de uma regra de encaminhamento interno, será necessário excluí-lo e recriá-lo.
Várias regras de encaminhamento para um único serviço de back-end
É possível configurar várias regras de encaminhamento interno que fazem referência ao mesmo serviço de back-end interno. Um balanceador de carga TCP/UDP interno exige, no mínimo, uma regra de encaminhamento interno.
Configurar várias regras de encaminhamento para o mesmo serviço de back-end permite fazer o seguinte, usando TCP ou UDP (não os dois):
Atribua vários endereços IP ao balanceador de carga. É possível criar várias regras de encaminhamento, cada uma usando um endereço IP exclusivo. Cada regra de encaminhamento pode especificar todas as portas ou um conjunto de até cinco portas.
Atribua um conjunto específico de portas, usando o mesmo endereço IP, ao balanceador de carga. É possível criar várias regras de encaminhamento que compartilham o mesmo endereço IP, em que cada regra de encaminhamento usa um conjunto específico de até cinco portas. Essa é uma alternativa à configuração de uma única regra de encaminhamento que especifica todas as portas.
Para mais informações sobre cenários que envolvem duas ou mais regras de encaminhamento interno que compartilham um endereço IP interno comum, consulte Várias regras de encaminhamento com o mesmo endereço IP.
Ao usar várias regras de encaminhamento interno, configure o software em execução nas
VMs de back-end para vincular a todos os endereços IP da regra de encaminhamento
ou a qualquer endereço (0.0.0.0/0
). O endereço IP de destino de um pacote entregue pelo
balanceador de carga é o endereço IP interno associado à regra de encaminhamento
interno correspondente. Para mais informações, consulte Pedidos TCP e UDP e pacotes
de retorno.
Serviço de back-end
Cada balanceador de carga TCP/UDP interno tem um serviço de back-end interno regional que define parâmetros e comportamento de back-end. O nome do serviço de back-end é o nome do balanceador de carga TCP/UDP interno mostrado no Console do Google Cloud.
Todo os serviços de back-end definem os seguintes parâmetros de back-end:
Protocolo. Um serviço de back-end aceita tráfego TCP ou UDP, mas não ambos, nas portas especificadas por uma ou mais regras de encaminhamento interno. Com o serviço de back-end, é possível direcionar tráfego às VMs de back-end nas mesmas portas para que o tráfego foi enviado. O protocolo do serviço de back-end precisa corresponder ao protocolo da regra de encaminhamento.
Distribuição de tráfego. Com um serviço de back-end, é possível fazer com que o tráfego seja distribuído de acordo com uma afinidade de sessão configurável.
Verificação de integridade. Os serviços de back-end precisam ter uma verificação de integridade vinculada.
Cada serviço de back-end opera em uma única região e distribui o tráfego para VMs de back-end em uma única rede VPC:
Região. Os back-ends são grupos de instâncias ou NEGs por zona (com endpoints
GCE_VM_IP
) na mesma região do serviço de back-end (e regra de encaminhamento). Os back-ends de grupos de instâncias podem ser grupos não gerenciados de instâncias, grupos gerenciados de instâncias zonais ou grupos gerenciados de zonas regionais. Os back-ends de NEG zonais só podem usar endpointsGCE_VM_IP
.Rede VPC. Todas as VMs de back-end precisam ter uma interface de rede na rede VPC vinculada ao serviço de back-end. Como opção, especifique explicitamente a rede de um serviço de back-end ou use uma rede implícita. Em ambos os casos, cada sub-rede da regra de encaminhamento interno precisa estar na rede VPC do serviço de back-end.
Serviços de back-end e interfaces de rede
Cada serviço de back-end opera em uma única rede VPC e
na região do Google Cloud. A rede VPC pode ser implícita ou
especificada explicitamente com a sinalização --network
no comando gcloud compute
backend-services create
.
Quando especificada explicitamente, a sinalização de VPC
--network
do serviço de back-end identifica a interface de rede em cada VM de back-end em que
a carga do tráfego esteja balanceada. Cada VM de back-end precisa ter uma interface de rede na
rede VPC especificada. Nesse caso, os identificadores da interface
de rede (de nic0
a nic7
) podem ser diferentes entre as VMs de back-end.
Há outros pontos a serem considerados, dependendo do tipo de back-end:
Back-ends de grupo de instâncias:
- Diferentes VMs de back-end no mesmo grupo de instâncias não gerenciadas podem usar identificadores de interface diferentes se cada VM tiver uma interface na rede VPC especificada.
- O identificador de interface não precisa ser o mesmo em todos os grupos de instâncias
de back-end. Pode ser
nic0
para VMs de back-end em um grupo de instâncias de back-end enic2
para VMs de back-end em outro grupo.
Back-ends de NEG zonal:
- Diferentes endpoints no mesmo NEG zonal
GCE_VM_IP
podem usar identificadores de interface diferentes. - Se você especificar um nome de VM e um endereço IP ao adicionar um endpoint ao NEG zonal, o Google Cloud validará que o endpoint é um endereço IP interno primário da placa de rede (NIC, na sigla em inglês) da VM localizada na rede VPC selecionada do NEG. As validações com falha apresentam mensagens de erro indicando que o endpoint não corresponde ao endereço IP primário da placa de rede (NIC, na sigla em inglês) da VM na rede do NEG.
- Se você não especificar endereços IP ao adicionar endpoints ao NEG zonal, o Google Cloud selecionará o endereço IP interno principal da placa de rede (NIC, na sigla em inglês) na rede VPC selecionada do NEG.
- Diferentes endpoints no mesmo NEG zonal
Se você não incluir a sinalização --network
ao criar o serviço de back-end, o serviço de back-end escolherá uma rede das seguintes maneiras:
Back-ends de grupo de instâncias:
- O serviço de back-end escolhe uma rede com base na rede da interface de rede inicial (ou única) usada por todas as VMs de back-end. Isso significa que
nic0
precisa estar na mesma rede VPC para todas as VMs em todos os grupos de instâncias de back-end.
- O serviço de back-end escolhe uma rede com base na rede da interface de rede inicial (ou única) usada por todas as VMs de back-end. Isso significa que
Back-ends de NEG zonal:
- Se o serviço de back-end estiver associado a uma regra de encaminhamento, a rede dela será escolhida.
- Se não houver regra de encaminhamento, a rede associada do NEG zonal será escolhida. Todos os NEGs precisam fazer referência à mesma rede.
Back-ends e redes VPC
Todos os back-ends precisam estar localizados na mesma rede VPC e na mesma região. Não é possível colocar back-ends em redes VPC diferentes, mesmo aqueles conectados por peering de rede VPC. Para detalhes sobre como os sistemas de cliente acessam o balanceador de carga, consulte Balanceamento de carga TCP/UDP interno e redes conectadas.
Subconjunto de back-ends
A subconfiguração do back-end é um recurso opcional que melhora o desempenho ao limitar o número de back-ends a que o tráfego é distribuído.
Ative a subconfiguração se precisar aceitar mais de 250 VMs de back-end em um único balanceador de carga. Para mais informações, consulte Subconfiguração de back-end para balanceador de carga TCP/UDP interno.
Verificação de integridade
O serviço de back-end do balanceador de carga precisa estar associado a uma verificação de integridade global ou regional. Rotas especiais fora da rede VPC facilitam a comunicação entre os sistemas de verificação de integridade e os back-ends.
Use uma verificação de integridade atual ou defina uma nova. Os balanceadores de carga TCP/UDP internos usam status de verificação de integridade para determinar como rotear novas conexões, conforme descrito em Distribuição de tráfego.
Use qualquer um dos seguintes protocolos de verificação de integridade. O protocolo da verificação de integridade não precisa corresponder ao protocolo do balanceador de carga:
- HTTP, HTTPS ou HTTP/2. Se as VMs de back-end enviarem tráfego usando HTTP, HTTPS ou HTTP/2, é melhor usar uma verificação de integridade que corresponda a esse protocolo, porque as que têm como base o HTTP oferecem opções adequadas ao protocolo em questão. Se a disponibilização de tráfego de HTTP for feita por meio de um balanceador de carga TCP/UDP, o protocolo do balanceador de carga será TCP.
- SSL ou TCP. Se as VMs de back-end não enviarem tráfego do tipo HTTP, será necessário usar uma verificação de integridade SSL ou TCP.
Independentemente do tipo de verificação de integridade que você criar, o Google Cloud enviará sondagens de verificação de integridade para o endereço IP da regra de encaminhamento do balanceador de carga TCP/UDP interno, para a interface de rede na VPC selecionada pelo serviço de back-end do balanceador de carga. Isso simula como o tráfego com carga balanceado é entregue. O software em execução nas suas VMs de back-end precisa responder ao tráfego com balanceamento de carga e às sondagens de verificação de integridade enviadas ao endereço IP do balanceador de carga. Para mais informações, consulte Destino dos pacotes de sondagem.
Verificações de integridade e tráfego UDP
O Google Cloud não oferece uma verificação de integridade que use o protocolo UDP. Ao usar o balanceamento de carga TCP/UDP interno com tráfego UDP, você precisa executar um serviço baseado em TCP nas suas VMs de back-end para fornecer informações de verificação de integridade.
Nessa configuração, as solicitações de clientes são balanceadas com carga usando o protocolo UDP e um serviço TCP é usado para enviar informações a quem faz as sondagens de verificação de integridade do Google Cloud. Por exemplo, é possível usar um servidor HTTP simples em cada VM de back-end que gera uma resposta HTTP 200 para o Google Cloud. Neste exemplo, é preciso usar a própria lógica em execução na VM de back-end para garantir que o servidor HTTP exiba 200 apenas se o serviço UDP estiver configurado e em execução corretamente.
Arquitetura de alta disponibilidade
Por design, o balanceador de carga TCP/UDP interno tem alta disponibilidade. Não há etapas especiais para deixar o balanceador de carga altamente disponível porque o mecanismo não depende de um único dispositivo ou instância de VM.
Para garantir que as instâncias de VM de back-end sejam implantadas em várias zonas, siga estas recomendações de implantação:
Use grupos de instâncias regionais gerenciados se puder implantar o software usando modelos de instância. Os grupos de instâncias gerenciadas por região distribuem automaticamente o tráfego entre várias zonas, fornecendo a melhor opção para evitar possíveis problemas em qualquer zona.
Se você usar grupos de instâncias gerenciadas por zona ou não gerenciadas, use vários grupos em zonas diferentes (na mesma região) para o mesmo serviço de back-end. O uso de várias zonas é uma proteção contra possíveis problemas que possam ocorrer em qualquer zona.
Arquitetura da VPC compartilhada
A tabela a seguir resume os requisitos do componente para o balanceamento de carga TCP/UDP interno usado com uma rede VPC compartilhada. Para um exemplo, consulte como criar um balanceador de carga TCP/UDP interno na página "Como provisionar a VPC compartilhada".
Endereço IP | Regra de encaminhamento | Componentes de back-end |
---|---|---|
Um
endereço IP interno precisa ser definido no mesmo projeto
que as VMs de back-end.
Para que o balanceador de carga esteja disponível em uma rede VPC compartilhada, o endereço IP interno do Google Cloud precisa ser definido no mesmo projeto de serviço em que as VMs de back-end estão localizadas e precisa referenciar uma sub-rede na rede VPC compartilhada do projeto host. O endereço vem do intervalo de IP principal da sub-rede referenciada. Se você criar um endereço IP interno em um projeto de serviço e a sub-rede do endereço IP estiver na rede VPC do projeto de serviço, o balanceador de carga TCP/UDP interno será local para o projeto de serviço. Ele não é local para nenhum projeto host de VPC compartilhada. |
Uma regra de
encaminhamento interna precisa ser definida no mesmo projeto das VMs
de back-end.
Para que o balanceador de carga esteja disponível em uma rede VPC compartilhada, a regra de encaminhamento interno precisa ser definida no mesmo projeto de serviço das VMs de back-end, e precisa referenciar a mesma sub-rede (na rede VPC compartilhada) que o endereço IP interno associado. Se você criar uma regra de encaminhamento interno em um projeto de serviço e a sub-rede da regra de encaminhamento estiver na rede VPC do projeto de serviço, o balanceador de carga TCP/UDP interno será local para o projeto de serviço. Ele não é local para nenhum projeto host de VPC compartilhada. |
Em um cenário de VPC compartilhada, as VMs de back-end estão localizadas em um projeto de serviço. Um serviço de back-end interno regional e uma verificação de integridade precisam ser definidos nesse projeto de serviço. |
Distribuição de tráfego
A maneira como um balanceador de carga TCP/UDP interno distribui novas conexões depende de você ter configurado o failover:
Se você não tiver configurado o failover, um balanceador de carga TCP/UDP interno distribuirá novas conexões com as VMs de back-end íntegras se pelo menos uma VM de back-end estiver nesse estado. Quando todas as VMs de back-end não estiverem íntegras, o balanceador de carga distribuirá novas conexões entre todos os back-ends como última alternativa. Nessa situação, o balanceador de carga roteia cada nova conexão para uma VM de back-end não íntegra.
Se tiver configurado o failover, um balanceador de carga TCP/UDP interno distribuirá novas conexões entre VMs no pool ativo, de acordo com uma política de failover que pode ser configurada. Quando todas as VMs de back-end não estiverem íntegras, poderá escolher um dos seguintes comportamentos:
- (Padrão) O balanceador de carga distribui o tráfego apenas para as VMs primárias. Isso é feito como último recurso. As VMs de backup são excluídas dessa distribuição de conexões mais recente.
- O balanceador de carga está configurado para descartar o tráfego.
O método de distribuição de novas conexões depende da configuração da afinidade de sessão do balanceador de carga.
O estado da verificação de integridade controla a distribuição de novas conexões. Por padrão, as conexões TCP persistem em back-ends não íntegros. Para mais detalhes e como alterar esse comportamento, consulte Persistência de conexão em back-ends não íntegros.
Seleção de back-ends e rastreamento de conexão
O balanceamento de carga TCP/UDP interno usa algoritmos configuráveis de rastreamento de conexão e seleção de back-end para determinar como o tráfego é distribuído para as VMs de back-end. O balanceamento de carga TCP/UDP interno usa o algoritmo a seguir para distribuir pacotes entre as VMs de back-end (no pool ativo, se você tiver configurado o failover):
- Se o balanceador de carga tiver uma entrada na tabela de rastreamento de conexão correspondente às características de um pacote de entrada, o pacote será enviado ao back-end especificado pela entrada da tabela de rastreamento de conexão. O pacote é considerado como parte de uma conexão estabelecida anteriormente. Portanto, o pacote é enviado à VM de back-end que o balanceador de carga determinou e registrou anteriormente na tabela de rastreamento de conexão.
Quando o balanceador de carga recebe um pacote que não tem uma entrada de rastreamento de conexão, o balanceador de carga faz o seguinte:
O balanceador de carga seleciona um back-end. O balanceador de carga calcula um hash com base na afinidade da sessão configurada. Ele usa esse hash para selecionar um back-end:
- Se pelo menos um back-end estiver íntegro, o hash selecionará um dos back-ends íntegros.
- Se nenhum back-end estiver íntegro e não houver uma política de failover configurada, o hash selecionará um dos back-ends.
- Se nenhum back-end estiver íntegro, haverá uma política de failover configurada e a política de failover não estará configurada para descartar o tráfego nessa situação, o hash selecionará um dos back-ends da VM principal.
A afinidade da sessão padrão,
NONE
, usa um hash de cinco tuplas do endereço IP de origem, da porta de origem, do endereço IP de destino, da porta de destino e do protocolo do pacote.A seleção de back-end pode ser personalizada com o uso de um algoritmo de hash que usa menos informações. Para todas as opções compatíveis, consulte opções de afinidade da sessão.
O balanceador de carga adiciona uma entrada à tabela de rastreamento de conexão. Essa entrada registra o back-end selecionado para a conexão do pacote, de modo que todos os pacotes futuros dessa conexão sejam enviados para o mesmo back-end. O uso do rastreamento de conexão depende do protocolo:
Para pacotes TCP e UDP, o rastreamento de conexão está sempre ativado e não pode ser desativado. Por padrão, o rastreamento de conexão é de cinco tuplas, mas pode ser configurado para ser menor que cinco tuplas.
Quando o hash de rastreamento de conexão é de cinco tuplas, os pacotes TCP SYN sempre criam uma nova entrada na tabela de rastreamento de conexão.
O rastreamento de conexão padrão de cinco tuplas é usado quando:- o modo de acompanhamento é
PER_CONNECTION
(todas as afinidades da sessão), ou, - o modo de acompanhamento é
PER_SESSION
e a afinidade da sessão éNONE
, ou, - o modo de acompanhamento é
PER_SESSION
e a afinidade da sessão éCLIENT_IP_PORT_PROTO
.
Para mais detalhes sobre quando o acompanhamento de conexão é ativado e qual método de acompanhamento é usado, consulte Modo de rastreamento de conexão.
Além disso, observe o seguinte:
- Por padrão, uma entrada na tabela de rastreamento de conexão expira 600 segundos depois que o balanceador de carga processa o último pacote que correspondeu à entrada. Para detalhes sobre como personalizar o tempo limite de inatividade, consulte Tempo limite de inatividade.
- Dependendo do protocolo, o balanceador de carga pode remover entradas da tabela de rastreamento de conexão quando os back-ends não estiverem íntegros. Para detalhes e como personalizar esse comportamento, consulte Persistência de conexão em back-ends não íntegros.
- o modo de acompanhamento é
Opções de afinidade de sessão
A afinidade de sessão controla a distribuição de novas conexões de clientes para as VMs de back-end do balanceador de carga. Você define a afinidade de sessão quando as VMs de back-end precisam acompanhar as informações de estado dos clientes. Esse é um requisito comum para aplicativos da Web.
A afinidade de sessão funciona com base no melhor esforço.
Os balanceadores de carga TCP/UDP internos são compatíveis com as seguintes opções de afinidade de sessão, que você especifica para todo o serviço interno de back-end e não por grupo de instâncias de back-end:
- Nenhum (
NONE
). Hash de cinco tuplas do endereço IP de origem, porta de origem, protocolo, endereço IP de destino e porta de destino - IP do cliente, sem destino (
CLIENT_IP_NO_DESTINATION
). Hash de uma tupla criado apenas do endereço IP de origem. - IP do cliente (
CLIENT_IP
). Hash de duas tuplas do endereço IP de origem e do destino. O balanceamento de carga de rede chama essa opção de afinidade de sessão IP do cliente, IP de destino. - IP do cliente, IP de destino, protocolo (
CLIENT_IP_PROTO
). Hash de três tuplas do endereço IP de origem, do endereço IP de destino e do protocolo - IP do cliente, Porta do cliente, IP de destino, Porta de destino, Protocolo
(
CLIENT_IP_PORT_PROTO
). Hash de cinco tuplas do endereço IP de origem, porta de origem, protocolo, endereço IP de destino e a porta de destino
A menos que você use o balanceador de carga como próximo salto para uma rota estática personalizada, o endereço IP de destino de um pacote precisa corresponder ao endereço IP da regra de encaminhamento do balanceador de carga para que o pacote seja entregue ao balanceador de carga. Para considerações ao usar o balanceador de carga como próximo salto para uma rota estática personalizada, veja Afinidade da sessão e balanceador de carga TCP/UDP interno do próximo salto.
Afinidade de sessão e balanceador de carga TCP/UDP interno do próximo salto
Ao usar um balanceador de carga TCP/UDP interno como próximo salto para uma rota estática personalizada, é provável que o destino do pacote não seja o endereço IP da regra de encaminhamento do balanceador de carga.
Um pacote será entregue ao balanceador de carga se o destino do pacote couber no destino da rota estática personalizada e se a rota estática personalizada for uma rota aplicável.
Todas as opções de afinidade de sessão, exceto IP do cliente, nenhum destino usam o endereço IP de destino do pacote. Ao usar uma rota estática personalizada em que próximo salto seja um balanceador de carga TCP/UDP interno:
Se o balanceador de carga tiver apenas um back-end (o pool ativo, se você tiver configurado o failover), todas as opções de afinidade da sessão escolherão esse back-end. A escolha da afinidade da sessão não faz diferença quando há um único back-end (no pool ativo).
Se o balanceador de carga tiver mais de um back-end (no pool ativo, se tiver configurado o failover) e você escolher qualquer opção de afinidade da sessão, exceto IP do cliente, nenhum destino, os pacotes enviados do mesmo cliente para qualquer endereço IP no destino da rota não são garantidos de serem processados pelo mesmo back-end. Isso ocorre porque o hash de afinidade da sessão é calculado a partir das informações que também incluem o endereço IP de destino do pacote, que pode ser qualquer endereço no intervalo de destino da rota.
Se você precisar garantir que o mesmo back-end processe todos os pacotes enviados do mesmo cliente para qualquer endereço IP no destino da rota, use a opção de afinidade da sessão IP do cliente, sem destino.
Modo de rastreamento de conexão
O modo de acompanhamento especifica o algoritmo de rastreamento de conexão a ser usado. Há
dois modos de rastreamento: PER_CONNECTION
(padrão) e PER_SESSION
.
PER_CONNECTION
(padrão). Nesse modo, o tráfego TCP e UDP é sempre rastreado por cinco tuplas, independentemente da configuração de afinidade da sessão. Isso significa que a chave para o rastreamento de conexão (5 tuplas) pode ser diferente da configuração de afinidade da sessão definida, por exemplo, 3 tuplas com a configuraçãoCLIENT_IP_PROTO
. Como resultado, a afinidade da sessão pode ser dividida, e novas conexões para uma sessão podem selecionar um back-end diferente se o conjunto de back-ends ou as alterações de integridade forem alterados.PER_SESSION
. Nesse modo, o tráfego TCP e UDP é rastreado de acordo com a afinidade de sessão configurada. Ou seja, se a afinidade da sessão forCLIENT_IP
ouCLIENT_IP_PROTO
, a configuração desse modo resultará no rastreamento de conexões de duas e três tuplas, respectivamente. Isso pode ser desejável em cenários em que a interrupção da afinidade é cara e precisa ser evitada mesmo que mais back-ends sejam adicionados.
A configuração do modo de rastreamento de conexão será redundante se a afinidade da sessão estiver definida como
NONE
ou CLIENT_IP_PORT_PROTO
. Para saber como esses modos de rastreamento funcionam com
diferentes configurações de afinidade de sessão para cada protocolo, consulte a tabela a seguir.
Seleção de back-end | Modo de rastreamento de conexão | ||
---|---|---|---|
Configuração de afinidade da sessão | Método de hash para seleção de back-end | PER_CONNECTION (padrão) |
PER_SESSION |
Padrão: sem afinidade da sessão
|
Hash de cinco tuplas | Acompanhamento de conexão de cinco tuplas | Acompanhamento de conexão de cinco tuplas |
IP do cliente, sem destino
|
Hash de uma tupla | Acompanhamento de conexão de cinco tuplas | Acompanhamento de conexão de uma tupla |
IP do cliente
(igual ao IP do cliente, IP de destino para o balanceamento de carga de rede) |
Hash de duas tuplas | Acompanhamento de conexão de cinco tuplas | Acompanhamento de conexão de duas tuplas |
IP do cliente, IP de destino, protocolo
|
Hash de três tuplas | Acompanhamento de conexão de cinco tuplas | Acompanhamento de conexão de três tuplas |
IP do cliente, porta do cliente, IP de destino, porta de destino, protocolo
|
Hash de cinco tuplas | Acompanhamento de conexão de cinco tuplas | Acompanhamento de conexão de cinco tuplas |
Para saber como alterar o modo de rastreamento de conexão, consulte Configurar uma política de rastreamento de conexão.
Persistência de conexão em back-ends não íntegros
A persistência de conexões em configurações de back-ends não íntegras controla se uma conexão existente persiste em um back-end selecionado após esse back-end se tornar não íntegro, desde que o back-end permaneça no grupo de instâncias de back-end configuradas do balanceador de carga.
O comportamento descrito nesta seção não se aplica aos casos em que você remove uma VM de back-end do grupo de instâncias ou remove o grupo de instâncias do serviço de back-end. Nesses casos, as conexões estabelecidas persistem apenas conforme descrito na diminuição de conexão.
As seguintes opções de persistência de conexão estão disponíveis:
DEFAULT_FOR_PROTOCOL
(padrão)NEVER_PERSIST
ALWAYS_PERSIST
A tabela a seguir resume as opções de persistência de conexão e como as conexões persistem para diferentes protocolos, opções de afinidade da sessão e modos de rastreamento.
Persistência de conexão em back-ends não íntegros | Modo de rastreamento de conexão | |
---|---|---|
PER_CONNECTION |
PER_SESSION |
|
DEFAULT_FOR_PROTOCOL |
TCP: as conexões permanecem em back-ends não íntegros (todas as afinidades da sessão) UDP: as conexões nunca persistem em back-ends não íntegros |
TCP: conexões persistem em back-ends não íntegros se
a afinidade da sessão é UDP: as conexões nunca persistem em back-ends não íntegros |
NEVER_PERSIST |
TCP, UDP: as conexões nunca persistem em back-ends não íntegros | |
ALWAYS_PERSIST
|
TCP: as conexões permanecem em back-ends não íntegros (todas as afinidades da sessão) Essa opção só deve ser usada para casos de uso avançados. |
Não é possível configurar |
Para saber como alterar o comportamento de persistência de conexão, consulte Configurar uma política de rastreamento de conexão.
Tempo limite de inatividade
Por padrão, uma entrada na tabela de rastreamento de conexão expira 600 segundos após
o balanceador de carga processar o último pacote que correspondeu à entrada. Esse
valor de tempo limite padrão inativo pode ser modificado somente quando o rastreamento de conexão for
menor que cinco tuplas, ou seja, quando a afinidade de sessão estiver configurada como
CLIENT_IP
ou CLIENT_IP_PROTO
: e o modo de acompanhamento é PER_SESSION
).
O valor máximo do tempo limite de inatividade configurável é de 57.600 segundos (16 horas).
Para saber como alterar o valor do tempo limite de inatividade, consulte Configurar uma política de rastreamento de conexão.
Como testar conexões de cliente único
Ao testar conexões com o endereço IP de um balanceador de carga TCP/UDP interno de um único sistema cliente, lembre-se do seguinte:
Se o sistema cliente não for uma VM que está sendo balanceada, isto é, nem é uma VM de back-end, novas conexões serão enviadas às VMs de back-end íntegras do balanceador de carga. No entanto, como todas as opções de afinidade de sessão dependem de, no mínimo, o endereço IP do sistema cliente, as conexões do mesmo cliente podem ser distribuídas para a mesma VM com mais frequência do que o esperado.
Na prática, isso quer dizer é que não é possível monitorar com precisão a distribuição de tráfego por meio de um balanceador de carga TCP/UDP interno que se conecta de um único cliente. O número necessário de clientes para monitorar a distribuição de tráfego varia de acordo com o tipo do balanceador de carga, o tipo de tráfego e o número de back-ends íntegros.
Se a VM cliente for uma VM de back-end do balanceador de carga, as conexões enviadas ao endereço IP da regra de encaminhamento do balanceador de carga serão sempre respondidas pela VM de cliente/back-end. Isso acontece independentemente de a VM de back-end estar íntegra. Isso acontece para todo o tráfego enviado ao endereço IP do balanceador de carga, não apenas o tráfego no protocolo e as portas especificadas na regra de encaminhamento interno do balanceador de carga.
Para mais informações, consulte Como enviar solicitações a partir de VMs submetidas a balanceamento de carga.
Failover
O balanceamento de carga TCP/UDP interno permite designar alguns back-ends como back-ends de failover. Esses back-ends só são usados quando o número de VMs íntegras nos grupos de instâncias de back-end primários está abaixo de um limite configurável. Por padrão, se todas as VMs primárias e de failover não estiverem íntegras, como um último recurso, o Google Cloud distribuirá novas conexões somente entre todas as VMs primárias.
Ao adicionar um back-end a um serviço de back-end do balanceador de carga TCP/UDP interno, por padrão, ele é um back-end primário. Para designar um back-end como sendo de failover, faça isso quando adicioná-lo ao serviço de back-end do balanceador de carga ou edite esse serviço posteriormente.
Para uma visão geral conceitual detalhada do failover no balanceamento de carga interno TCP/UDP, consulte visão geral de failover para balanceamento de carga interno TCP/UDP.
Cotas e limites
Para informações sobre cotas e limites, consulte Cotas para recursos de balanceamento de carga.
A seguir
- Para configurar e testar um balanceador de carga TCP/UDP interno, consulte Como configurar o balanceamento de carga TCP/UDP interno.
- Para configurar o monitoramento na nuvem do balanceamento de carga TCP/UDP interno, consulte Monitoramento do balanceamento de carga TCP/UDP interno.
- Para resolver problemas com o balanceador de carga TCP/UDP interno, consulte Solução de problemas de balanceamento de carga TCP/UDP interno.