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.