ADR 021: Ingress Controller Strategy per Environment
Context
Phase 7 standardized ingress on local K3s using the built-in Traefik controller.
Phase 12 introduces a cost-controlled EKS spoke (aws-eks-prod) that is created and destroyed frequently as part of the FinOps lifecycle from ADR-020.
status-api-cloud requires a production ingress path for aws.northlift.net with cert-manager and external-dns integration, but EKS does not include Traefik by default.
We need an ingress decision that:
- Works with GitOps wave ordering and fast bootstrap.
- Supports cert-manager and external-dns without extra control-plane complexity.
- Fits the weekend teardown model and minimizes rebuild overhead.
Decision
We use different ingress controllers per environment:
- Keep Traefik on local K3s (
in-cluster) where it is already integrated and operationally stable. - Use ingress-nginx on EKS (
aws-eks-prod) with Ingress classnginx.
Rationale:
- ingress-nginx is a direct Kubernetes ingress controller deployment that integrates cleanly with cert-manager and external-dns.
- It avoids introducing ALB controller and IRSA-specific integration work for this phase.
- Lower bootstrap complexity reduces failure points during frequent EKS recreate cycles.
Implementation alignment:
status-api-cloudexplicitly setsingress.className: nginx.- EKS receives dedicated ArgoCD applications for
ingress-nginx-aws,cert-manager-aws, andcluster-issuers-aws. - Existing local Traefik and local issuer flow remain unchanged.
Consequences
Positive
- Environment-specific tooling is explicit and documented instead of implicitly inherited.
- EKS ingress bootstrap becomes deterministic for GitOps waves and ephemeral rebuilds.
- cert-manager and external-dns dependencies are satisfied without ALB/IRSA onboarding overhead.
- Local K3s remains unchanged, preserving existing operational knowledge.
Negative
- Two ingress controllers now exist across the platform, increasing documentation and runbook scope.
- Future policy hardening must be validated against both Traefik and ingress-nginx behaviors.
- A future migration to ALB/IRSA may be required if EKS traffic scale or AWS-native requirements increase.
Status
Accepted and implemented in Phase 12.