Um Ku­ber­ne­tes Load Balancer distribui au­to­ma­ti­ca­mente o tráfego de rede entre vários pods para garantir uma carga uniforme e alta dis­po­ni­bi­li­dade. Ele é ge­ral­mente im­ple­men­tado por meio de um serviço do tipo “Lo­ad­Ba­lan­cer”, que direciona so­li­ci­ta­ções externas para os serviços internos. Dessa forma, as apli­ca­ções podem ser tornadas aces­sí­veis de maneira confiável e escalável.

Managed Ku­ber­ne­tes da IONOS
O jeito mais simples de gerenciar cargas de trabalho em con­têi­ne­res.

Ins­ta­la­ção de clusters Ku­ber­ne­tes to­tal­mente au­to­ma­ti­zada, vi­si­bi­li­dade máxima e controle de clusters K8s.

O que é um Ku­ber­ne­tes Load Balancer?

Os Load Balancers no Ku­ber­ne­tes são usados para dividir a carga de ser­vi­do­res ou máquinas virtuais de forma eficiente. Dessa forma, a per­for­mance total pode ser aumentada. Nor­mal­mente, o Load Balancer é colocado na frente dos ser­vi­do­res para evitar a so­bre­carga de ser­vi­do­res in­di­vi­du­ais e garantir o uso ideal dos recursos dis­po­ní­veis. Mesmo quando ocorrem falhas nos ser­vi­do­res, o load balancing garante um sistema funcional, re­di­re­ci­o­nando as so­li­ci­ta­ções de maneira di­re­ci­o­nada.

Um pouco diferente, mas com o mesmo conceito de base, funcionam os Ku­ber­ne­tes Load Balancers. No Ku­ber­ne­tes, é ne­ces­sá­rio dis­tin­guir entre dois tipos di­fe­ren­tes de Load Balancer:

  • Ku­ber­ne­tes Load Balancer interno
  • Ku­ber­ne­tes Load Balancer externo

Ku­ber­ne­tes Load Balancer interno

Os Ku­ber­ne­tes Load Balancers internos adotam uma abordagem diferente dos Load Balancers clássicos, sendo men­ci­o­na­dos aqui para completar. Eles garantem que apenas apli­ca­ti­vos exe­cu­ta­dos na mesma rede virtual que seu Ku­ber­ne­tes Cluster possam acessar essa rede.

Ku­ber­ne­tes Load Balancer externo

Os Load Balancers externos atribuem a um nó de serviço de um cluster Ku­ber­ne­tes um endereço IP ou um nome de DNS próprio, per­mi­tindo que receba re­qui­si­ções HTTP externas. Com “Lo­ad­Ba­lan­cer”, existe um tipo especial de serviço Ku­ber­ne­tes para isso. Este serviço destina-se a di­re­ci­o­nar o tráfego externo para os pods in­di­vi­du­ais do Ku­ber­ne­tes, ga­ran­tindo assim uma dis­tri­bui­ção otimizada das so­li­ci­ta­ções recebidas.

Nota

Existem várias maneiras ou al­go­rit­mos para con­fi­gu­rar o load balancing no Ku­ber­ne­tes. A escolha depende in­tei­ra­mente de suas ne­ces­si­da­des in­di­vi­du­ais. Os di­fe­ren­tes al­go­rit­mos de­ter­mi­nam prin­ci­pal­mente o princípio segundo o qual o Load Balancer processa o tráfego de entrada.

Como funciona um Load Balancer?

No Ku­ber­ne­tes, um Load Balancer assume a tarefa central de dis­tri­buir o tráfego de rede de forma eficiente entre várias ins­tân­cias de um serviço, ou seja, os pods. O objetivo é garantir uma carga uniforme, aumentar a dis­po­ni­bi­li­dade e compensar falhas de com­po­nen­tes in­di­vi­du­ais.

Tec­ni­ca­mente, o Load Balancer recebe as re­qui­si­ções de entrada e verifica quais pods estão dis­po­ní­veis e com bom de­sem­pe­nho no momento. Para isso, o Ku­ber­ne­tes utiliza um mo­ni­to­ra­mento interno contínuo: pods que estejam com erros ou so­bre­car­re­ga­dos são au­to­ma­ti­ca­mente excluídos do ro­te­a­mento. O Load Balancer então decide di­na­mi­ca­mente a qual Pod cada so­li­ci­ta­ção será en­ca­mi­nhada.

Essa dis­tri­bui­ção ocorre com base em diversos critérios. Os usuários não percebem isso. O apli­ca­tivo permanece acessível e com bom de­sem­pe­nho, mesmo que, em segundo plano, alguns pods sejam iniciados, re­di­re­ci­o­na­dos ou falhem.

Imagem: Visão geral do funcionamento do Kubernetes Load Balancer
O Load Balancer distribui o tráfego externo para os Pods de um serviço no cluster Ku­ber­ne­tes, re­pre­sen­ta­dos em amarelo.

Para que serve um Ku­ber­ne­tes Load Balancer?

Um Ku­ber­ne­tes Load Balancer define um serviço em execução no cluster, acessível pela internet. Para entender isso, é útil examinar a ar­qui­te­tura do Ku­ber­ne­tes. Um cluster abrange vários nodes, que por sua vez contêm vários pods. Cada pod do cluster recebe um IP interno que não pode ser acessado de fora do cluster.

Dis­po­ni­bi­li­zar software com IP fixo

Para utilizar o software em execução nos pods sob um endereço IP dedicado, ge­ral­mente é ne­ces­sá­rio um serviço Ku­ber­ne­tes. Além de “Lo­ad­Ba­lan­cer”, existem outros tipos de serviço adequados para di­fe­ren­tes cenários. Todos os tipos de serviço têm em comum o agru­pa­mento de um conjunto de pods em uma unidade lógica, des­cre­vendo como acessá-los.

Dis­tri­bui­ção ideal do tráfego externo

Um Ku­ber­ne­tes Load Balancer deve garantir a dis­tri­bui­ção ideal do tráfego externo para os Pods em seu cluster Ku­ber­ne­tes. Por isso, os serviços são adequados para pra­ti­ca­mente qualquer fi­na­li­dade. Devido ao fato de que Ku­ber­ne­tes Load Balancer pode di­re­ci­o­nar o tráfego para Pods es­pe­cí­fi­cos, uma alta dis­po­ni­bi­li­dade de seu cluster é as­se­gu­rada: assim que um pod não está operando ou apresenta erros, o Load Balancer distribui as tarefas para os outros pods.

Otimizar es­ca­la­bi­li­dade

A es­ca­la­bi­li­dade também é po­si­ti­va­mente in­flu­en­ci­ada pelo uso de Load Balancing. O Ku­ber­ne­tes pode criar ou excluir pods au­to­ma­ti­ca­mente conforme a ne­ces­si­dade. Portanto, se for iden­ti­fi­cado que o tráfego de entrada requer mais ou menos recursos do que os atu­al­mente dis­po­ní­veis, o Ku­ber­ne­tes pode reagir au­to­ma­ti­ca­mente a essa situação.

Como criar um Load Balancer para Ku­ber­ne­tes

Para criar um Ku­ber­ne­tes Load Balancer, é ne­ces­sá­rio que seu cluster esteja rodando em uma nuvem ou em um ambiente que suporte a con­fi­gu­ra­ção de car­re­ga­do­res de carga externos.

Na IONOS, um node no cluster recebe um IP estático ao se criar um Ku­ber­ne­tes Load Balancer. Esse IP permite acessar o serviço de fora do cluster. O Kube-Proxy, que está em execução no node, distribui in­te­li­gen­te­mente o tráfego de entrada entre os pods in­di­vi­du­ais.

Primeiro, você cria um serviço e, em seguida, atribui ao tipo de serviço “Lo­ad­Ba­lan­cer” com a seguinte linha no manifesto do serviço:

type: LoadBalancer

Por exemplo, a con­fi­gu­ra­ção de um Ku­ber­ne­tes Load Balancer pode ser assim: o serviço agrupa pods sob o seletor “web-app”. O tráfego de entrada na IP do Load Balancer na porta 8080 é dis­tri­buído pelos pods in­di­vi­du­ais. Isso aciona o serviço em execução em cada pod na porta 80:

apiVersion: v1
kind: Service
metadata:
    name: web-app-service
spec:
    selector:
        app: web-app
    type: LoadBalancer
    loadBalancerIP: 203.0.113.0
    ports:
        - name: http
            port: 8080
            targetPort: 80
            protocol: TCP
yaml

Outra maneira de criar um Ku­ber­ne­tes Load Balancer é por meio da linha de comando kubectl.

Com o comando

kubectl expose deployment test --target-port=9376 \
    --name=test-service --type=LoadBalancer
bash

crie e implante um novo serviço chamado “test-service”, que atua como um Load Balancer.

Se você deseja descobrir o endereço IP do serviço que acabou de criar, o seguinte comando pode ajudar:

kubectl describe services test-service
bash
Ir para o menu principal