Traefik: Datenverkehr auf einen anderen Server weiterleiten

 

Als Vorbereitung f├╝r das ├ťbersiedeln meiner Websites habe ich nach einer M├Âglichkeit gesucht den kompletten Datenverkehr vom alten Server einfach auf den neuen weiterzuleiten.┬á

DNS-Eintrag ├Ąndern

Bisher habe ich nach dem ├ťbertragen meiner Websites auf einen neuen Server nur den DNS-Eintrag ge├Ąndert und gewartet bis dieser ├╝berall aktiv war. Innerhalb einer gewissen ├ťbergangsphase landeten die Zugriffe dabei teils noch am alten, teils schon am neuen Server.┬áKlar kann vorbereitend die TTL der DNS-Eintr├Ąge verkleinert und somit die ├ťbergangszeit zumindest f├╝r einen Gro├čteil der Zugriffe minimiert werden, dennoch bleibt eine gewisse Zeit, in der die Versionsst├Ąnde der Server etwas auseinanderdriften.┬á

Ôôś
Die TTL (Time to Live) ist eine Eigenschaft eines jeden DNS-Eintrags und gibt vor, in welchen Abst├Ąnden andere DNS-Server diesen auf eine ├änderung kontrollieren sollen. Je nach Auslastung der DNS-Server wird der Wert in der Praxis nicht immer eingehalten, speziell, wenn die Zeit auf wenige Minuten gestellt wird. ├ťbliche TTL-Werte sind 86400 Sekunden (24 Stunden) oder 3600 Sekunden (1 Stunde)

Um die Downtime beim Serverwechsel m├Âglichst gering zu halten, habe ich den Datenverkehr vom alten Server dieses Mal┬áeinfach┬áauf den neuen weitergeleitet.┬á

Alle Anfragen vom alten auf den neuen Server weiterleiten

Ich habe alle Docker-Volumes:┬áTraefik Reverse Proxy + Let┬┤s Encrypt inklusive aller Websites mit rsync auf den neuen Server kopiert und dort aktiviert. Damit alle Zugriff am Ziel-Server┬á landen, habe ich die┬áTraefik-Einstellungen am┬áQuell-Server ersetzt. Mit dem folgenden Setup k├Ânnen ├╝ber die IP-Adresse des alten Servers, alle Zugriffe auf den neuen Server weitergeleitet werden und somit die Zeit bis die DNS-├änderungen fl├Ąchendeckend bekannt sind ├╝berbr├╝ckt werden:

F├╝r das Setup habe ich zwei Dateien angelegt: docker-compose.yml und traefik.yml:

Traefik docker-compose.yml

version: "3.3"
services:
  traefik:
    image: "traefik:v2.8"
    container_name: "traefikforward2"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "./traefik.yml:/etc/traefik/traefik.yml"

Traefik sucht in /etc/traefik nach einer traefik.yml-Datei und versucht diese zu laden:

traefik.yml

Die folgende Traefik-Konfiguration leitet http und https-Anfragen komplett auf einen anderen Server. Die IP-Adresse für die Umleitung ist hier mit dem Platzhalter ???.???.???.??? befüllt und muss entsprechend der IP-Adresse des Zielservers angepasst werden. Durch die Option tls: passthrough wird der komplette Datenverkehr verschlüsselt weitergeleitet und somit dem Ziel-Server überlassen. 

[+]
providers:
  file:
    filename: /etc/traefik/traefik.yml

accessLog: {}
log:
  level: DEBUG

entryPoints:
  web:
    address: ":80"
  websecure:
    address: ":443"

tcp:
  routers:
    router4web:
      entryPoints:
        - web
      service: web-forward
      rule: "HostSNI(`*`)"
    router4websecure:
      entryPoints:
        - websecure
      service: websecure-forward
      rule: "HostSNI(`*`)"
      tls:
         passthrough: true

  services:
    web-forward:
      loadBalancer:
        servers:
          - address: "???.???.???.???:80"

    websecure-forward:
      loadBalancer:
        servers:
          - address: "???.???.???.???:443"

Durch das Anpassen der Rule "HostSNI(`*`)" eines Routers k├Ânnten auch nur bestimmte Websites weitergeleitet werden (* erlaubt alle Domain-Namen). Nat├╝rlich k├Ânnen mit dem Setup auch weitere Ports, wie zum Beispiel 25 beim Betrieb eines Mailservers angegeben werden. Ich habe die Traefik-Konfiguration (traefik.yml) absichtlich schlank gehalten, damit diese noch ├╝bersichtlich bleibt. Der Inhalt der traefik.yml Datei ist ein einfaches Beispiel und hat mir geholfen die einzelnen Traefik-Services besser zu verstehen:

Die entryPoints legen die Zugriffe, als Beispiel auf bestimmte Ports fest. Ein Zugriff über einen entryPoint kann dann von einem Router verarbeitet und an ein Service übergeben werden.

Forwarder starten

Der Start erfolgt aus dem Ordner mit den zuvor angelegten Dateien mit dem Befehl docker-compose up:

docker-compose up -d

Zugriffe kontrollieren

In der traefik.yml-Datei habe ich das Loglevel auf "DEBUG" gesetzt um eingehende Zugriffe in der Ausgabe des Docker-Containers beobachten zu k├Ânnen. Die Aufrufe k├Ânnen einfach mit "docker logs" angezeigt werden:

docker logs traefikforward2 -f

Ausgabe:

Siehe auch, Praxisbericht zum ├ťbersiedeln meines Webservers: alle Docker-Container ├╝bersiedeln

Weitere Informationen zu meinem Traefik-Setup, siehe auch: sichere https Verbindung: Traefik Reverse Proxy + Let┬┤s Encrypt

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE f├╝r deine Bewertung!

Fragen / Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details