Traefik Tutorial - Einrichtung und Konfiguration als Reverse Proxy

In diesem Tutorial erfährst du, wie du Traefik als Reverse Proxy mit Docker Compose einrichtest und konfigurierst. Traefik bietet eine moderne und flexible Lösung, um den Datenverkehr für deine Anwendungen zu verwalten und sicherzustellen, dass sie über das Internet sicher erreichbar sind. Wir behandeln die Konfiguration von docker-compose.yml, traefik.toml, traefik_dynamic.toml und acme.json. Zudem erklären wir, was ein Reverse Proxy ist und warum Zertifikate zur Sicherung deiner Anwendungen wichtig sind.

Vorbereitung: Git-Repository klonen

Bevor wir beginnen, klone das Traefik-Repository von GitHub:

git clone https://github.com/traefik/traefik.git
cd traefik

1. Was ist Traefik und ein Reverse Proxy?

Traefik ist ein moderner Reverse Proxy und Load Balancer, der speziell für Container-basierte und Microservices-Architekturen entwickelt wurde. Es bietet automatische Erkennung und Konfiguration von Diensten, SSL/TLS-Zertifikatsverwaltung und vieles mehr.

Ein Reverse Proxy ist ein Server, der Anfragen von Clients entgegennimmt und diese an einen oder mehrere Backend-Server weiterleitet. Der Reverse Proxy fungiert als Vermittler zwischen Clients und den eigentlichen Diensten, wodurch Funktionen wie Lastverteilung, SSL-Verschlüsselung und Caching ermöglicht werden.

Beschreibung der Arbeit eines Traefik Reverse Proxies

2. Konfiguration der docker-compose.yml

Die docker-compose.yml Datei definiert die Dienste und Netzwerke, die für Traefik benötigt werden.

Beispiel docker-compose.yml:

version: '3.7'

services:
  traefik:
    image: traefik:v3.0
    container_name: traefik
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./traefik_dynamic.toml:/traefik_dynamic.toml
      - ./acme.json:/acme.json
    networks:
      - web

networks:
  web:
    external: true

Wichtiger Hinweis: Jeder Container, der an Traefik angebunden werden soll, muss dem Netzwerk web hinzugefügt werden. Hier ein Beispiel, wie du dies in einer Docker Compose Datei für einen Service machst:

version: '3.7'

services:
  myservice:
    image: myimage
    networks:
      - web
      - other_network

networks:
  web:
    external: true
  other_network:
    driver: bridge

3. Konfiguration der traefik.toml

Die traefik.toml Datei enthält grundlegende Einstellungen für Traefik, einschließlich der Definition von EntryPoints, der Aktivierung des Dashboards und der Verwaltung von SSL-Zertifikaten.

Beispiel traefik.toml:

[entryPoints]
  [entryPoints.web]
    address = ":80"
    [entryPoints.web.http.redirections.entryPoint]
      to = "websecure"
      scheme = "https"

  [entryPoints.websecure]
    address = ":443"
    [entryPoints.websecure.http.tls]
      certResolver = "lets-encrypt"

[api]
  dashboard = true

[certificatesResolvers.lets-encrypt.acme]
  email = "example@example.com"  # Ersetze dies durch deine E-Mail-Adresse
  storage = "acme.json"
  [certificatesResolvers.lets-encrypt.acme.httpChallenge]
    entryPoint = "web"

[providers.docker]
  watch = true
  network = "web"

[providers.file]
  filename = "traefik_dynamic.toml"

Erklärung der traefik.toml Konfiguration:

  • EntryPoints: Diese definieren die Ports, auf denen Traefik auf Anfragen lauscht.

    • web: Lauscht auf Port 80 für HTTP-Verbindungen.
    • websecure: Lauscht auf Port 443 für HTTPS-Verbindungen.
    • Redirection von HTTP zu HTTPS: entryPoints.web.http.redirections.entryPoint.to = "websecure" sorgt dafür, dass alle HTTP-Anfragen automatisch auf HTTPS umgeleitet werden, um eine sichere Verbindung zu gewährleisten. Dies erhöht die Sicherheit, indem es sicherstellt, dass alle Verbindungen verschlüsselt sind.
  • API: Aktiviert das Traefik-Dashboard, das nützliche Informationen über die Konfiguration und den Status von Traefik bietet.

  • Certificates Resolvers: Diese Konfiguration ermöglicht es Traefik, SSL-Zertifikate automatisch von Let’s Encrypt zu beziehen und zu verwalten. Hierbei:

    • email ist die Kontakt-E-Mail-Adresse, die für Zertifikatsbenachrichtigungen verwendet wird.
    • storage definiert die Datei, in der die Zertifikate gespeichert werden.
    • httpChallenge spezifiziert den HTTP-Endpoint, der für die Zertifikatsvalidierung verwendet wird.
  • Providers:

    • Docker: providers.docker ermöglicht es Traefik, Docker-Container automatisch zu erkennen und als Dienste hinzuzufügen. watch = true sorgt dafür, dass Traefik kontinuierlich nach Änderungen in den Docker-Containern sucht. network = "web" stellt sicher, dass Traefik nur Container im web Netzwerk erkennt.
    • File: providers.file lädt zusätzliche Konfigurationen aus der Datei traefik_dynamic.toml. Dies ist nützlich für komplexe Einstellungen, die nicht in der Hauptkonfigurationsdatei untergebracht werden können.

4. Konfiguration der traefik_dynamic.toml

Die traefik_dynamic.toml Datei wird für dynamische Konfigurationen wie Router und Middleware verwendet.

Beispiel traefik_dynamic.toml:

[http.middlewares.simpleAuth.basicAuth]
  users = [
    "admin:$apr1$VATlJAVP$w.fo1IG.3DTzdkyVOG/xT1"
  ]

[http.routers.api]
  rule = "Host(`traefik.deine-domain.de`)"  # Ersetze dies durch deine Domain
  entrypoints = ["websecure"]
  middlewares = ["simpleAuth"]
  service = "api@internal"
  [http.routers.api.tls]
    certResolver = "lets-encrypt"

Erklärung der traefik_dynamic.toml Konfiguration:

  • Middleware Authentication:

    • Basic Auth: Die basicAuth Middleware sorgt für eine einfache HTTP-Basic-Authentifizierung. Benutzer und Passwörter werden in der Form user:hashed_password angegeben.
    • Passwort-Hashing: Es ist wichtig, dass das Passwort gehasht ist, um die Sicherheit zu erhöhen. Verwende dazu ein Tool wie htpasswd, um das Passwort zu hashen. Hier ein Beispiel, wie du das machen kannst:
      htpasswd -nb admin your_password
      
      Das generiert eine Ausgabe wie admin:$apr1$VATlJAVP$w.fo1IG.3DTzdkyVOG/xT1, die du in deine Konfigurationsdatei einfügen kannst. Mehr Informationen dazu findest du in der offiziellen Traefik-Dokumentation zur Basic Auth.
  • Router Konfiguration:

    • Rule: rule = "Host(traefik.deine-domain.de)" legt fest, dass dieser Router auf Anfragen für traefik.deine-domain.de reagiert. Ersetze traefik.deine-domain.de durch deine eigene Domain.
    • Entrypoints: entrypoints = ["websecure"] gibt an, dass dieser Router nur HTTPS-Anfragen verarbeitet.
    • Middlewares: middlewares = ["simpleAuth"] bindet die vorher definierte Middleware zur Authentifizierung an diesen Router.
    • Service: service = "api@internal" stellt sicher, dass die Anfragen an den internen API-Service von Traefik weitergeleitet werden.
    • TLS: certResolver = "lets-encrypt" gibt an, dass für diesen Router ein SSL-Zertifikat über Let’s Encrypt bezogen werden soll.

5. Verwendung der acme.json

Die acme.json Datei speichert Informationen über die SSL-Zertifikate, die von Let’s Encrypt ausgestellt und von Traefik verwaltet werden. Diese Datei wird automatisch von Traefik erstellt und bei jeder Zertifikatserneuerung aktualisiert.

Beispiel acme.json:

Die Datei wird automatisch erstellt und verwaltet. Hier ein stark vereinfachtes Beispiel:

{
  "Account": {
    "Email": "example@example.com",  # Ersetze dies durch deine E-Mail-Adresse
    "Registration": {...}
  },
  "Certificates": [
    {
      "Domain": {
        "Main": "example.com"
      },
      "Certificate": "...",
      "Key": "...",
      "Store": "..."
    }
  ]
}

Automatische Erstellung: Diese Datei wird bei der ersten Ausführung von Traefik und bei jeder Zertifikatserneuerung automatisch erstellt und aktualisiert. Tra

efik erstellt für jeden neuen Container, der ein SSL-Zertifikat benötigt, einen Eintrag in dieser Datei. Die acme.json enthält alle erforderlichen Informationen für die Verwaltung der Zertifikate, einschließlich der notwendigen Details zur Registrierung und den Schlüsseln für die einzelnen Zertifikate.

Fazit

Jetzt bist du bereit, Traefik zu verwenden, um deine Anwendungen sicher und effizient zu verwalten!

Bei Fragen oder wenn du Unterstützung bei der Einrichtung oder Konfiguration von Traefik benötigst, steht dir unser Discord-Channel zur Verfügung. Trete unserer Community bei und tausche dich mit anderen Nutzern aus, um schnelle Hilfe und wertvolle Tipps zu erhalten. Hier geht’s zum Discord-Channel. Wir freuen uns auf dich!

Hier sind die Verlinkungen im Markdown-Format:

Weitere nützliche Blogbeiträge

ayedo Alien Discord

Werde Teil der ayedo Community

In unserer Discord Community findest du Antworten auf deine Fragen rund um das Thema ayedo, Kubernetes und Open Source. Hier erfährst du in Realtime was es Neues bei ayedo und unseren Partnern gibt und hast die Möglichkeit mit unserem Team in direkten Kontakt zu treten.

Join the Community ↗

Ähnliche Inhalte

Alle Blogs →



Fabian Peter · 10.06.2024 · ⏳ 3 Minuten

Compliance leicht gemacht: Die ISO27001 als Schlüssel zur Einhaltung gesetzlicher Vorschriften

Compliance leicht gemacht: Die ISO27001 als Schlüssel zur Einhaltung gesetzlicher Vorschriften Die Einhaltung gesetzlicher Anforderungen und Datenschutzrichtlinien ist für Unternehmen eine ständige …

Lesen →

Lewin Grunenberg · 09.06.2024 · ⏳ 3 Minuten

Baserow mit Traefik-Labels bereitstellen und unter DNS-Eintrag nutzen

Einleitung In diesem Beitrag zeigen wir dir, wie du Baserow mithilfe von Docker Compose und Traefik bereitstellen und es über einen DNS-Eintrag wie https://data.deine-domain.org zugänglich machen …

Lesen →

Lewin Grunenberg · 09.06.2024 · ⏳ 4 Minuten

Mattermost mit Traefik-Labels bereitstellen und unter DNS-Eintrag nutzen

Einleitung In diesem Beitrag zeigen wir dir, wie du Mattermost mit Docker Compose und Traefik bereitstellst und es über einen DNS-Eintrag wie https://chat.deine-domain.org erreichst. Diese …

Lesen →

Lewin Grunenberg · 09.06.2024 · ⏳ 4 Minuten

Paperless-ngx mit Traefik-Labels bereitstellen und unter DNS-Eintrag nutzen

Einleitung In diesem Beitrag zeigen wir dir, wie du Paperless-ngx mit Docker Compose und Traefik bereitstellst und es über einen DNS-Eintrag wie https://docs.deine-domain.org erreichst. Diese …

Lesen →

Lewin Grunenberg · 09.06.2024 · ⏳ 3 Minuten

Portainer mit Traefik-Labels bereitstellen und unter DNS-Eintrag nutzen

Einleitung: Portainer mit Traefik-Labels bereitstellen und unter DNS-Eintrag nutzen In diesem Beitrag zeigen wir dir, wie du Portainer mit Docker Compose und Traefik bereitstellst und es über einen …

Lesen →


Interessiert an weiteren Inhalten? Hier gehts zu allen Blogs →

Kontaktieren Sie uns

Unsere Cloud-Experten beraten Sie gerne und individuell.

Wir antworten in der Regel innerhalb weniger Stunden auf Ihre Nachricht.

Zu Gen-Z für E-Mail? Einfach mal Discord versuchen. Unter +49 800 000 3706 können Sie unter Angabe Ihrer Kontaktdaten auch einen Rückruf vereinbaren. Bitte beachten Sie, dass es keine Möglichkeit gibt, uns telefonisch direkt zu erreichen. Bitte gar nicht erst versuchen. Sollten Sie dennoch Interesse an synchroner Verfügbarkeit via Telefon haben, empfehlen wir Ihnen unseren Priority Support.