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 os balanceadores de carga internos, consulte Como usar um balanceador de carga TCP/UDP 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 externo local Configura se o tráfego externo é ou não balanceado por carga nos nós do GKE. spec:externalTrafficPolicy:Local GKE 1.14+
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/D Sem suporte nativo

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 é compatível com os 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 de IPs internos. 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 TCP/UDP interno ou serviço. Se omitido, um IP temporário será atribuído. Para mais informações, consulte Como reservar um endereço IP interno estático.

Todas as portas

Se você criar um balanceador de carga TCP/UDP interno usando um serviço anotado, não será possível configurar uma regra de encaminhamento que use todas as portas. No entanto, se você criar um balanceador de carga TCP/UDP 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 ILB.

A seguir