Executar e gerenciar aplicações de microsserviços em contêineres em grande escala em um cluster de máquinas é uma tarefa desafiadora. Kubernetes ajuda você a superar esse desafio oferecendo uma solução avançada para a orquestração de contêineres. Ele inclui vários recursos importantes, como tolerância a falhas, escalonamento automático, atualizações graduais, armazenamento, descoberta de serviços e balanceamento de carga.
Nesta publicação do blog, explicamos como usar o NGINX Open Source ou o NGINX Plus com o Ingress, a estrutura integrada de balanceamento de carga do Kubernetes para tráfego HTTP. O Ingress permite configurar regras que controlam o roteamento do tráfego externo para os serviços no seu cluster do Kubernetes. Você pode escolher qualquer balanceador de carga que forneça um controlador do Ingress, que é um software implantado no cluster para integrar o Kubernetes ao balanceador de carga. Aqui, mostramos como configurar o balanceamento de carga para uma aplicação de microsserviços com o Ingress e os controladores do Ingress que fornecemos para o NGINX Plus e o NGINX.
[Editor – Os controladores anteriormente separados para NGINX e NGINX Plus foram unificados em um único controlador Ingress para ambos.]
Nesta publicação do blog, abordamos apenas o balanceamento de carga HTTP para Kubernetes com o Ingress. Para saber mais sobre outras opções de balanceamento de carga, consulte Balanceamento de carga de serviços do Kubernetes com o NGINX Plus em nosso blog.
Observação: As instruções completas para os procedimentos abordados nesta publicação do blog estão disponíveis em nosso repositório do GitHub. Esta publicação não apresenta todas as etapas necessárias, mas fornece links para essas instruções.
Controladores de Ingress para NGINX e NGINX Plus
Antes de implantarmos o aplicativo de exemplo e configurarmos o balanceamento de carga para ele, precisamos escolher um balanceador de carga e implantar o controlador Ingress correspondente.
Um controlador de Ingress é um software que integra um balanceador de carga específico ao Kubernetes. Desenvolvemos um controlador de Ingress para NGINX Open Source e NGINX Plus, que já está disponível em nosso repositório do GitHub. Há também outras implementações criadas por terceiros. Para saber mais, acesse a página Controladores de Ingress no repositório do Kubernetes no GitHub.
Para obter instruções completas sobre como implantar o controlador Ingress do NGINX ou NGINX Plus em seu cluster, consulte nosso repositório no GitHub.
O aplicativo de microsserviços de exemplo
Nosso aplicativo de exemplo é um aplicativo web típico de microsserviços, composto por vários serviços, cada um implantado separadamente. O aplicativo, chamado cafe, permite pedir chá por meio do serviço tea ou café por meio do serviço coffee. Você indica sua preferência de bebida usando o URI da sua solicitação HTTP: URIs que terminam em /tea fornecem chá, e URIs que terminam em /coffee fornecem café. As conexões com o aplicativo devem ser protegidas com SSL/TLS.
O diagrama abaixo apresenta uma representação conceitual da aplicação, na qual o balanceador de carga NGINX Plus desempenha o importante papel de encaminhar as solicitações dos clientes ao serviço apropriado, além de proteger as conexões dos clientes com SSL/TLS.

Para implantar a aplicação no seu cluster, siga as instruções no nosso repositório do GitHub.
Configurando o balanceamento de carga do Kubernetes via Ingress
Nosso aplicativo cafe exige que o balanceador de carga desempenhe duas funções:
- Roteamento com base no URI da solicitação (também chamado de roteamento baseado em caminho)
- Terminação SSL/TLS
Para configurar o balanceamento de carga com o Ingress, defina regras em um recurso Ingress. As regras especificam como encaminhar o tráfego externo para os serviços no seu cluster.
No recurso, você pode definir vários servidores virtuais, cada um para um nome de domínio diferente. Um servidor virtual geralmente corresponde a uma única aplicação de microsserviços implantada no cluster. Para cada servidor, você pode:
- Especifique várias regras baseadas em caminhos. O tráfego é enviado para diferentes serviços em uma aplicação com base no URI da solicitação.
- Configure a terminação SSL/TLS fazendo referência a um certificado SSL/TLS e a uma chave.
Você pode encontrar uma explicação mais detalhada sobre o Ingress, com exemplos, na página da documentação do Ingress.
Este é o recurso Ingress (cafe‑ingress.yaml) do aplicativo cafe:
Carregando exemplo de código…
Analisando linha por linha, vemos:
- Na linha 4, nomeamos o recurso cafe‑ingress.
- Nas linhas 6 a 9, configuramos a terminação SSL/TLS:
- Na linha 9, fazemos referência a um recurso Secret pelo nome cafe‑secret. Esse recurso contém o certificado e a chave SSL/TLS e deve ser implantado antes do recurso Ingress.
- Na linha 8, aplicamos o certificado e a chave ao nosso servidor virtual cafe.example.com.
- Na linha 11, definimos um servidor virtual com o nome de domínio cafe.example.com.
- Nas linhas 13–21, definimos duas regras baseadas em caminho:
- A regra definida nas linhas 14–17 instrui o balanceador de carga a distribuir as solicitações com o URI /tea entre os contêineres do serviço tea, que é implantado com o nome tea‑svc no cluster.
- A regra definida nas linhas 18–21 instrui o balanceador de carga a distribuir as solicitações com o URI /coffee entre os contêineres do serviço coffee, que é implantado com o nome coffee‑svc no cluster.
- Ambas as regras instruem o balanceador de carga a distribuir as solicitações para a porta 80 do serviço correspondente.
Para obter instruções completas sobre como implantar os recursos Ingress e Secret no cluster, consulte nosso repositório no GitHub.
Testando a aplicação
Depois de implantarmos o controlador Ingress do NGINX Plus, nosso aplicativo, o recurso Ingress e o recurso Secret, poderemos testar o aplicativo.
Quando fazemos uma solicitação de chá com o URI /tea, vemos no navegador uma página gerada pelo serviço tea.

Esperamos que você não fique tão decepcionado ao saber que os serviços de tea e coffee não servem bebidas de verdade, mas fornecem informações sobre os contêineres em que estão sendo executados e os detalhes da sua solicitação. Isso inclui o nome do host e o endereço IP do contêiner, o URI da solicitação e o endereço IP do cliente. Cada vez que atualizamos a página, recebemos uma resposta de um contêiner diferente.
Também podemos acessar o painel de monitoramento de atividades em tempo real do NGINX Plus e visualizar métricas de balanceamento de carga em tempo real do NGINX Plus e de cada contêiner da nossa aplicação.

Extensões do Ingress Controller
O Ingress fornece funcionalidades básicas de balanceamento de carga HTTP. No entanto, muitas vezes os requisitos de balanceamento de carga das suas aplicações são mais complexos e, portanto, não são compatíveis com o Ingress. Para atender a alguns desses requisitos, adicionamos várias extensões ao controlador Ingress. Dessa forma, você ainda pode aproveitar os recursos do Kubernetes para configurar o balanceamento de carga (em vez de precisar configurar o balanceador de carga diretamente), além de utilizar funcionalidades avançadas de balanceamento de carga.
Para conferir a lista completa das extensões disponíveis, consulte nosso repositório no GitHub.
Além disso, fornecemos um mecanismo para personalizar a configuração do NGINX por meio de recursos do Kubernetes, usando recursos ConfigMap ou anotações. Por exemplo, você pode personalizar os valores das diretivas proxy_connect_timeout ou proxy_read_timeout.
Quando seus requisitos de balanceamento de carga forem além dos recursos oferecidos pelo Ingress e por nossas extensões, sugerimos uma abordagem diferente para implantar e configurar o NGINX Plus sem usar o controlador Ingress. Leia Balanceamento de carga de serviços do Kubernetes com o NGINX Plus em nosso blog para saber mais.
Benefícios do NGINX Plus com o Controller
Com o NGINX Plus, o controlador Ingress oferece os seguintes benefícios, além daqueles que você obtém com o NGINX:
- Estabilidade em um ambiente altamente dinâmico – Sempre que há uma alteração no número de pods dos serviços expostos por meio do Ingress, o controlador do Ingress precisa atualizar a configuração do NGINX ou do NGINX Plus para refletir as alterações. Com o NGINX Open Source, é necessário alterar manualmente o arquivo de configuração e recarregar a configuração. Com o NGINX Plus, você pode usar a API de reconfiguração dinâmica para atualizar a configuração sem recarregar o arquivo de configuração. Isso evita o possível aumento no uso de memória e a sobrecarga geral do sistema que podem ocorrer quando as recargas de configuração são muito frequentes.
- Estatísticas em tempo real – O NGINX Plus fornece estatísticas avançadas em tempo real, que podem ser acessadas por meio de uma API ou pelo painel integrado. Isso permite obter informações sobre o desempenho do NGINX Plus e dos seus aplicativos.
- Persistência de sessão – Quando você habilita a persistência de sessão, o NGINX Plus garante que todas as solicitações do mesmo cliente sejam sempre encaminhadas ao mesmo contêiner de backend usando o método de cookie persistente.
Resumo
O Kubernetes oferece balanceamento de carga HTTP integrado para rotear o tráfego externo para os serviços no cluster por meio do Ingress. O NGINX e o NGINX Plus integram-se ao balanceamento de carga do Kubernetes, oferecendo suporte completo aos recursos do Ingress e também extensões para atender a requisitos avançados de balanceamento de carga.
Para experimentar o NGINX Plus e o controlador Ingress, inicie hoje mesmo sua avaliação gratuita de 30 dias ou entre em contato conosco para conversar sobre seus casos de uso.
Publicações relacionadas no blog

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade
Descubra como o F5 NGINX One aprimora o gerenciamento e a observabilidade de ambientes híbridos e multicloud ao oferecer um console web centralizado baseado em SaaS, com insights em tempo real, conformidade automatizada e gerenciamento simplificado de configurações.

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa
Descubra como transformar uma definição de esquema OpenAPI em uma configuração NGINX totalmente funcional, operando como um API Gateway com a segurança de um Web Application Firewall e um Portal do Desenvolvedor, usando uma abordagem declarativa de API.

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor
Picos de tráfego e sobrecarga de servidores são preocupações sérias para varejistas online em qualquer época, mas especialmente durante a “Cyber Season” de compras de fim de ano. Detalhamos como você pode aproveitar as soluções de entrega de aplicações de nível de produção da NGINX para se preparar para aumentos repentinos de tráfego.

Distribuição segura de chaves privadas SSL com o NGINX
Descrevemos três maneiras progressivamente mais seguras de proteger chaves privadas SSL ao configurar o NGINX para processar tráfego HTTPS: permitir acesso de leitura apenas ao usuário root, criptografar as chaves com senhas armazenadas separadamente e distribuir as senhas a partir de um repositório central.
Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX
O módulo JavaScript do NGINX lançado com o NGINX Plus R15 oferece suporte a subsolicitações, possibilitando uma classe totalmente nova de casos de uso para o NGINX Plus. Este exemplo completo também usa a API do NGINX Plus e os módulos de chave-valor para converter solicitações de API dos clientes em solicitações separadas para as APIs dos microsserviços que compõem um aplicativo.
Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus
Confira dicas para evitar o esgotamento de portas efêmeras com ajustes no kernel do Linux, conexões keepalive e conexões vinculadas dinamicamente a endereços IP locais.