myrootspace

/danilomarquesn

myrootspace

/danilomarquesn

Uncategorized

Kubernetes — Ingress vs Gateway API


Que vai mudar, a gente já sabe. Mas o que muda de fato?

Vou explicar e trazer algumas analogias — gosto pessoal por analogias rs’ — pra você que usa Kubernetes no dia a dia, mas não quer decorar RFC nem spec (se você já não entendeu o que é RFC ou spec, esse post é pra você mesmo rs’ 😄).

Acho que praticamente todo mundo já teve que se apresentar ou interagir com uma portaria e/ou com um porteiro para entrar em algum lugar (consultório, balada, condomínio, trabalho etc.). Então vamos partir desse ponto…

👉 Ingress é um porteiro simples
👉 Gateway API é um prédio com portaria profissional, síndico, regras, turnos e controle de acesso

O que cada um é ?

Ingress — “o porteiro do prédio pequeno”

Imagine um prédio pequeno:

Um porteiro
Uma prancheta
Ele olha:
“Qual apartamento?”
“Qual horário?”
“Pode subir”

Prazer, Ingress:

Um objeto único
Pouca separação de responsabilidades
Funciona, mas pode virar bagunça em projetos maiores — acredite…

No K8s:

Ingress define host, path e backend
Um Ingress Controller (NGINX, ALB…) interpreta tudo

Gateway API — “prédio corporativo”

Agora pense num prédio corporativo grande:

Construtora define o prédio
Síndico define regras
Portaria aplica regras
Cada empresa se encarrega de decidir quem entra na sua sala

Prazer, Gateway API:

Vários recursos, cada um com um papel
Pensado para times e projetos maiores
Separação clara entre infra e apps

No K8s:

GatewayClass → quem controla (NGINX, Istio, Envoy…)
Gateway → portas, TLS, listeners
HTTPRoute → regras de tráfego da aplicação

Analogia direta (Ingress vs Gateway API)

Criei uma tabelinha no excel para ficar mais visual…

Observação: Eu poderia pedir para alguma IA criar? Poderia. Mas o “artesanal” da coisa dá mais graça — as vezes…


Arquitetura — antes (Ingress)

Tudo concentrado num lugar só.

Internet
|
[ LoadBalancer ]
|
[ Ingress Controller (NGINX) ]
|
[ Ingress ]
├── host app1.com → Service A
└── host app2.com → Service B

❌ Problemas que enxergo

Infra + dev mexendo no mesmo YAML
Annotations viram 🤡:

nginx.ingress.kubernetes.io/rewrite-target
nginx.ingress.kubernetes.io/proxy-body-size
nginx.ingress.kubernetes.io/auth-url

Cada controller inventa sua regra

Trabalhoso:
Split de tráfego
Multi-namespace


Arquitetura — depois (Gateway API)

Tudo separado por função.

Internet
|
[ LoadBalancer ]
|
[ Gateway ]
|
┌───────────────┬───────────────┐
| | |
[HTTPRoute A] [HTTPRoute B] [HTTPRoute C]
| |
[Service A] [Service B]

🔑 Quem cuida do quê

+uma tabela artesanal pra vcs…


Exemplo prático (bem realista)

Cenário

app1 quer:

/ → v1

/beta → v2 (20%)

app2 é outro time, outro namespace…


❌ Ingress (tudo junto e misturado, confuso)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: apps
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20"
spec:
rules:
- host: app1.com
http:
paths:
- path: /
backend:
service:
name: app1-v1

👉 Infra + dev “brigando” no mesmo arquivo.


✅ Gateway API (limpo e organizado)

Infra only

kind: Gateway
spec:
listeners:
- port: 443
protocol: HTTPS

Devs do app1

kind: HTTPRoute
spec:
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: app1-v1
weight: 80
- name: app1-v2
weight: 20

👉 Infra não toca na app
👉 App não quebra o cluster


Quando você deve migrar (cada caso, um caso…)

Use Ingress se:

Cluster pequeno
1 ou 2 times
Regras simples
Não quer adicionar uma camada de complexidade agora…

Use Gateway API se:

AKS/EKS/GKE corporativo
Muitos times (so many apps)
Canary, blue/green, split
Platform Engineering
Quer futuro sem refatorar tudo correndo…


Conclusão (reta e direta)

Ingress funciona
Gateway API organiza
NGINX continua existindo
A mudança é de modelo mental, não só de YAML

E ai, qual você vai usar no seu projeto?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *