Editor – Este post é um trecho do nosso eBook completo, Gerenciamento do tráfego do Kubernetes com o F5 NGINX: um guia prático. Baixe-o gratuitamente hoje mesmo.
Muitas organizações que estão configurando o Kubernetes pela primeira vez começam com o controlador NGINX Ingress desenvolvido e mantido pela comunidade do Kubernetes (kubernetes/ingress-nginx). No entanto, à medida que as implantações do Kubernetes amadurecem, algumas organizações percebem que precisam de recursos avançados ou desejam suporte comercial, mantendo o NGINX como plano de dados.
Uma opção é migrar para o NGINX Ingress Controller desenvolvido e mantido pela F5 NGINX (nginxinc/kubernetes-ingress). Aqui, fornecemos instruções completas para que você possa evitar algumas complicações decorrentes das diferenças entre os dois projetos.
Não sabe ao certo qual é a diferença entre essas opções? Leia Um guia para escolher um controlador de Ingress, parte 4: opções de controladores de Ingress NGINX em nosso blog.
Para diferenciar os dois projetos no restante deste artigo, chamaremos o NGINX Ingress Controller mantido pela comunidade Kubernetes (kubernetes/ingress-nginx) de “controlador de Ingress da comunidade” e aquele mantido pela F5 NGINX (nginxinc/kubernetes-ingress) de “NGINX Ingress Controller”.
Há duas maneiras de migrar do controlador Ingress da comunidade para o NGINX Ingress Controller:
- Opção 1: migrar usando recursos do NGINX Ingress
Esta é a solução ideal, pois os recursos do NGINX Ingress oferecem suporte ao conjunto mais amplo de recursos de rede do Ingress necessários em ambientes Kubernetes de nível de produção. Para saber mais sobre os recursos do NGINX Ingress, assista ao nosso webinar Implantações avançadas do Kubernetes com o NGINX Ingress Controller. - Opção 2: migrar usando o recurso Ingress do Kubernetes
Esta opção é recomendada se você pretende usar o recurso padrão Ingress do Kubernetes para definir regras de balanceamento de carga do Ingress.
Opção 1: migrar usando recursos de Ingress do NGINX
Com esta opção de migração, você usa o recurso Ingress padrão do Kubernetes para definir os recursos básicos e os recursos Ingress do NGINX para aprimorar sua configuração, ampliando os recursos e facilitando o uso.
As definições de recursos personalizados (CRDs) para recursos do NGINX Ingress – VirtualServer, VirtualServerRoute, TransportServer, GlobalConfiguration e Policy – permitem delegar facilmente o controle sobre várias partes da configuração a diferentes equipes (como as equipes de AppDev e segurança), além de proporcionar maior segurança e validação da configuração.
Configuração do encerramento SSL e do roteamento baseado em caminhos HTTP
A tabela relaciona a configuração da terminação SSL e do roteamento de camada 7 baseado em caminhos no campo spec do recurso Ingress padrão do Kubernetes à configuração do campo spec no recurso VirtualServer do NGINX. A sintaxe e a indentação diferem ligeiramente entre os dois recursos, mas ambos desempenham as mesmas funções básicas de Ingress.
| Recurso Ingress do Kubernetes | Recurso VirtualServer do NGINX |
|---|---|
|
|
Configurando o balanceamento de carga TCP/UDP e o passthrough de TLS
Com o controlador Ingress da comunidade, um objeto da API ConfigMap do Kubernetes é a única maneira de expor serviços TCP e UDP.
Com o NGINX Ingress Controller, os recursos TransportServer definem uma ampla variedade de opções para balanceamento de carga de TCP/UDP e passagem direta de TLS. Os recursos TransportServer são usados em conjunto com os recursos GlobalConfiguration para controlar conexões de entrada e saída.
Para obter mais informações, consulte Suporte a serviços de passagem de TCP, UDP e TLS em recursos do NGINX Ingress em nosso blog.
Converter anotações do Community Ingress Controller em recursos do NGINX Ingress
Implantações do Kubernetes em nível de produção geralmente precisam ampliar as regras básicas de Ingress para implementar casos de uso avançados, incluindo implantações canário e blue-green, limitação de tráfego, manipulação do tráfego de entrada e saída, entre outros.
O controlador Ingress da comunidade implementa muitos desses casos de uso com anotações do Kubernetes. No entanto, muitas dessas anotações são criadas com extensões Lua personalizadas relacionadas a definições muito específicas de recursos do NGINX Ingress e, por isso, não são adequadas para implementar funcionalidades avançadas em um ambiente de produção estável e com suporte.
Nas seções a seguir, mostramos como converter as anotações do controlador Ingress da comunidade em recursos do NGINX Ingress Controller.
- Implantações canário
- Controle de tráfego
- Manipulação de cabeçalhos
- Proxy e balanceamento de carga
- Autenticação mTLS
- Persistência de sessão (exclusiva do NGINX Plus)
Implantações canário
Mesmo ao enviar alterações frequentes de código para suas cargas de trabalho de contêineres em produção, você precisa continuar atendendo aos usuários existentes. As implantações canário e azul-verde permitem fazer isso e podem ser realizadas no plano de dados do NGINX Ingress Controller para obter atualizações estáveis e previsíveis em ambientes Kubernetes de nível de produção.
A tabela mostra os campos nos recursos VirtualServer e VirtualServerRoute do NGINX que correspondem às anotações do controlador Ingress da comunidade para implantações canário.
O controlador Ingress da comunidade avalia as anotações de canário nesta ordem de precedência:
nginx.ingress.kubernetes.io/canary-by-headernginx.ingress.kubernetes.io/canary-by-cookienginx.ingress.kubernetes.io/canary-by-weight
Para que o NGINX Ingress Controller os avalie da mesma forma, eles devem aparecer nessa ordem no manifesto do NGINX VirtualServer ou VirtualServerRoute.
| Controlador Ingress da comunidade | Controlador Ingress do NGINX |
|---|---|
|
|
|
|
|
|
|
|
Controle de tráfego
Em ambientes de microsserviços, nos quais as aplicações são efêmeras por natureza e, portanto, mais propensas a retornar respostas de erro, as equipes de DevOps fazem amplo uso de políticas de controle de tráfego — como circuit breaking e limitação de taxa e de conexões — para evitar condições de erro quando as aplicações não estão íntegras ou não funcionam conforme o esperado.
A tabela mostra os campos nos recursos VirtualServer e VirtualServerRoute do NGINX que correspondem às anotações do controlador Ingress da comunidade para limitação de taxa, erros HTTP personalizados, um backend padrão personalizado e reescrita de URI.
| Community Ingress Controller | NGINX Ingress Controller |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Conforme indicado na tabela, até o momento, os recursos do NGINX Ingress não incluem campos que correspondam diretamente às quatro anotações a seguir do controlador Ingress da comunidade, portanto, é necessário usar snippets. O suporte direto às quatro anotações por meio de recursos de Policy está planejado para versões futuras do NGINX Ingress Controller.
nginx.ingress.kubernetes.io/limit-connectionsnginx.ingress.kubernetes.io/limit-ratenginx.ingress.kubernetes.io/limit-rate-afternginx.ingress.kubernetes.io/limit-whitelist
Manipulação de cabeçalhos
A manipulação de cabeçalhos HTTP é útil em muitos casos de uso, pois eles contêm informações adicionais importantes e relevantes para os sistemas envolvidos em uma transação HTTP. Por exemplo, o controlador Ingress da comunidade permite habilitar e configurar cabeçalhos de compartilhamento de recursos entre origens (CORS), usados em aplicações AJAX nas quais o código JavaScript de front-end executado em um navegador se conecta a uma aplicação de backend ou a um servidor web.
A tabela mostra os campos nos recursos VirtualServer e VirtualServerRoute do NGINX que correspondem às anotações do controlador Ingress da comunidade para manipulação de cabeçalhos.
| Controlador Ingress da comunidade | Controlador Ingress do NGINX |
|---|---|
|
|
Proxy e balanceamento de carga
Há outras funcionalidades de proxy e balanceamento de carga que você pode querer configurar no NGINX Ingress Controller, dependendo do caso de uso específico. Essas funcionalidades incluem a definição do algoritmo de balanceamento de carga, bem como das configurações de tempo limite e armazenamento em buffer para conexões que passam pelo proxy.
A tabela mostra as instruções no campo upstream dos recursos VirtualServer e VirtualServerRoute do NGINX que correspondem às anotações do controlador Ingress da comunidade para balanceamento de carga personalizado do NGINX, tempos limite do proxy, buffering do proxy, e roteamento de conexões para o endereço IP e a porta do Cluster IP de um serviço.
| Controlador Ingress da comunidade | Controlador Ingress do NGINX |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Autenticação mTLS
Uma malha de serviços é particularmente útil em um ambiente rigoroso de confiança zero, no qual aplicações distribuídas dentro de um cluster se comunicam com segurança por meio de autenticação mútua. E se precisarmos impor esse mesmo nível de segurança ao tráfego que entra e sai do cluster (tráfego norte-sul)?
Podemos configurar a autenticação mTLS na camada do Ingress Controller para que os sistemas nas extremidades das conexões externas autentiquem um ao outro apresentando um certificado válido.
A tabela mostra os campos nos recursos de Policy do NGINX que correspondem às anotações do Ingress Controller da comunidade para autenticação por certificado do cliente e autenticação por certificado do backend.
| Controlador Ingress da comunidade | Controlador Ingress do NGINX |
|---|---|
|
|
|
|
Persistência de sessão (exclusiva do NGINX Plus)
A tabela mostra os campos nos recursos de Policy do NGINX que são exclusivos do NGINX Ingress Controller baseado no NGINX Plus e correspondem às anotações do Ingress Controller da comunidade para persistência de sessão (afinidade).
| Controlador Ingress da comunidade | NGINX Ingress Controller |
|---|---|
|
|
Opção 2: migre usando o recurso Ingress do Kubernetes
A segunda opção para migrar do controlador Ingress da comunidade para o NGINX Ingress Controller é usar apenas anotações e ConfigMaps no recurso Ingress padrão do Kubernetes e, possivelmente, utilizar um processamento no estilo “mestre/minion”. Isso mantém toda a configuração no objeto Ingress.
Observação: Com esse método, não altere o campo spec do recurso Ingress.
Configuração avançada com anotações
A tabela a seguir apresenta as anotações do controlador Ingress da comunidade que correspondem diretamente às anotações compatíveis com o NGINX Ingress Controller.
| Community Ingress Controller | NGINX Ingress Controller | NGINX Directive |
|---|---|---|
| N/A | ||
| Default:
|
||
|
||
|
||
|
||
|
||
|
||
|
||
| N/A | ||
|
|
N/A2 |
1O controlador Ingress da comunidade usa Lua para implementar alguns de seus algoritmos de balanceamento de carga. O NGINX Ingress Controller não possui um equivalente para todos eles.
2Redireciona o tráfego HTTP para HTTPS. O controlador Ingress da comunidade implementa isso com código Lua, enquanto o NGINX Ingress Controller usa condições if nativas do NGINX.
A tabela a seguir apresenta as anotações do controlador Ingress da comunidade que correspondem diretamente às anotações compatíveis com o NGINX Ingress Controller baseado no NGINX Plus.
| Controlador Ingress da comunidade | Controlador Ingress do NGINX baseado no NGINX Plus |
|---|---|
|
|
Observação: o NGINX Ingress Controller baseado no NGINX Plus tem anotações adicionais para recursos que não são compatíveis com o Ingress Controller da comunidade, incluindo verificações ativas de integridade e autenticação usando JSON Web Tokens (JWTs).
Configuração global com ConfigMaps
A tabela a seguir relaciona as chaves do ConfigMap do controlador Ingress da comunidade às chaves diretamente correspondentes do ConfigMap do NGINX Ingress Controller. Observe que alguns nomes de chaves do ConfigMap são idênticos. Além disso, tanto o controlador Ingress da comunidade quanto o NGINX Ingress Controller têm chaves de ConfigMap que não existem no outro (não mostradas na tabela).
Resumo
Você pode migrar do controlador Ingress da comunidade para o NGINX Ingress Controller usando recursos personalizados do NGINX Ingress ou o recurso Ingress padrão do Kubernetes com anotações e ConfigMaps. A primeira opção oferece suporte a um conjunto mais amplo de recursos de rede e, portanto, é mais adequada para ambientes Kubernetes de nível de produção.
Este post é um trecho do nosso eBook completo, Como gerenciar o tráfego do Kubernetes com o F5 NGINX: um guia prático. Baixe-o gratuitamente hoje mesmo.
Experimente o NGINX Ingress Controller baseado no NGINX Plus com uma avaliação gratuita de 30 dias hoje mesmo ou entre em contato conosco para conversar sobre seus casos de uso.
Sobre o autor

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.