Kubernetes

Load Balancer com Kubernetes

 
Antes de analisar esta funcionalidade, é importante relembrar o interesse do Kubernetes para a sua atividade. Trata-se do orquestrador de containers líder do mercado, que permite automatizar a implementação das aplicações dentro de um cluster, quer os servidores sejam físicos ou não.
 
 
 
 
 
 
 
 
 

Graças ao Kubernetes, as empresas concentram-se no desenvolvimento dos seus softwares e veem as suas tarefas simplificadas.

 

Icons/concept/Lines/Line Communicating Created with Sketch.

Automatização do ciclo de vida das aplicações em containers

Estes serviços precisam de ser redimensionados, de forma a acompanhar a procura e otimizar a sua utilização dos recursos. O Kubernetes permite automatizar esta etapa, assegurando uma implementação contínua (CI/CD) de novas versões e reduzindo drasticamente a manutenção.

Icons/concept/Container Created with Sketch.

Implementação de aplicações multi-containers

Alguns softwares podem utilizar vários containers de cada vez (bases de dados, front end, back end, cache, etc.). Esta situação requer, por vezes, a existência de várias instâncias. O Kubernetes oferece uma sincronização durante a implementação, entre os diferentes containers e componentes associados.

Icons/concept/Component/Component Square Created with Sketch.

Lançamento a partir de qualquer ambiente

Cloud pública, cloud privada, servidor físico ou virtual: o Kubernetes pode ser facilmente implementado, mesmo numa arquitetura híbrida, oferecendo uma maior liberdade aos seus projetos em função do seu ambiente.

O que é um Load Balancer?

Este repartidor tem como objetivo repartir a carga de trabalho entre diferentes servidores ou aplicações e pode ser instalado numa infraestrutura física ou virtual. Assim, um programa de load balancing (ou de compensação de cargas) assume a forma de um controlador de entrega de aplicações (aplicação delivery controller ou ADC), permitindo que o seu beneficiário faça evoluir automaticamente a carga em função das previsões de tráfego.

O ADC identifica em tempo real qual o servidor ou aplicação mais apto a responder a um pedido, para que o cluster mantenha um nível de desempenho estável. Em caso de avaria, terá também como missão reencaminhar o tráfego para um recurso adaptado. Assim, vários tipos de configurações são possíveis.

De um ponto de vista cronológico, o Load Balancer intervém entre o utilizador e o servidor. Analisa o pedido, determina qual a máquina disponível para responder e depois transmite-o. Também poderá adicionar mais servidores em caso de necessidade.

A repartição da carga, como acabámos de ver, é apenas uma das aplicações possíveis do Load Balancer. Outra aplicação útil possível será o descongestionamento de um certificado SSL ou a atualização de grupos de aplicações. O Load Balancer também pode ser utilizado para rotear os seus nomes de domínio.

Existem dois tipos de Load Balancers:

  • Load Balancers L4 ou Network Load Balancers

Tratam os dados da camada 4 (ou layer 4) que estão presentes ao nível da rede e do transporte (TCP/UDP). Estes Load Balancers não se concentram nas informações aplicativas, como o tipo de conteúdo, os cookies, a localização dos headers, etc. Ou seja, só irão reencaminhar o tráfego com base nos dados da camada de rede.

  • Load Balancers L7 ou Application Load Balancers

Redirecionam o tráfego baseando-se nos parâmetros da camada de aplicações, ao contrário dos L4. Desta forma, estes repartidores tratam um volume de dados mais elevado e baseiam-se em mais informações, incluindo, por exemplo, os protocolos HTTP, HTTPS e SSL.

Load Balancer OVHcloud

Como funciona o Load Balancer com Kubernetes?

Quando começa a utilizar o Kubernetes para as suas aplicações, a questão do tráfego externo é um fator importante a ter em conta. Este tema é brevemente abordado no website oficial da Kubernetes, mas iremos fornecer-lhe alguns detalhes.

Existem várias formas de encaminhar um tráfego externo para o seu cluster:

  • utilizar um proxy com o ClusterIP;
  • definir um serviço como NodePort;
  • declarar um serviço como load balancer e expô-lo ao tráfego externo. Este método é o mais utilizado.

Utilizar o ClusterIP através de um proxy

Geralmente utilizado para o desenvolvimento, este método está disponível de forma predefinida a partir de Kubernetes. A abertura de um proxy entre a sua fonte externa e o seu ClusterIP permite-lhe encaminhar tráfego. Pode usar o comando "kubectl" para criar este proxy. Quando o serviço estiver operacional, estará diretamente ligado ao IP do seu cluster para este serviço específico.

Expor um serviço como NodePort

Ao fazer isto, estará a expor os endereços dos seus nós individualmente nas portas em questão (uma porta fixa do serviço de 30000 a 32767). Assim, poderá aceder ao seu serviço do exterior a partir da sua própria porta, em cada nó. Para isso, utilize o comando <NodeIp>:<NodePort>

Embora esta abordagem seja viável, é relativamente difícil para os serviços que estão em produção. Uma vez que utiliza portas "não standard", deve configurar regularmente um repartidor de carga externo, que trata as portas standard e reencaminha o tráfego para o pedido “<NodeIp>:<NodePort>”.

Optar por um Load Balancer

Consiste em declarar um serviço enquanto Load Balancer para o seu cluster. Assim, estará exposto ao tráfego externo. Este método requer a utilização da solução de load balancing de um fornecedor cloud, como o nosso Load Balancer, que irá aprovisionar o serviço para o seu cluster, atribuindo-lhe automaticamente o seu NodePort.

Se dispõe de um ambiente de produção, o Load Balancer é a solução que recomendamos. No entanto, é necessário ter em conta dois aspetos importantes:

  • cada serviço que define e implementa como Load Balancer dispõe do seu próprio endereço IP;
  • a utilização do Load Balancer da OVHcloud está reservada aos utilizadores do serviço Managed Kubernetes.

Assim, funciona como um filtro entre o tráfego externo de entrada e o seu cluster Kubernetes. Pode implementar até 16 Load Balancers por cluster, que poderá gerir diretamente a partir da sua interface K8s. Os nossos manuais estão à sua disposição para o ajudar a configurar o seu repartidor de carga.

Adicionar um Ingress com o seu Load Balancer

O Ingress é um objeto Kubernetes que gere o acesso aos serviços do seu cluster a partir do exterior (como um protocolo HTTP). Em que é que o Load Balancer é diferente?

Sendo o único ponto de entrada no seu cluster, funciona como um reverse proxy. A seguir, o Ingress encaminha os pedidos para os diferentes serviços, de acordo com uma configuração de regras e fica exposto ao tráfego externo por ClusterIP, NodePort ou um Load Balancer. O Ingress mais conhecido é o NGINX Ingress Controller.

Porquê utilizar um Ingress com o seu Load Balancer? Simples: para reduzir os seus custos. A faturação de um Load Balancer é determinada em função do número de serviços que orquestra, com uma capacidade limitada. Assim, graças a um Ingress, poderá associar mais serviços ao mesmo Load Balancer e poupar dinheiro.

O que me aconselha?

Para responder a esta pergunta, deve determinar com certeza a sua utilização de Kubernetes.

O Load Balancer é adequado à grande maioria das utilizações. É possível definir um Load Balancer de forma personalizada para cada um dos seus serviços Kubernetes, sem necessidade de configuração. No entanto, este método não será adequado a todos os orçamentos, pois implica uma gestão complexa de um grande número de endereços IP.

Uma opção mais simples é utilizar um Load Balancer e um Ingress a seguir. Desta forma, todos os seus serviços ficarão alojados no mesmo endereço IP e apenas pagará um Load Balancer.

Tenha em conta que deverá assegurar que os serviços orquestrados por este modelo tenham uma relação lógica entre si. Caso contrário, poderá criar falhas ou avarias.

 

Uma configuração ideal seria um Load Balancer associado a um Ingress para cada "família de serviços" ou de microsserviços. A organização dependerá da complexidade das suas arquiteturas.