Reverse Proxy für externe Server
Nach dem Aufbau meines HomeLab mit Traefik als Reverse Proxy für alle internen Docker Images, besteht noch die Notwendigkeit Webservices auf anderen Servern zu erreichen.
Bei der Installation von Traefik habe ich in der "docker-compose.yml" Datei einen Ordner für dynamische Konfigurationen von Traefik vorgesehen.
[...]
command:
- --providers.file.directory=/etc/traefik/rules
- --providers.file.watch=true
[...]
volumes:
- "./traefik/rules:/etc/traefik/rules"
[...]
Dieser Ordner wird laufend von Traefik überwacht, so dass jede neue Konfigurationsdatei oder deren Änderung sofort übernommen wird.
Für meine Webservices ist es erforderlich, die TLS Verbindung bis zum Endpunkt beizubehalten und nicht am Reverse Proxy zu beenden. Das heißt auch, dass die Zertifikatsverwaltung durch die Webservices selbst erfolgt.
Dafür kann Traefik neben dem HTTP Datenverkehr direkt TCP Pakete weiterleiten ohne den Inhalt zu entschlüsseln. Allein der HTTP-Host-Header wird gelesen, um das Ziel zu finden. Der TCP Datenverkehr wird mit höherer Priorität verarbeitet, als der HTTP Datenverkehr, so dass die restliche Konfiguration für die internen Docker Images nicht betroffen ist.
Das folgende Beispiel zeigt die Weiterleitung von Traefik an einen Webserver. Domainnamen und IP-Adressen sind an die eigene Umgebung anzupassen.
Beispieldatei "/opt/containers/basis/traefik/rules/cloud.yml"
tcp:
routers:
cloud:
rule: "HostSNI(`cloud.example.com`)"
service: cloud
entryPoints:
- "websecure"
tls:
passthrough: true
services:
cloud:
loadBalancer:
servers:
- address: "192.168.178.11:443"