Ingress (legacy)

Ingress (legacy)

The original answer to “one HTTP entry point for many applications”. You will meet it in every existing cluster - new work belongs on Gateway API.

graph LR C[Client] --> T[Ingress controller<br/>Traefik] T -->|host shop.k8s.lab| S1[Service shop] T -->|host wiki.k8s.lab| S2[Service wiki] I[Ingress objects] -.read by.-> T
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: shop
spec:
  ingressClassName: traefik       # which controller
  rules:
    - host: shop.k8s.lab
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service: { name: shop, port: { number: 80 } }

Why it is legacy

  • The spec only knows host + path. Everything else (rewrites, canaries, timeouts) is a controller-specific annotation - not portable.
  • One object mixes infrastructure (TLS, entry point) and application routing.
  • The API is frozen; development happens in Gateway API.
  • ingress-nginx, the most used controller, was retired in March 2026.

An Ingress without a running controller does nothing - silently. Traefik reads both Ingress and Gateway API, which makes it a practical migration path.

References