Olá, galera! Hoje vamos mergulhar em um tema que talvez já faça parte do seu dia a dia na infraestrutura, mas sempre há algo a mais para explorar: Nginx com Kubernetes. Esse duo é mais do que uma simples configuração de ingress, oferecendo potencial para controle detalhado de tráfego, escalabilidade e otimizações que garantem uma arquitetura robusta e confiável.

Nginx como Ingress Controller no Kubernetes

Quando falamos de Kubernetes, sabemos que ele é fenomenal para orquestrar e gerenciar microsserviços, mas o tráfego que chega ao cluster é um capítulo à parte. O Nginx Ingress Controller é o responsável por esta interface de entrada. Ele gerencia como os dados externos chegam e são direcionados para os serviços internos, permitindo que configuremos regras para roteamento de requisições HTTP e HTTPS, tratamento de balanceamento de carga e até manipulação de cabeçalhos.

No Kubernetes, você pode implementar o Nginx Ingress Controller como um Deployment ou até mesmo como um DaemonSet, dependendo da necessidade. Ele fica rodando como um pod dentro do cluster e responde ao recurso Ingress, que definimos em YAML. Essa abordagem tem duas vantagens: controle granular sobre o tráfego e a capacidade de rotear usuários para o serviço certo baseado em regras bem específicas.

Configurações e personalizações com anotações

Uma das grandes vantagens do Nginx em Kubernetes é a flexibilidade de personalização. Por meio das anotações no manifesto de Ingress, você pode ajustar o comportamento de cada serviço sem modificar a configuração global do Nginx. Quer limitar o tamanho de upload? Pode adicionar uma anotação específica. Precisa ajustar o timeout de resposta? Mais uma anotação resolve. Aqui está um exemplo:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: meu-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
spec:
  rules:
  - host: meusite.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: meu-servico
            port:
              number: 80

Ingress Nginx anotations: https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/nginx-configuration/annotations.md

Essas anotações são pequenas linhas de código que, no entanto, impactam diretamente a forma como o Nginx responde às requisições. Além disso, as anotações podem ser usadas para otimizar a segurança, configurando SSL com Let's Encrypt, por exemplo, e habilitando a reescrita de URLs quando necessário.

ConfigMap e configurações globais

Em ambientes de produção, onde o Nginx Ingress Controller precisa dar suporte a um grande volume de requisições, o ConfigMap entra em ação. Ele permite ajustes mais robustos e complexos, que afetam todo o comportamento do Nginx. Algumas configurações comuns incluem o número máximo de conexões simultâneas e o tamanho do buffer.

Aqui está um exemplo de ConfigMap que você pode aplicar no Nginx:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
data:
  proxy-body-size: 64m
  proxy-connect-timeout: "30"
  worker-processes: "4

Ingress Nginx configmap keys: https://docs.nginx.com/nginx-ingress-controller/configuration/global-configuration/configmap-resource/#summary-of-configmap-keys

Esses parâmetros são especialmente úteis em cenários de alta demanda, onde pequenas otimizações podem reduzir significativamente a latência e melhorar a experiência do usuário.

Prometheus e Grafana logos

Monitoramento e métricas: Prometheus e Grafana

Outro aspecto vital para uma implantação eficiente de Nginx em Kubernetes é o monitoramento. Integrar o Nginx com Prometheus e Grafana não apenas ajuda a entender como o tráfego está se comportando, mas também permite prever gargalos e ajustar as configurações conforme necessário.

O Nginx Ingress Controller oferece métricas detalhadas, desde o tempo de resposta dos serviços até a quantidade de requisições por segundo, permitindo que você ajuste o autoscaling com base em métricas reais e priorize serviços em casos de falhas ou picos de tráfego.

Escalabilidade e alta disponibilidade

Por fim, ao rodar Nginx como Ingress Controller em Kubernetes, a escalabilidade é nativa. Com o Horizontal Pod Autoscaler (HPA), você pode definir políticas para que o Nginx aumente ou diminua a quantidade de pods conforme a demanda. Para ambientes críticos, vale considerar múltiplos ingress controllers para maior tolerância a falhas, assim como o uso de Load Balancers externos em nuvens públicas.

Combinar Nginx com Kubernetes permite que você aproveite ao máximo o poder de controle e flexibilidade de ambas as ferramentas, entregando uma camada de rede personalizada, altamente configurável e segura. Seja ajustando tempo de resposta, otimizando configurações de segurança ou escalando com base em métricas, o Nginx se adapta ao Kubernetes para tornar a gestão de tráfego uma tarefa mais eficiente.

Se você já usa essas tecnologias, aproveite para testar algumas dessas configurações e ver como elas podem impactar positivamente o seu ambiente. Espero que esse conteúdo tenha trazido insights práticos para sua implementação.

E já sabe, se gostou, não deixe de nos acompanhar.

Até a próxima! 👋


Referências:

NGINX Documentation. Disponível em: https://nginx.org/en/docs/.

Documentação do Kubernetes. Disponível em: https://kubernetes.io/pt-br/docs/home/.

Share this post