Como configurar o balanceamento de carga TCP/UDP


Visão geral

É possível criar um balanceador de carga TCP/UDP criando um serviço com type: LoadBalancer na especificação dele. Nesta página, explicamos os parâmetros que você pode usar para configurar os serviços LoadBalancer. Para mais informações específicas sobre balanceadores de carga internos, consulte Como usar um balanceador de carga de rede de passagem interno. Para mais informações específicas sobre balanceadores de carga externos, consulte Como exibir aplicativos usando serviços.

Parâmetros de serviço

Os parâmetros a seguir são compatíveis com os serviços LoadBalancer do Google Kubernetes Engine (GKE).

Recurso Resumo Campo de serviço Compatibilidade da versão do GKE
Política de tráfego interno Permite que as restrições de tráfego interno só encaminhem o tráfego interno para endpoints dentro do nó de origem do tráfego. Esse parâmetro não oferece suporte aos clusters que executam o GKE Dataplane V2. spec:internalTrafficPolicy GKE 1.22+
Política de tráfego externo Configura se o tráfego externo é ou não balanceado por carga nos nós do GKE. spec:externalTrafficPolicy GKE 1.14 ou superior(1.23.4-gke.400+ para pool de nós do Windows)
Intervalos de origem do balanceador de carga Configura regras de firewall opcionais no GKE e na VPC para permitir apenas determinados intervalos de origem. spec:loadBalancerSourceRanges Todas as versões compatíveis
IP do balanceador de carga Especifica um IP para os balanceadores de carga spec:loadBalancerIP Todas as versões compatíveis
Todas as portas A capacidade do balanceador de carga TCP/UDP de encaminhar todas as portas em vez de portas específicas N/A Para balanceadores de carga de rede de passagem internos, compatíveis com subconfiguração. Para balanceadores de carga externos, que oferecem suporte a todas as versões.
Network Service Tiers Indique qual nível de rede um balanceador de carga do Google Cloud precisa usar. Os valores válidos são Standard e Premium (padrão). metadata:annotations:cloud.google.com/network-tier GKE 1.19+

Política de tráfego externa

O externalTrafficPolicy é uma opção de serviço padrão que define como e se o tráfego de entrada para um nó do GKE é balanceado por carga. Cluster é a política padrão, mas Local costuma ser usada para preservar o IP de origem do tráfego que entra em um nó do cluster. O Local desativa efetivamente o balanceamento de carga no nó do cluster para que o tráfego recebido por um pod local veja o endereço IP de origem original.

externalTrafficPolicy oferece suporte aos serviços LoadBalancer internos (via balanceador de carga TCP/UDP), mas o comportamento do balanceamento de carga depende da origem do tráfego e da política de tráfego configurada.

O tráfego proveniente de fora do cluster para um balanceador de carga TCP/UDP terá o seguinte comportamento se houver pelo menos um pod íntegro do serviço no cluster:

  • Política Cluster: o tráfego será balanceado por carga para qualquer nó íntegro do GKE no cluster e, em seguida, o kube-proxy o enviará para um nó com o pod.
  • Política Local: os nós que não têm um dos pods de back-end aparecem como não íntegros para o balanceador de carga TCP/UDP. O tráfego só será enviado para um dos nós de cluster íntegros restantes que tenham o pod. O tráfego não é roteado novamente pelo kube-proxy e, em vez disso, é enviado diretamente para o pod local com as informações do cabeçalho IP intactas.

Se o tráfego para um determinado IP de serviço do LoadBalancer for proveniente de um nó do GKE dentro do cluster, haverá um comportamento de tráfego diferente. A tabela a seguir resume o comportamento do tráfego proveniente de um nó ou pod dentro do cluster destinado a um pod membro de um serviço LoadBalancer:

externalTrafficPolicy O pod membro do serviço está em execução no mesmo nó de origem do tráfego? Comportamento do tráfego
Cluster Sim Os pacotes são entregues a qualquer pod de membro, seja no nó ou em um nó diferente.
Cluster Não Os pacotes são entregues a qualquer pod de membro, que deve estar em um nó diferente.
Treinamento Sim Os pacotes são entregues a qualquer pod de membro no mesmo nó.
Treinamento Não

Kubernetes 1.14 e anteriores: os pacotes são descartados.

Kubernetes 1.15 e posteriores: os pacotes são entregues a qualquer pod de membro, que precisa estar em um nó diferente.

Intervalos de origem do balanceador de carga

A matriz spec: loadBalancerSourceRanges especifica um ou mais intervalos de endereços IP internos ou externos. loadBalancerSourceRanges restringe o tráfego por meio do balanceador de carga para os IPs especificados nesse campo. Ao usar essa configuração, kube-proxy cria as regras iptables correspondentes nos nós do Kubernetes. O GKE também cria uma regra de firewall na sua rede VPC automaticamente. Se você omitir esse campo, seu Serviço aceitará o tráfego de qualquer endereço IP (0.0.0.0/0).

Para mais informações sobre a especificação de serviço, consulte a Referência da API de serviço.

IP do balanceador de carga

O spec: loadBalancerIP permite que você escolha um endereço IP específico para o balanceador de carga. O endereço IP não pode estar em uso por outro balanceador de carga de rede ou serviço de passagem interno. Se omitido, um IP temporário será atribuído. Para mais informações, consulte Como reservar um endereço IP interno estático.

Se o endereço IP em spec: loadBalancerIP for um IP de nível Standard, a anotação cloud.google.com/network-tier com o valor Standard será obrigatória, porque o Google Kubernetes Engine precisa criar uma regra de encaminhamento com o mesmo nível de rede que o endereço IP especificado. Desde o Google Kubernetes Engine 1.17 ou superior, o nível de rede padrão para criar regras de encaminhamento é Premium, independentemente do nível de rede padrão do projeto.

Todas as portas

O controlador do GKE define automaticamente o campo allPorts na regra de encaminhamento se houver cinco ou mais portas na especificação de serviço nas versões 1.20.6 e posteriores do GKE ou versões 1.21 e posteriores. Esse comportamento também está disponível nas versões 1.18 e posteriores do GKE e 1.19 e posteriores se você ativar a subconfiguração do balanceador de carga de rede de passagem interno no cluster.

No entanto, se você criar um balanceador de carga de rede de passagem interno manualmente, poderá escolher o grupo de instâncias de nós do Google Kubernetes Engine como o back-end. Os serviços do Kubernetes de type: NodePort estão disponíveis por meio do balanceador de carga de rede de passagem interno.

Níveis de serviço de rede

A anotação cloud.google.com/network-tier especifica qual nível de serviço de rede deve ser usado para a regra de encaminhamento externo e o endereço IP nas versões 1.19 e posteriores do GKE. Os valores válidos incluem Standard e Premium. O valor padrão é Premium.

Essa anotação é compatível apenas com balanceadores de carga externos.

A seguir