Skip to content

Migrate from ingress-nginx to Gateway API #100

@bussyjd

Description

@bussyjd

Migrate from ingress-nginx to Gateway API

Summary

The Kubernetes ingress-nginx project is retiring in March 2026. After that date, there will be no releases, bugfixes, or security updates. We need to migrate to the Gateway API standard.

Source: https://www.kubernetes.dev/blog/2025/11/12/ingress-nginx-retirement/

Current State

We currently use ingress-nginx (v4.13.3) with Traefik explicitly disabled. All applications route through ingress-nginx:

  • Obol Frontend: / path
  • eRPC: /rpc path
  • Helios: /helios path (disabled)
  • Ethereum: /ethereum/execution and /ethereum/beacon with URL rewriting

Proposed Solution

Migrate to Gateway API using a simple gateway architecture as described in https://gateway-api.sigs.k8s.io/guides/simple-gateway/

Our use case is straightforward:

  • Single host: obol.stack
  • Basic HTTP path-based routing
  • URL rewriting for ethereum endpoints

Implementation Steps

  1. Choose Controller:

    • Option A: NGINX Gateway Fabric (keeps NGINX)
    • Option B: Re-enable k3s built-in Traefik
  2. Install Gateway API CRDs

  3. Create Single Gateway Resource:

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: obol-gateway
spec:
  gatewayClassName: nginx  # or traefik
  listeners:
  - name: http
    protocol: HTTP
    port: 80
    hostname: obol.stack
  1. Convert Ingress → HTTPRoute (example):
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: obol-frontend
spec:
  parentRefs:
  - name: obol-gateway
  hostnames:
  - obol.stack
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /
    backendRefs:
    - name: obol-frontend
      port: 3000
  1. Handle URL Rewriting with URLRewrite filters for ethereum endpoints

  2. Update Documentation

Files to Change

  • internal/embed/k3d-config.yaml - Controller configuration
  • internal/embed/defaults/helmfile.yaml - Replace ingress-nginx
  • internal/embed/defaults/values/*.yaml.gotmpl - Convert to HTTPRoute
  • internal/embed/charts/ethereum/templates/ingress.yaml - Convert to HTTPRoute
  • CLAUDE.md - Update architecture docs

Timeline

  • Hard Deadline: March 2026
  • Recommended: ASAP

References

Metadata

Metadata

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions