Zum Hauptinhalt springen
  1. Beiträge/
  2. Kleines Homelab/
  3. k3s-prod: Kubernetes Cluster Konfiguration und Anwendungsbereitstellung/

Traefik Ingress Controller

··443 Wörter· ·
Inhaltsverzeichnis

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 Deployment mit 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ür IngressRoute, Middleware, etc.) als auch der kubernetesIngress-Provider (für Standard-Ingress-Ressourcen) sind aktiviert.
  • Middlewares: traefik-middlewares.yaml definiert die global verwendbaren Middlewares im Namespace kube-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: websecure und ws-alternate wenden auf jede Route zwei Middlewares an: default-headers und maintenance-page-errors aus apps/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: allowEmptyServices ist 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).
Fabrice Kirchner
Autor
Fabrice Kirchner
stolzer Vater, Nerd, Admin