- 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>
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-IPalle drei Node-IPs (192.168.11.170-172). Nach Installation von MetalLB übernimmt MetalLB die LoadBalancer-IP-Vergabe: Traefik bekommt192.168.11.180(erste IP des MetalLB-Pools). Alle Ingress-Hostnamen müssen daher auf.180zeigen, 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.iokorrigiert - int.elbpro.de Hostnamen für alle Services hinzugefügt
- Wildcard-DNS
*.int.elbpro.de → 192.168.11.180in 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