Traefik ist ein moderner Reverse-Proxy- und Load-Balancing-Server, der Layer-4- (TCP) und Layer-7-Lastausgleich (HTTP) unterstützt. Seine Konfiguration kann im JSON-, YML- oder im TOML-Format definiert werden. Es besteht aus Einstiegspunkt (Frontend), Dienst (Backend), Router (Regeln), Middlewares (optionale Funktionen).
In diesem Artikel wird gezeigt, wie Sie den Traefik-Load-Balancer im Layer-7-Modus (HTTP) verwenden.
Voraussetzungen
- Installiertes Docker und Docker-Compose
- Internetverbindung zum Herunterladen von Docker-Images.
- DNS A-Eintrag wird Ihrer Domain zugeordnet, um ein Let’s Encrypt-Zertifikat zu erhalten (z. B. traefik.yourdomain.com)
Konfiguration
Ich werde zwei Backend-Server (nginx-Container) und einen Traefik-Container in derselben Docker-Netzwerkzone ausführen. Ich verwende traefik.yourdomain.com für die Erklärung. Sie benötigen eine eigene Domain.
Beginnen wir damit, ein Verzeichnis an Ihrem Heimatstandort zu erstellen.
$ mkdir traefik && cd traefik
Erstellen Sie nun mit dem folgenden Befehl ein Docker-Netzwerk. Dies hilft, den Container über seinen Namen zu erreichen.
$ docker network create web_zone
Traefik.yaml-Konfiguration
Erstellen Sie zunächst eine Datei mit dem Namen traefik.yaml:
$ vim traefik.yaml
und fügen Sie den folgenden Inhalt ein.
# Static configuration entryPoints: unsecure: address: :80 secure: address: :443 certificatesResolvers: myresolver: acme: email: [email protected] storage: acme.json httpChallenge: entryPoint: unsecure providers: file: filename: tls.yaml watch: true
Erklärung
- Einstiegspunkte sind wie Front-End-Auflistungsdienste und Ports.
- certificatesResolvers soll ein Letsencrypt-Zertifikat auf Abruf verwenden.
- Provider sind die Datei zum Definieren von Routern/Middlewares und Diensten
Dateianbieterkonfiguration
Erstellen Sie nun im selben Verzeichnis eine weitere Datei, die wir im Provider-Abschnitt definiert haben:
$ vim tls.yaml
und fügen Sie die folgende Yaml-Konfiguration ein.
http: routers: http_router: rule: "Host(`traefik.yourdomain.com`)" service: allbackend https_router: rule: "Host(`traefik.yourdomain.com`)" service: allbackend tls: certResolver: myresolver options: tlsoptions services: allbackend: loadBalancer: servers: - url: "http://myserver1/" - url: "http://myserver2/" tls: options: tlsoptions: minVersion: VersionTLS12
Erklärung
- Der Router-Abschnitt soll die Route definieren. Wir haben zwei Routen für http und https
- Backends werden in Diensten definiert, Sie können auch Lastausgleichsalgorithmen angeben.
- tls zum Definieren der TLS-Konfiguration und -Optionen.
Wie in der Datei definiert, erstellen Sie die folgende Datei zum Speichern des Let’s Encrypt-Zertifikats.
$ touch acme.json
$ chmod 600 acme.json
Docker-Compose für Traefik
Ich werde einen Container mit Docker Compose erstellen und Port 80, 443 zuordnen. Sie definieren Ihren Domainnamen. Erstellen Sie eine Datei docker-compse.yml:
$ vim docker-compose.yml
und fügen Sie die folgende Konfiguration ein:
version: '3' services: traefik: image: traefik:latest command: --docker --docker.domain=yourdomain.com ports: - 80:80 - 443:443 networks: - web_zone volumes: - /run/docker.sock:/run/docker.sock - ./traefik.yaml:/traefik.yaml - ./tls.yaml:/tls.yaml - ./acme.json:/acme.json container_name: traefik restart: always networks: web_zone: external: true
Backend-Server
Lassen Sie uns nun zwei Backend-Server mit dem Nginx-Image ausführen. Erstellen Sie zuerst ein Verzeichnis,
$ mkdir ~/traefik/backend && cd ~/traefik/backend/
Erstellen Sie zwei Indexdateien wie unten beschrieben.
echo "<h1> Hello server 1</h1>" > index-server1.html
echo "<h1> Hello server 2</h1>" > index-server2.html
Docker Compose-Datei zum Ausführen von zwei Nginx-Backend-Servern
Das Folgende ist die einfache Compose-Datei, die zwei Nginx-Container erstellt. Docker-compse.yml-Datei erstellen:
$ vim docker-compose.yml
und fügen Sie die folgende Konfiguration ein:
version: '3' services: myserver1: image: nginx container_name: nginx1 restart: always volumes: - ./index-server1.html:/usr/share/nginx/html/index.html networks: - web_zone myserver2: image: nginx container_name: nginx2 restart: always volumes: - ./index-server2.html:/usr/share/nginx/html/index.html networks: - web_zone networks: web_zone: external: true
Starten Sie die Docker-Container
Führen Sie nun den Container aus. Erstellen Sie zuerst den nginx-Backend-Container mit dem folgenden Befehl.
$:~/traefik/backend$ docker compose up -d
Es müssen zwei Container ausgeführt werden. Bestätigen Sie dies, indem Sie den folgenden Befehl ausführen.
[email protected]:~/traefik/backend$ docker ps
Gehen Sie nun zurück in das Verzeichnis und führen Sie den folgenden Befehl aus, um den Traefik-Load-Balancer auszuführen.
$:~/traefik$ docker compose up -d
Stellen Sie sicher, dass der Traefik-Container betriebsbereit ist.
$:~/traefik$ docker ps
Durchsuchen Sie die Website
Öffnen Sie einen Browser und geben Sie Ihren Domainnamen http://traefik.yourdomain.com ein. Sie erhalten die Antwort unten.
Wenn Sie die Seite aktualisieren, werden Sie außerdem zum zweiten Backend weitergeleitet. Dies ist der Standard-Routing-Algorithmus in Traefik.
Sie können auch überprüfen, ob das Zertifikat von letsencrypt ausgestellt wurde, während der Container aktiv ist. Navigieren Sie einfach zu https://traefik.yourdomain.com
Schlussfolgerung
Sie lernen, wie Sie Traefik als Load Balancer für Ihren Docker-Container verwenden. Weitere Informationen finden Sie auf der offiziellen Website https://doc.traefik.io/traefik/ . Danke.