refactor: migrate from ingress-nginx to Traefik v3 (#254)

## Summary

- Replace ingress-nginx 4.15.1 with Traefik v3 (Helm chart 39.0.7) as ingress controller
- Convert nginx-specific annotations to Traefik Middleware CRDs
- Update setup script selectors, namespaces, and readiness checks
- Add `.claude/settings.local.json` to `.gitignore`

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Reviewed-on: #254
This commit was merged in pull request #254.
This commit is contained in:
2026-04-15 13:05:43 +00:00
parent 17c97b4333
commit a62ee9efb1
7 changed files with 76 additions and 22 deletions
+22 -4
View File
@@ -24,9 +24,9 @@ kind: Ingress
metadata:
name: frontend
annotations:
nginx.ingress.kubernetes.io/upstream-vhost: "localhost:3300"
traefik.ingress.kubernetes.io/router.middlewares: default-frontend-host@kubernetescrd
spec:
ingressClassName: nginx
ingressClassName: traefik
tls:
- hosts:
- staging-shiny.unbound.se
@@ -59,9 +59,9 @@ kind: Ingress
metadata:
name: api
annotations:
nginx.ingress.kubernetes.io/upstream-vhost: "localhost:4444"
traefik.ingress.kubernetes.io/router.middlewares: default-api-host@kubernetescrd
spec:
ingressClassName: nginx
ingressClassName: traefik
tls:
- hosts:
- staging-shiny-api.unbound.se
@@ -77,3 +77,21 @@ spec:
name: api-external
port:
number: 4444
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: frontend-host
spec:
headers:
customRequestHeaders:
Host: "localhost:3300"
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: api-host
spec:
headers:
customRequestHeaders:
Host: "localhost:4444"
-12
View File
@@ -1,12 +0,0 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- namespaces.yaml
helmCharts:
- name: ingress-nginx
namespace: ingress-nginx
includeCRDs: true
releaseName: ingress-nginx
repo: https://kubernetes.github.io/ingress-nginx
version: 4.15.1
valuesFile: https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/hack/manifest-templates/provider/kind/values.yaml
+12
View File
@@ -0,0 +1,12 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- namespaces.yaml
helmCharts:
- name: traefik
namespace: traefik
includeCRDs: true
releaseName: traefik
repo: https://traefik.github.io/charts
version: 39.0.7
valuesFile: values.yaml
+4
View File
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: traefik
+31
View File
@@ -0,0 +1,31 @@
deployment:
kind: DaemonSet
ports:
web:
hostPort: 80
websecure:
hostPort: 443
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Equal"
effect: "NoSchedule"
- key: "node-role.kubernetes.io/control-plane"
operator: "Equal"
effect: "NoSchedule"
nodeSelector:
ingress-ready: "true"
providers:
kubernetesIngress:
publishedService:
enabled: false
service:
type: ClusterIP
ingressClass:
enabled: true
isDefaultClass: true