Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Ingress2gateway: o jeito fácil de migrar do Kubernetes Ingress para a Gateway API

By Chimbu ChinnaduraiMar 31, 20254 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

O Ingress do Kubernetes sempre foi o método tradicional para expor serviços fora do cluster, oferecendo roteamento, terminação TLS e balanceamento de carga. Só que, conforme as necessidades de rede no Kubernetes ficaram mais complexas, o Ingress começou a mostrar limitações, principalmente em ambientes multi-tenant, controle avançado de tráfego e extensibilidade.

É aí que entra a Gateway API. Pensada como a sucessora natural do Ingress, ela traz recursos mais robustos, mais flexibilidade e uma abordagem mais nativa do Kubernetes para lidar com tráfego externo. A Gateway API introduz funcionalidades importantes, como acesso baseado em papéis para recursos de rede, uma forma padronizada de definir políticas de tráfego e suporte a padrões de service mesh.

A escolha entre Ingress e Gateway API depende dos requisitos de cada projeto. A Gateway API se sai melhor em roteamentos complexos e cenários com requisitos rigorosos de segurança, enquanto o Ingress costuma ser mais indicado para abordagens nativas do Kubernetes. Neste post, vamos explorar a ferramenta ingress2gateway e mostrar como ela ajuda na migração do Ingress para a Gateway API.

O que é o **ingress2gateway?**

A ferramenta Ingress2gateway foi criada para simplificar a transição dos recursos de Ingress do Kubernetes para a Gateway API, mais poderosa e expressiva. Ela entrega um processo de conversão automatizado e robusto, garantindo uma migração tranquila e com o mínimo de interrupções.

Principais recursos e funcionalidades:

✅ Conversão automática

  • Analisa de forma inteligente os recursos de Ingress existentes e gera as configurações equivalentes da Gateway API, incluindo Gateway, HTTPRoute e BackendPolicy.
  • Lida com regras, anotações e configurações complexas do Ingress, traduzindo-as para as especificações correspondentes da Gateway API.

✅ Preserva as regras de roteamento:

  • Mapeia com precisão caminhos de URL, hostnames e serviços de backend das regras do Ingress para regras de HTTPRoute.
  • Garante que o roteamento de tráfego continue se comportando da mesma forma após a migração, evitando interrupções inesperadas no serviço.
  • Suporta vários recursos de roteamento, como correspondência de caminho (prefixo, exato, regex), correspondência por hostname e roteamento baseado em headers.

✅ Suporta vários Ingress Controllers

✅ Facilita a migração gradual:

  • Permite a adoção incremental da Gateway API, com conversão seletiva de recursos do Ingress.
  • Suporta o modo dry-run para visualizar o resultado da conversão antes de aplicar mudanças no cluster.
  • Permite testar lado a lado os recursos de Ingress e da Gateway API.

Ingress2gateway na prática

Para testar a ferramenta, você precisa de um cluster Kubernetes com a Gateway API instalada. Vários projetos oferecem suporte à Gateway API, e alguns provedores de nuvem também disponibilizam uma implementação totalmente gerenciada.

No exemplo a seguir, estou usando o Google Kubernetes Engine e o ingress controller padrão do GKE, o ingress-gce.

Implantando workloads e recurso de Ingress de exemplo

  • Faça o deploy da workload de exemplo httpbin.
---
apiVersion: v1
kind: Service
metadata:
  name: httpbin
  labels:
    app: httpbin
spec:
  ports:
  - name: http
    port: 8000
    targetPort: 80
  selector:
    app: httpbin
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpbin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpbin
  template:
    metadata:
      labels:
        app: httpbin
    spec:
      containers:
      - image: docker.io/kennethreitz/httpbin
        imagePullPolicy: IfNotPresent
        name: httpbin
        ports:
        - containerPort: 80

Exemplo de deployment e service do Kubernetes

  • Crie um recurso de Ingress para o deployment do httpbin.
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: httpbin-ingress
  namespace: default
spec:
  rules:
  - host: httpbin.example.com
    http:
      paths:
      - backend:
          service:
            name: httpbin
            port:
              number: 8000
        path: /
        pathType: Prefix

Exemplo de recurso de Ingress

Instale e execute o ingress2gateway

  • Siga a documentação de instalação para instalar o ingress2gateway ou baixe o binário na página de releases.
  • Execute o ingress2gateway para o seu provider. A ferramenta lê os recursos de Ingress e/ou CRDs específicos do provider em um cluster Kubernetes ou em um arquivo e gera, no stdout, os recursos equivalentes da Gateway API em formato YAML/JSON.

A saída ficará assim:

Exemplo de recursos da Gateway API gerados pelo ingress2gateway

Observação: o ingress2gateway não foi feito para copiar anotações do Ingress para a Gateway API. Em vez disso, a ferramenta converte as anotações em CRDs da Gateway; anotações e/ou CRDs específicos de provider muito utilizados podem ainda não ter suporte. Consulte os providers suportados para ver a lista atual e a documentação de cada um.

Exemplo de recursos da Gateway API

  • Confira o manifesto gerado para garantir que ele tem todas as configurações necessárias antes de aplicá-lo em produção. Faça um teste ponta a ponta antes de remover os recursos de Ingress existentes.

O Ingress tradicional cumpriu bem o seu papel, mas a Gateway API leva o controle e a flexibilidade do gerenciamento de tráfego no Kubernetes a outro patamar. Com roteamento avançado, políticas de segurança mais robustas e suporte nativo a multi-tenancy, a Gateway API foi pensada para atender às necessidades em constante evolução do networking nativo da nuvem. Pronto para fazer o upgrade? O ingress2gatewayapi, mantido pela comunidade, simplifica a migração e garante uma transição sem sobressaltos.

Espero que este post tenha sido útil. Se você quiser saber mais ou tiver interesse nos nossos serviços, fale com a gente. É só entrar em contato por aqui.