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: [email protected] 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.
[email protected]:~/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.