Ich habe einen Traefik V.2 Server der einige lokale Docker-Compose WordPress Seiten als reverse Proxy mit TLS ans Internet anbindet. Der Host ist per VPN mit meiner on-premise Infrastruktur verbunden. Dort läuft ein Dienst, den ich über Traefik im Internet anbieten möchte.
Traefik tritt also als Reverse-Proxy für mein internes Netz auf und erledigt das TLS und die Erstellung der Zertifikate.
Grundsätzlich geht das indem ich in meinem dynamisch eingebundenen Verzeichnis eine YML-Datei mit einem Router und den Services als „loadBalancer“ einbinde
services:
MeinInternerService:
loadBalancer:
servers:
- url: "http://192.168.1.2"
Das funktioniert schon wenn ich ohne TLS arbeite recht schnell:
http:
routers:
InternerService:
entryPoints:
- http
service: MeinInternerService
rule: "Host(`internerservice.domain.tld`)"
services:
MeinInternerService:
loadBalancer:
servers:
- url: "http://192.168.1.59"
In der Traefik-Doku kann man nun Hinweise bekommen wie man da jetzt noch https bzw. TLS rangefummelt bekommt:
Hier die vollständige Datei, die den externen Service in Traefik einbindet:
http:
routers:
InternetService:
entryPoints:
- http
- https
service: MeinInternetService
middlewares:
- "https-redirect@file"
- "default-headers@file"
rule: "Host(`internetservice.domain.tld`)"
tls:
certResolver: le
domains:
- main: internetservice.domain.tld
services:
piler_proxy:
loadBalancer:
servers:
- url: "http://192.168.1.59"
Der Name des/der entryPoints ist in der statischen Konfiguration traefik.yml definiert:
entryPoints:
http:
address: "0.0.0.0:80"
https:
address: "0.0.0.0:443"
Die „middlewares“ habe ich im dynamischen Verzeichnis eingebunden, hier wird der Redirect zu https und noch ein paar andere TLS Header gesetzt. Das soll hier nicht Thema sein.
Wichtig ist wieder der Teil ab tls: Hier kann ich den certResolver aufrufen, der ebenfalls in der traefik.yml definiert wurde:
certificatesResolvers:
le:
acme:
email: root@domain.tld
storage: acme.json
tlsChallenge: {}
Über den Tag „domains:“ werden die Domainnamen definiert, die in das Let’s encrypt Zertifikat integriert werden sollen.