Compare commits

..

3 Commits

Author SHA1 Message Date
gilgamezh 7e0a38d65f build: pin gluetun to v3.41.1
Fixes VPN restart loop after :latest pulled a build with the Alpine 3.22
iptables parsing regression and the healthcheck race (#3123). v3.41.1
includes the k8s cluster-DNS auto-detection so DNS lookups in the
startup healthcheck no longer time out behind the killswitch.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 09:24:50 +02:00
gilgamezh 3b480d6abf build: backup traefik HelmChartConfig from k3s master manifests
Snapshot of /var/lib/rancher/k3s/server/manifests/traefik-config.yaml
on turing1 after dropping the v2 image pin during the Traefik v3
migration. Lives only on the node otherwise — track it here so it can
be restored on a node rebuild.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 09:24:50 +02:00
gilgamezh 3ace05a695 build: migrate ingresses for Traefik v3 (k3s upgrade)
k3s update bumped Traefik chart 37 → 39, dropping v2 support. Replace
the v2-only `whitelist.sourcerange` annotation on the gitea ingress
with an `ipAllowList` Middleware (resources/gitea-middleware.yaml),
referenced via `router.middlewares`. Switch the default-ns ingresses
(kube-plex, radarr, sonarr, lidarr) from the deprecated
`kubernetes.io/ingress.class` annotation to `spec.ingressClassName`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 09:24:50 +02:00
5 changed files with 56 additions and 7 deletions
+37
View File
@@ -0,0 +1,37 @@
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: traefik
namespace: kube-system
spec:
valuesContent: |-
logs:
access:
enabled: true
format: common
# opcional: para logs de Traefik (no sólo access logs)
log:
level: INFO
format: json
# esto ya estaba, pero si querés mantenerlo:
deployment:
podAnnotations:
prometheus.io/port: "8082"
prometheus.io/scrape: "true"
providers:
kubernetesIngress:
publishedService:
enabled: true
priorityClassName: "system-cluster-critical"
tolerations:
- key: "CriticalAddonsOnly"
operator: "Exists"
- key: "node-role.kubernetes.io/control-plane"
operator: "Exists"
effect: "NoSchedule"
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"
service:
ipFamilyPolicy: "PreferDualStack"
+1 -1
View File
@@ -55,7 +55,7 @@ qbittorrent:
gluetun: gluetun:
image: image:
repository: qmcgaw/gluetun repository: qmcgaw/gluetun
tag: latest tag: v3.41.1
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
env: env:
- name: VPN_SERVICE_PROVIDER - name: VPN_SERVICE_PROVIDER
+2 -2
View File
@@ -21,8 +21,8 @@ ingress:
className: traefik className: traefik
pathType: Prefix pathType: Prefix
annotations: annotations:
# Restrict to LAN access (matching your existing pattern) # Restrict to LAN access via Traefik v3 Middleware (resources/gitea-middleware.yaml)
traefik.ingress.kubernetes.io/whitelist.sourcerange: "192.168.0.0/16,10.0.0.0/8,172.16.0.0/12" traefik.ingress.kubernetes.io/router.middlewares: "gitea-lan-only@kubernetescrd"
cert-manager.io/cluster-issuer: "letsencrypt-production" cert-manager.io/cluster-issuer: "letsencrypt-production"
hosts: hosts:
- host: gitea.gilgamezh.me - host: gitea.gilgamezh.me
+12
View File
@@ -0,0 +1,12 @@
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: lan-only
namespace: gitea
spec:
ipAllowList:
sourceRange:
- 192.168.0.0/16
- 10.0.0.0/8
- 172.16.0.0/12
+4 -4
View File
@@ -4,12 +4,12 @@ kind: Ingress
metadata: metadata:
annotations: annotations:
cert-manager.io/cluster-issuer: letsencrypt-production cert-manager.io/cluster-issuer: letsencrypt-production
kubernetes.io/ingress.class: traefik
labels: labels:
app: kube-plex app: kube-plex
name: kube-plex name: kube-plex
namespace: default namespace: default
spec: spec:
ingressClassName: traefik
rules: rules:
- host: tp2.gilgamezh.me - host: tp2.gilgamezh.me
http: http:
@@ -31,12 +31,12 @@ kind: Ingress
metadata: metadata:
annotations: annotations:
cert-manager.io/cluster-issuer: letsencrypt-production cert-manager.io/cluster-issuer: letsencrypt-production
kubernetes.io/ingress.class: traefik
labels: labels:
app: radarr app: radarr
name: radarr name: radarr
namespace: default namespace: default
spec: spec:
ingressClassName: traefik
rules: rules:
- host: radarr.gilgamezh.me - host: radarr.gilgamezh.me
http: http:
@@ -58,12 +58,12 @@ kind: Ingress
metadata: metadata:
annotations: annotations:
cert-manager.io/cluster-issuer: letsencrypt-production cert-manager.io/cluster-issuer: letsencrypt-production
kubernetes.io/ingress.class: traefik
labels: labels:
app: sonarr app: sonarr
name: sonarr name: sonarr
namespace: default namespace: default
spec: spec:
ingressClassName: traefik
rules: rules:
- host: sonarr.gilgamezh.me - host: sonarr.gilgamezh.me
http: http:
@@ -85,12 +85,12 @@ kind: Ingress
metadata: metadata:
annotations: annotations:
cert-manager.io/cluster-issuer: letsencrypt-production cert-manager.io/cluster-issuer: letsencrypt-production
kubernetes.io/ingress.class: traefik
labels: labels:
app: lidarr app: lidarr
name: lidarr name: lidarr
namespace: default namespace: default
spec: spec:
ingressClassName: traefik
rules: rules:
- host: lidarr.gilgamezh.me - host: lidarr.gilgamezh.me
http: http: