Files
homelab/docs/04-traefik.md
mtkadmin 73e128e452 docs: Hostname-Fix auf MetalLB-IP + int.elbpro.de für alle Services
- 04-traefik: External-IP von Node-IPs auf MetalLB VIP 192.168.11.180 korrigiert,
  Übersicht aller aktiven Ingresses mit nip.io und int.elbpro.de URLs
- 06-rancher: Hostname-Fix .170 → .180, int.elbpro.de hinzugefügt, Fix-Doku
- 07-argocd: Hostname-Fix .170 → .180, int.elbpro.de + TLS-Fix dokumentiert

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 17:47:44 +00:00

6.0 KiB

04 — Traefik Ingress Controller

Datum: 2026-03-17 (aktualisiert: 2026-03-20) Version: Traefik v3.6.9 (Helm Chart traefik-39.0.201+up39.0.2) Namespace: kube-system Quelle: k3s built-in (automatisch durch k3s installiert) Externe IP: 192.168.11.180 (MetalLB LoadBalancer)


Übersicht

k3s bringt Traefik als Standard-Ingress-Controller mit. Er wird beim ersten Cluster-Start automatisch per Helm in den Namespace kube-system installiert. Eine manuelle Installation war daher nicht nötig.

Traefik v3.6.9 läuft als LoadBalancer-Service und ist auf allen drei Cluster-Nodes erreichbar.


Prüfung: Ist Traefik bereits installiert?

kubectl get pods -n kube-system | grep traefik

Ausgabe:

helm-install-traefik-cbxhx        0/1  Completed  2    11h
helm-install-traefik-crd-8dcsk    0/1  Completed  0    11h
svclb-traefik-dea220eb-29vm9      2/2  Running    2    11h
svclb-traefik-dea220eb-fh52c      2/2  Running    2    11h
svclb-traefik-dea220eb-plnwv      2/2  Running    2    11h
traefik-788bc4688c-c6m7w          1/1  Running    1    11h

→ Traefik läuft bereits. Keine manuelle Installation notwendig.


Helm Release

helm list -n kube-system
NAME         NAMESPACE    REVISION  STATUS    CHART                          APP VERSION
traefik      kube-system  1         deployed  traefik-39.0.201+up39.0.2      v3.6.9
traefik-crd  kube-system  1         deployed  traefik-crd-39.0.201+up39.0.2  v3.6.9

Zwei Helm Releases:

  • traefik: Der eigentliche Controller
  • traefik-crd: Die Custom Resource Definitions (IngressRoute, Middleware, etc.)

Service & Erreichbarkeit

kubectl get svc traefik -n kube-system
NAME      TYPE           CLUSTER-IP     EXTERNAL-IP       PORT(S)
traefik   LoadBalancer   10.43.61.252   192.168.11.180    80:31202/TCP,443:32016/TCP

Hinweis: Initial zeigte EXTERNAL-IP alle drei Node-IPs (192.168.11.170-172). Nach Installation von MetalLB übernimmt MetalLB die LoadBalancer-IP-Vergabe: Traefik bekommt 192.168.11.180 (erste IP des MetalLB-Pools). Alle Ingress-Hostnamen müssen daher auf .180 zeigen, nicht auf Node-IPs.

Traefik ist über die MetalLB-IP erreichbar:

Endpunkt IP HTTP HTTPS
MetalLB VIP 192.168.11.180 :80 :443

NodePorts (intern): 31202 (HTTP), 32016 (HTTPS)


Konfiguration (EntryPoints)

Traefik lauscht auf folgenden Ports:

EntryPoint Port Zweck
web 8000 (→ 80) HTTP
websecure 8443 (→ 443) HTTPS (TLS aktiviert)
traefik 8080 Dashboard / API
metrics 9100 Prometheus Metrics

Aktive Features (aus Deployment-Args):

  • --api.dashboard=true — Dashboard aktiviert
  • --ping=true — Health-Check unter /ping
  • --metrics.prometheus=true — Prometheus-Scraping aktiviert
  • --providers.kubernetescrd — Traefik CRDs (IngressRoute, Middleware, …)
  • --providers.kubernetesingress — Standard Kubernetes Ingress
  • --entryPoints.websecure.http.tls=true — TLS auf websecure
  • --log.level=INFO

IngressClass

kubectl get ingressclass
NAME      CONTROLLER                      PARAMETERS   AGE
traefik   traefik.io/ingress-controller   <none>       11h

IngressClass-Name für Ingress-Objekte: traefik


Custom Resource Definitions (CRDs)

Installierte Traefik-CRDs:

ingressroutes.traefik.io
ingressroutetcps.traefik.io
ingressrouteudps.traefik.io
middlewares.traefik.io
middlewaretcps.traefik.io
serverstransports.traefik.io
serverstransporttcps.traefik.io
tlsoptions.traefik.io
tlsstores.traefik.io
traefikservices.traefik.io

Zusätzlich Traefik Hub CRDs (API Gateway / Management, derzeit ungenutzt): accesscontrolpolicies, aiservices, apiauths, apibundles, etc.


Dashboard aufrufen (Port-Forward)

Das Traefik Dashboard ist über den traefik-EntryPoint (Port 8080) erreichbar, jedoch nicht von außen exponiert:

kubectl port-forward -n kube-system deployment/traefik 9000:8080
# Dashboard: http://localhost:9000/dashboard/

Beispiel: Ingress-Objekt

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app
  namespace: default
spec:
  ingressClassName: traefik
  rules:
  - host: my-app.homelab.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-app-svc
            port:
              number: 80

Beispiel: IngressRoute (Traefik CRD)

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: my-app
  namespace: default
spec:
  entryPoints:
    - web
  routes:
  - match: Host(`my-app.homelab.local`)
    kind: Rule
    services:
    - name: my-app-svc
      port: 80

Alle aktiven Ingresses (Stand 2026-03-20)

Namespace Service nip.io URL int.elbpro.de URL Protokoll
cattle-system rancher rancher.192.168.11.180.nip.io rancher.int.elbpro.de HTTPS
argocd argocd-server argocd.192.168.11.180.nip.io argocd.int.elbpro.de HTTPS
gitea gitea-web gitea.192.168.11.180.nip.io gitea.int.elbpro.de HTTP
longhorn-system longhorn-ingress longhorn.192.168.11.180.nip.io longhorn.int.elbpro.de HTTP
pihole pihole-web pihole.192.168.11.180.nip.io/admin pihole.int.elbpro.de/admin HTTPS

Alle Ingresses zeigen auf 192.168.11.180 (MetalLB VIP → Traefik).

int.elbpro.de DNS-Voraussetzung

# In Pi-hole (Local DNS Records) oder Omada eintragen:
*.int.elbpro.de  →  192.168.11.180

Nächste Schritte

  • MetalLB-IP als Traefik External-IP
  • Alle Ingresses auf .180.nip.io korrigiert
  • int.elbpro.de Hostnamen für alle Services hinzugefügt
  • Wildcard-DNS *.int.elbpro.de → 192.168.11.180 in Pi-hole eintragen
  • Traefik Dashboard per IngressRoute mit BasicAuth exposieren
  • Default TLS-Zertifikat konfigurieren (z.B. via cert-manager + Let's Encrypt)
  • Prometheus-Scraping für Traefik Metrics einrichten