Traefik je moderní reverzní proxy server a server pro vyrovnávání zátěže, který podporuje vyrovnávání zátěže vrstvy 4 (TCP) a vrstvy 7 (HTTP). Jeho konfiguraci lze definovat ve formátu JSON, YML nebo ve formátu TOML. Skládá se ze vstupního bodu (frontend), služby (backend), směrovače (pravidla), middlewaru (volitelné funkce).
Tento článek demonstruje, jak používat nástroj pro vyrovnávání zatížení Traefik v režimu vrstvy 7 (HTTP).
Předpoklady
- Nainstalovaný docker a docker-compose
- Připojení k internetu pro stahování obrázků dockeru.
- DNS Mapa záznamů do vaší domény pro získání certifikátu Let’s Encrypt (např. traefik.yourdomain.com)
Konfigurace
Budu provozovat dva backendové servery (kontejner nginx) a jeden kontejner Traefik ve stejné zóně sítě Docker. Pro vysvětlení používám traefik.yourdomain.com. Musíte mít vlastní doménu.
Začněme vytvořením adresáře ve vašem domovském umístění.
$ mkdir traefik && cd traefik
Nyní vytvořte dockerovou síť pomocí následujícího příkazu. To pomáhá dostat se do kontejneru z jejich jména.
$ docker network create web_zone
Konfigurace Traefik.yaml
Nejprve vytvořte soubor s názvem traefik.yaml:
$ vim traefik.yaml
a vložte následující obsah.
# Static configuration
entryPoints:
unsecure:
address: :80
secure:
address: :443
certificatesResolvers:
myresolver:
acme:
email: example@unixlinux.online
storage: acme.json
httpChallenge:
entryPoint: unsecure
providers:
file:
filename: tls.yaml
watch: true Vysvětlení
- Vstupní body jsou jako frontendové seznamové služby a porty.
- certificatesResolvers je používat na vyžádání letsencrypt certifikát.
- Poskytovatelé jsou soubor, který definuje směrovače / middleware a služby
Konfigurace poskytovatele souborů
Nyní ve stejném adresáři vytvořte další soubor, který jsme definovali v sekci poskytovatele:
$ vim tls.yaml
a vložte následující konfiguraci yaml.
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 Vysvětlení
- Sekce routeru má definovat trasu. Máme dvě cesty pro http a https
- Backendy jsou definovány ve službách, můžete také určit algoritmy pro vyrovnávání zátěže.
- tls pro definování konfigurace a možností TLS.
Jak je definováno v souboru, vytvořte následující soubor pro uložení certifikátu Let’s Encrypt.
$ touch acme.json
$ chmod 600 acme.json
Docker-compose pro traefik
Vytvořím kontejner pomocí docker compose a map 80, 443 port. Definujete název své domény. Vytvořte soubor docker-compse.yml:
$ vim docker-compose.yml
a vložte následující konfiguraci:
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
Nyní pojďme spustit dva backendové servery pomocí obrazu nginx. Nejprve vytvořte adresář
$ mkdir ~/traefik/backend && cd ~/traefik/backend/
Vytvořte dva indexové soubory, jak je uvedeno níže.
echo "<h1> Hello server 1</h1>" > index-server1.html
echo "<h1> Hello server 2</h1>" > index-server2.html
Docker složí soubor pro spuštění dvou backendových serverů nginx
Následuje jednoduchý skládací soubor, který vytváří dva kontejnery nginx. Vytvořte soubor docker-compse.yml:
$ vim docker-compose.yml
a vložte následující konfiguraci:
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 Spusťte kontejnery Docker
Nyní spusťte kontejner. Nejprve vytvořte backendový kontejner nginx pomocí následujícího příkazu.
$:~/traefik/backend$ docker compose up -d
Musí běžet dva kontejnery. Potvrďte to provedením následujícího příkazu.
example@unixlinux.online:~/traefik/backend$ docker ps

Nyní se vraťte do adresáře a spusťte následující příkaz pro spuštění nástroje traefik load balancer.
$:~/traefik$ docker compose up -d
Ujistěte se, že je kontejner traefik v provozu.
$:~/traefik$ docker ps

Procházet web
Otevřete prohlížeč a zadejte název své domény http://traefik.yourdomain.com. Níže obdržíte odpověď.

Také, pokud obnovíte stránku, budete přesměrováni na druhý backend. Toto je výchozí směrovací algoritmus v traefik.

Můžete také zkontrolovat, zda je certifikát vydán pomocí letsencrypt, když je kontejner v provozu. Stačí přejít na https://traefik.yourdomain.com

Závěr
Naučíte se používat traefik jako nástroj pro vyrovnávání zatížení pro váš docker kontejner. Více můžete prozkoumat na oficiálních stránkách https://doc.traefik.io/traefik/ . Děkuji.