Traefik #
Traefik is a modern load balancer and reverse proxy designed as an Ingress Controller for Kubernetes. It offers dynamic configuration, automatic service discovery, and a wide range of features for managing external access to services within a cluster.
Quelle #
Die Anwendung wird als Helm-Chart von Traefik Labs bezogen.
Dokumentation #
Die offizielle Dokumentation von Traefik ist unter doc.traefik.io/traefik/ zu finden.
Funktion #
Traefik ist das “Eingangstor” zum Kubernetes-Cluster. Es lauscht auf den Ports 80 und 443 auf den Cluster-Nodes und leitet eingehende HTTP/S-Anfragen basierend auf dem Hostnamen und dem Pfad an den richtigen internen Service weiter. Die Konfiguration erfolgt dynamisch: Traefik überwacht die Kubernetes-API auf Ingress- und IngressRoute-Ressourcen und passt seine Routing-Regeln automatisch an, wenn neue Dienste bereitgestellt oder entfernt werden.
Lokale Anpassungen #
Die Konfiguration erfolgt über values.yaml sowie die Manifeste traefik-middlewares.yaml, traefik-ingress.yaml, traefik-services-ip.yaml und traefik-pve.yaml.
Wichtige Einstellungen #
- Deployment-Art: Traefik wird als
Deploymentmit 2 Replicas bereitgestellt. - EntryPoints: Es sind vier EntryPoints definiert:
web(Port 80): Für unverschlüsselten HTTP-Traffic (wird typischerweise auf HTTPS umgeleitet).websecure(Port 443): Für verschlüsselten HTTPS-Traffic.w-alternate(Port 18080): Alternativer HTTP-EntryPoint.ws-alternate(Port 18443): Alternativer HTTPS-EntryPoint.
- Provider: Sowohl der
kubernetesCRD-Provider (fürIngressRoute,Middleware, etc.) als auch derkubernetesIngress-Provider (für Standard-Ingress-Ressourcen) sind aktiviert. - Middlewares:
traefik-middlewares.yamldefiniert die global verwendbaren Middlewares im Namespacekube-system:
| Middleware | Zweck |
|---|---|
localnet |
Zugriff nur aus dem lokalen Netz. Existiert zusätzlich als MiddlewareTCP |
authentik |
Vorgeschaltete Anmeldung über Forward-Auth |
auth-middleware |
Einfache Basic-Auth über das Secret traefik-authsecret |
https-redirect |
Umleitung von HTTP auf HTTPS |
default-headers |
Gemeinsame Sicherheits-Header |
do-nothing |
Platzhalter, um eine Middleware-Referenz wirkungslos zu machen |
Eingebunden werden sie per Annotation als kube-system-<name>@kubernetescrd — der Namespace ist Teil des Namens.
-
Middlewares auf Entrypoint-Ebene:
websecureundws-alternatewenden auf jede Route zwei Middlewares an:default-headersundmaintenance-page-errorsausapps/maintenance-page. Die zweite ersetzt Antworten mit 502, 503 und 504 durch eine Fehlerseite mit Ursache und Hostname. Fehlt eines der beiden Middleware-Objekte, verweigert Traefik alle Routen des Entrypoints. maintenance-page muss deshalb vor dieser Konfiguration ausgerollt sein und darf nicht entfernt werden, solange der Eintrag besteht. -
Leere Services:
allowEmptyServicesist für beide Kubernetes-Provider aktiv. Hat ein Service keine bereiten Pods, bleibt die Route bestehen und Traefik antwortet mit 503, das die Fehlerseite abfängt. Ohne die Option entfernt Traefik die Route und antwortet mit 404. -
Persistenz: Persistenz ist aktiviert, um z.B. ACME-Zertifikate (von Let’s Encrypt) zu speichern.
Installation #
Die Anwendung wird mittels Kustomize und Helm durch ArgoCD im Kubernetes-Cluster bereitgestellt. Die Konfiguration befindet sich im apps/traefik-Verzeichnis. Eine manuelle Installation kann mit folgendem Befehl durchgeführt werden:
1kubectl kustomize --enable-helm apps/traefik | kubectl apply -n kube-system -f -Abhängigkeiten #
- A running Kubernetes cluster.
- MetalLB for LoadBalancer IP allocation.
- Cert-manager for TLS certificate management.
- Authentik (wenn Forward-Authentifizierungs-Middleware verwendet wird).