BLOG | NGINX

Automatize o balanceamento de carga TCP para serviços Kubernetes locais com NGINX

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Miniatura de Chris Akker
Chris Akker
Publicado em 22 de agosto de 2023

Você é um desenvolvedor de aplicativos modernos. Você usa uma coleção de ferramentas de código aberto e talvez algumas ferramentas comerciais para escrever, testar, implantar e gerenciar novos aplicativos e contêineres. Você escolheu o Kubernetes para executar esses contêineres e pods em ambientes de desenvolvimento, teste, preparação e produção. Você aderiu às arquiteturas e conceitos de microsserviços, à Cloud Native Computing Foundation e a outros padrões modernos do setor.

Nesta jornada, você descobriu que o Kubernetes é realmente poderoso. Mas você provavelmente também ficou surpreso com o quão difícil, inflexível e frustrante isso pode ser. Implementar e coordenar mudanças e atualizações em roteadores, firewalls, balanceadores de carga e outros dispositivos de rede pode ser uma tarefa árdua, especialmente no seu próprio data center! É o suficiente para levar um desenvolvedor às lágrimas.

A maneira como você lida com esses desafios tem muito a ver com onde e como você executa o Kubernetes (como um serviço gerenciado ou no local). Este artigo aborda o balanceamento de carga TCP, uma área importante onde as escolhas de implantação afetam a facilidade de uso.

Balanceamento de carga TCP com Kubernetes gerenciado (também conhecido como opção fácil)

Se você usa um serviço gerenciado, como um provedor de nuvem pública para Kubernetes, grande parte dessa tarefa tediosa de rede é feita para você. Com apenas um comando ( kubectl apply -f loadbalancer.yaml ), o tipo de serviço LoadBalancer fornece um IP público, um registro DNS e um balanceador de carga TCP. Por exemplo, você pode configurar o Amazon Elastic Load Balancer para distribuir tráfego para pods que contêm o NGINX Ingress Controller e, usando esse comando, não se preocupar quando os backends forem alterados. É tão fácil que apostamos que você não vai dar valor!

Balanceamento de carga TCP com Kubernetes local (também conhecido como a opção difícil)

Com clusters locais, o cenário é totalmente diferente. Você ou seus colegas de rede devem fornecer as peças de rede. Você pode se perguntar: “Por que é tão difícil atrair usuários para meus aplicativos Kubernetes?” A resposta é simples, mas um pouco chocante: O tipo de serviço LoadBalancer, a porta de entrada para seu cluster, na verdade não existe.

Para expor seus aplicativos e serviços fora do cluster, sua equipe de rede provavelmente precisa de tíquetes, aprovações, procedimentos e talvez até mesmo revisões de segurança, tudo isso antes de reconfigurar seus equipamentos. Ou talvez você precise fazer tudo sozinho, diminuindo o ritmo de entrega do aplicativo. Pior ainda, você não ousa fazer alterações em nenhum serviço do Kubernetes, pois se o NodePort mudar, o tráfego poderá ser bloqueado! E todos nós sabemos o quanto os usuários gostam de receber erros 500. Seu chefe provavelmente gosta ainda menos.

Uma solução melhor para balanceamento de carga TCP local: Balanceador de carga NGINX para Kubernetes

Você pode transformar a “opção difícil” na “opção fácil” com nosso novo projeto: Balanceador de carga NGINX para Kubernetes . Este projeto gratuito é um controlador Kubernetes que monitora o NGINX Ingress Controller e atualiza automaticamente uma instância externa do NGINX Plus configurada para balanceamento de carga. Com um design muito simples, é fácil de instalar e operar. Com essa solução em vigor, você pode implementar o balanceamento de carga TCP em ambientes locais, garantindo que novos aplicativos e serviços sejam imediatamente detectados e disponibilizados para tráfego, sem necessidade de intervenção manual.

Arquitetura e Fluxo

O NGINX Loadbalancer para Kubernetes fica dentro de um cluster do Kubernetes. Ele é registrado no Kubernetes para monitorar o serviço nginx-ingress (NGINX Ingress Controller). Quando há uma alteração nos backends, o NGINX Loadbalancer for Kubernetes coleta os Worker IPs e os números de porta TCP NodePort e, em seguida, envia o IP:ports para o NGINX Plus por meio da API NGINX Plus . Os servidores upstream do NGINX são atualizados sem necessidade de recarga , e o NGINX Plus balanceia a carga do tráfego para os servidores upstream corretos e NodePorts do Kubernetes. Instâncias adicionais do NGINX Plus podem ser adicionadas para atingir alta disponibilidade .

Diagrama do NGINX Loadbalancer em ação

Um instantâneo do NGINX Loadbalancer para Kubernetes em ação

Na captura de tela abaixo, há duas janelas que demonstram o NGINX Loadbalancer for Kubernetes implantado e fazendo seu trabalho:

  1. Tipo de serviço – LoadBalancer (para nginx-ingress )
  2. IP externo – Conecta-se aos servidores NGINX Plus
  3. Portas – O NodePort mapeia para 443:30158 com servidores upstream NGINX correspondentes (conforme mostrado no painel em tempo real do NGINX Plus)
  4. Logs – Indica que o NGINX Loadbalancer para Kubernetes está enviando dados com sucesso para o NGINX Plus

Observação : Neste exemplo, os nós de trabalho do Kubernetes são 10.1.1.8 e 10.1.1.10

Uma captura de tela do NGINX Loadbalancer para Kubernetes em ação

Comece hoje mesmo

Se você está frustrado com os desafios de rede na borda do seu cluster Kubernetes, experimente o projeto e diga-nos o que você acha. O código-fonte do NGINX Loadbalancer para Kubernetes é de código aberto (sob a licença Apache 2.0) com todas as instruções de instalação disponíveis no GitHub .  

Para fornecer feedback, deixe um comentário no repositório ou envie uma mensagem para nós no Slack da Comunidade NGINX .


"Esta postagem do blog pode fazer referência a produtos que não estão mais disponíveis e/ou não têm mais suporte. Para obter as informações mais atualizadas sobre os produtos e soluções F5 NGINX disponíveis, explore nossa família de produtos NGINX . O NGINX agora faz parte do F5. Todos os links anteriores do NGINX.com redirecionarão para conteúdo semelhante do NGINX no F5.com."