Traefik v.2: Service auf einem anderen Host per loadBalancer mit TLS einbinden

Von | September 8, 2022

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert