Traefik als lokaler Reverse-Proxy

Di, 23. November 2021, Tim Moritz

Der Betrieb von mehreren Webanwendungen auf einer Maschine ist fast immer mit nervigen Konfigurationsänderungen verbunden. Port 80 bzw. 443 lassen sich eben nur einmal verwenden. Für jede neue Webanwendung muss entweder ein anderer Port verwendet (und gemerkt) werden oder man ändert die Konfiguration seines Webservers oder Reverse-Proxies und lädt die neue Konfiguration.

Besonders nervig wird das ganze, wenn man nur mal kurz etwas ausprobieren möchte bzw. wenn man sich nicht sicher ist, ob man die Anwendung tatsächlich behalten will. Nach dem löschen der Applikation (oder eigentlich schon nach dem beenden) ist die Konfigurationsänderung eigentlich unnötig, aber wer räumt schon gerne auf?

Wäre es nicht schön, wenn ich bspw. die Software Metabase aus unserem Artikel Daten aus einem anderen Blickwinkel , lokal ausprobieren könnte und die Konfiguration wird vollkommen automatisch hinzugefügt und auch wieder entfernt? Genau das macht Traefik (in Verbindung mit Docker) für uns.


Mit wenigen Handgriffen eingerichtet, beobachtet Traefik die laufenden Docker-Container und routet eingehende HTTP(S)-Requests als Reverse-Proxy anhand des Hostnamens an den richtigen Container.

Beispiel Setup

Dieser Artikel geht davon aus, dass bereits eine funktionsfähige Docker-Umgebung (inkl. Docker-Compose) installiert ist. Traefik selbst läuft ebenfalls als Docker-Container. Dieser benötigt ein eigenes virtuelles Netzwerk für das Routing und Zugriff auf den Docker-Socket.

Netzwerk namens "proxy" erstellen:
docker network create proxy

Eine docker-compose.yml in einem Ordner erstellen:

version: '3'

services: traefik: image: traefik:latest container_name: traefik restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock command: - "--providers.docker=true" - "--providers.docker.defaultRule=Host(`{{ normalize .Name }}.localhost`)" ports: - 80:80 networks: - proxy
networks: proxy: external: name: proxy



Führen wir jetzt in diesem Ordner ein

docker-compose up -d


aus, haben wir schon alles konfiguriert. Alle laufenden Container, mit Webinterface, die mit dem Netzwerk "proxy" konfiguriert werden, sollten nun unter http://<<name des containers>>.localhost über den Browser erreichbar sein. Neue Container werden vollautomatisch hinzugefügt, gestoppte entfernt.

Testen können wir das zum Beispiel so:

docker run -d  --name aaa --network=proxy -t traefik/whoami

Rufen wir jetzt im Browser http://aaa.localhost auf, so Antwortet uns eine Webseite, die Auskunft über den gestarteten Container gibt.

Traefik steht unter MIT Lizenz und bietet noch deutlich mehr Möglichkeiten. So lassen sich bspw. die Hostnamen und Ports der Container über Docker-Labels konfigurieren. Mit automatischem handling von Lets-Encrypt Zertifikaten, Load-Balancing, Metriken und vielem mehr ist Traefik auch für den Einsatz auf Servern in Produktion ein wertvolles Tool.

Quelle: https://traefik.io/

Tags

Traefik, Proxy, Container, HTTP(S)-Requests, Docker-Container, Docker, Reverse