Compare commits

..

17 Commits

Author SHA1 Message Date
renovate eb3ca05bfb chore(deps): update postgres:18.3-alpine docker digest to 5209801 (#257) 2026-04-16 16:11:16 +00:00
renovate bf2332e1ac chore(deps): update postgres:18.3-alpine docker digest to c48f944 (#256) 2026-04-16 02:07:49 +00:00
renovate 8ed20f7e58 chore(deps): update postgres:18.3-alpine docker digest to b73cfac (#255) 2026-04-16 00:06:36 +00:00
argoyle a62ee9efb1 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
2026-04-15 13:05:43 +00:00
renovate 17c97b4333 chore(deps): update helm release cert-manager to v1.20.2 (#253) 2026-04-14 15:06:49 +00:00
renovate e6a410f926 chore(deps): update helm release external-secrets to v2.3.0 (#252) 2026-04-13 16:05:57 +00:00
renovate a79fb8df5a chore(deps): update helm release external-secrets to v2.3.0 (#252) 2026-04-13 16:05:54 +00:00
renovate 068537b11d chore(deps): update helm release cert-manager to v1.20.1 (#251) 2026-03-27 20:05:31 +00:00
renovate 5c3d6736dc chore(deps): update helm release external-secrets to v2.2.0 (#250) 2026-03-20 17:05:24 +00:00
renovate 62e363f01e chore(deps): update helm release ingress-nginx to v4.15.1 (#249) 2026-03-19 22:05:19 +00:00
renovate 99968b13b7 chore(deps): update helm release cert-manager to v1.20.0 (#248) 2026-03-10 16:06:09 +00:00
renovate 1de8e79a05 chore(deps): update helm release ingress-nginx to v4.15.0 (#247) 2026-03-09 21:06:11 +00:00
renovate 03bfdf847f chore(deps): update cloudamqp/lavinmq docker tag to v2.6.10 (#246) 2026-03-09 11:13:40 +00:00
renovate 9a066ac5d0 chore(deps): update helm release external-secrets to v2.1.0 (#245) 2026-03-07 18:05:18 +00:00
renovate b7f407e2d5 chore(deps): update cloudamqp/lavinmq docker tag to v2.6.9 (#244) 2026-03-03 18:08:05 +00:00
renovate f5aac44bd6 chore(deps): update postgres:18.3-alpine docker digest to 4da1a48 (#243) 2026-02-28 09:05:40 +00:00
renovate 9ff876b158 chore(deps): pin cloudamqp/lavinmq docker tag to b564dd1 (#242) 2026-02-27 14:07:24 +00:00
10 changed files with 80 additions and 26 deletions
+1
View File
@@ -1,2 +1,3 @@
data data
charts charts
.claude/settings.local.json
+22 -4
View File
@@ -24,9 +24,9 @@ kind: Ingress
metadata: metadata:
name: frontend name: frontend
annotations: annotations:
nginx.ingress.kubernetes.io/upstream-vhost: "localhost:3300" traefik.ingress.kubernetes.io/router.middlewares: default-frontend-host@kubernetescrd
spec: spec:
ingressClassName: nginx ingressClassName: traefik
tls: tls:
- hosts: - hosts:
- staging-shiny.unbound.se - staging-shiny.unbound.se
@@ -59,9 +59,9 @@ kind: Ingress
metadata: metadata:
name: api name: api
annotations: annotations:
nginx.ingress.kubernetes.io/upstream-vhost: "localhost:4444" traefik.ingress.kubernetes.io/router.middlewares: default-api-host@kubernetescrd
spec: spec:
ingressClassName: nginx ingressClassName: traefik
tls: tls:
- hosts: - hosts:
- staging-shiny-api.unbound.se - staging-shiny-api.unbound.se
@@ -77,3 +77,21 @@ spec:
name: api-external name: api-external
port: port:
number: 4444 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"
+2 -2
View File
@@ -10,13 +10,13 @@ helmCharts:
includeCRDs: true includeCRDs: true
releaseName: external-secrets releaseName: external-secrets
repo: https://charts.external-secrets.io repo: https://charts.external-secrets.io
version: 2.0.1 version: 2.3.0
- name: cert-manager - name: cert-manager
namespace: cert-manager namespace: cert-manager
includeCRDs: true includeCRDs: true
releaseName: cert-manager releaseName: cert-manager
repo: https://charts.jetstack.io repo: https://charts.jetstack.io
version: v1.19.4 version: v1.20.2
valuesInline: valuesInline:
crds: crds:
enabled: true enabled: true
+1 -1
View File
@@ -28,7 +28,7 @@ spec:
app.kubernetes.io/name: lavinmq app.kubernetes.io/name: lavinmq
spec: spec:
containers: containers:
- image: cloudamqp/lavinmq:2.6.8 - image: cloudamqp/lavinmq:2.6.10@sha256:e52866d61141b3bb61a3ae99acd7fac1c750ba86af50037864f9498c27fbd89a
imagePullPolicy: Always imagePullPolicy: Always
livenessProbe: livenessProbe:
tcpSocket: tcpSocket:
+1 -1
View File
@@ -52,7 +52,7 @@ spec:
spec: spec:
containers: containers:
- name: postgres - name: postgres
image: postgres:18.3-alpine@sha256:97e0c20847f5fe90be7e002ce2619be71f037e898f6c7364ad59e3826d60fee5 image: postgres:18.3-alpine@sha256:52098013b4b64a746626437d38afc03cabff6cdeb4d3d92e2342aa95f0ce56ea
args: args:
- -c - -c
- shared_buffers=384MB - shared_buffers=384MB
-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.14.3
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
+6 -6
View File
@@ -12,20 +12,20 @@ kubectl create secret docker-registry gitlab \
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "gitlab"}]}' kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "gitlab"}]}'
kustomized="$(mktemp -t unboundnginx.yaml.XXXXXX)" kustomized="$(mktemp -t unboundtraefik.yaml.XXXXXX)"
kubectl kustomize --enable-helm "k8s/nginx" >> "${kustomized}" kubectl kustomize --enable-helm "k8s/traefik" >> "${kustomized}"
kubectl apply -f "${kustomized}" --server-side || true kubectl apply -f "${kustomized}" --server-side || true
printf "\nWait for pod app.kubernetes.io/component=controller to be created." printf "\nWait for pod app.kubernetes.io/name=traefik to be created."
while :; do while :; do
sleep 2 sleep 2
[ -n "$(kubectl -n ingress-nginx get pod --selector=app.kubernetes.io/component=controller 2>/dev/null)" ] && printf "\n\n" && break [ -n "$(kubectl -n traefik get pod --selector=app.kubernetes.io/name=traefik 2>/dev/null)" ] && printf "\n\n" && break
printf "." printf "."
done done
echo "Wait for nginx to be available." echo "Wait for traefik to be available."
until [[ $(kubectl -n ingress-nginx get endpointslices -l 'kubernetes.io/service-name=ingress-nginx-controller' -o=jsonpath='{.items[*].endpoints[*].addresses[*]}') ]]; do sleep 5; done until [[ $(kubectl -n traefik get endpointslices -l 'kubernetes.io/service-name=traefik' -o=jsonpath='{.items[*].endpoints[*].addresses[*]}') ]]; do sleep 5; done
kustomized="$(mktemp -t unboundinfra.yaml.XXXXXX)" kustomized="$(mktemp -t unboundinfra.yaml.XXXXXX)"