Zum Hauptinhalt springen
Version: 5.4

Redundanz Failover mit Traefik

Was ist Traefik?

Traefik ist ein moderner, quelloffener Reverse Proxy und Lastverteiler für microservice-orientierte Architekturen. Er unterstützt mehrere Backends wie Docker und Kubernetes, bietet automatische Diensterkennung, SSL/TLS-Verschlüsselung und einfache Verwaltung über ein Dashboard oder eine API.

Es gibt mehrere Möglichkeiten Traefik zu konfigurieren, da verschiedene "Provider" für eine Konfiguration genutzt werden können, z.B. Dateien und Docker.

Im Folgenden wird zunächst die Konfiguration von Traefik mit Dateien behandelt, da diese Art der Konfiguration universal einsetzbar ist. Später wird mit einem Beispiel gezeigt, wie Traefik in Docker Compose konfiguriert werden kann.

Konfiguration von Failover mit Dateien

Die Allgemeine Konfiguration von Traefik für die Verwendung von Konfigurationsdateien könnte so aussehen. In diesem Beispiel werden alle Konfigurationsdateien im Ordner /etc/traefik/traefik_configs verwendet, um Traefik zu konfigurieren.

traefik.yaml
api:
dashboard: true
insecure: true

ping: {}

providers:
file:
# Legt fest, in welchem Verzeichnis die Konfigurationsdateien liegen.
directory: /etc/traefik/traefik_configs

entryPoints:
web:
address: ":80"

Eine Konfigurationsdatei des Failovers für ein OPC Router Redundanzpaar könnte so aussehen. Diese Datei muss im Konfigurierten Verzeichnis für Konfigurationsdateien liegen.

redundancy_failover.yaml
http:
routers:
api-router:
# Reagiert auf den Präfix /api
rule: "PathPrefix(`/api`)"
# Sendet Anfragen an opcrouter-service
service: opcrouter-service
entryPoints:
- web
middlewares:
- api-rewrite

middlewares:
api-rewrite:
# Ersetzt /api/ durch /services/MyRestServer/api/
replacePathRegex:
regex: "^/api/(.*)"
replacement: "/services/MyRestServer/api/$1"

services:
opcrouter-service:
loadBalancer:
# Server des Redundanzpaares
servers:
- url: "http://opcrouter-primary:8080"
- url: "http://opcrouter-secondary:8080"
# Sendet Anfragen an den angegebenen Pfad, um die Verfügbarkeit zu testen
healthCheck:
path: "/health/runtime/ready"
interval: "5s"
timeout: "2s"