Traefik è un moderno proxy inverso e server di bilanciamento del carico che supporta il bilanciamento del carico di livello 4 (TCP) e di livello 7 (HTTP). La sua configurazione può essere definita in formato JSON, YML o TOML. È costituito da punto di ingresso (frontend), servizio (backend), router (regole), middleware (funzionalità opzionali).
Questo articolo mostrerà come utilizzare il sistema di bilanciamento del carico Traefik in modalità Layer 7 (HTTP).
Prerequisiti
- Docker installato e composizione mobile
- Connessione Internet per scaricare immagini Docker.
- DNS Una mappa di record al tuo dominio per ottenere il certificato Let's Encrypt (ad es. traefik.yourdomain.com)
Configurazione
Eseguirò due server back-end (contenitore nginx) e un container Traefik nella stessa zona di rete Docker. Sto usando traefik.yourdomain.com per la spiegazione. Devi avere il tuo dominio.
Iniziamo creando una directory nella tua posizione iniziale.
$ mkdir traefik && cd traefik
Ora crea una rete Docker usando il seguente comando. Questo aiuta a raggiungere il contenitore dal loro nome.
$ docker network create web_zone
Configurazione Traefik.yaml
Prima di tutto, crea un file chiamato traefik.yaml:
$ vim traefik.yaml
e incolla il seguente contenuto.
# 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 Spiegazione
- I punti di ingresso sono come servizi e porti di elenco front-end.
- certificatesResolvers consiste nell'utilizzare un certificato Letencrypt su richiesta.
- I provider sono il file per definire router/middleware e servizi
Configurazione del provider di file
Ora, nella stessa directory, crea un altro file che abbiamo definito nella sezione provider:
$ vim tls.yaml
e incolla la seguente configurazione di 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 Spiegazione
- La sezione router serve a definire il percorso. Abbiamo due percorsi per http e https
- I backend sono definiti nei servizi, puoi anche specificare algoritmi di bilanciamento del carico.
- tls per definire la configurazione e le opzioni TLS.
Come definito nel file, crea il seguente file per archiviare il certificato Let's Encrypt.
$ touch acme.json
$ chmod 600 acme.json
Docker-componi per traefik
Creerò un contenitore usando la finestra mobile Componi e mappa la porta 80, 443. Tu definisci il tuo nome di dominio. Crea un file docker-compse.yml:
$ vim docker-compose.yml
e incolla la seguente configurazione:
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 Server di backend
Ora eseguiamo due server back-end usando l'immagine nginx. Prima crea una directory,
$ mkdir ~/traefik/backend && cd ~/traefik/backend/
Crea due file di indice come di seguito.
echo "<h1> Hello server 1</h1>" > index-server1.html
echo "<h1> Hello server 2</h1>" > index-server2.html
Docker compone il file per eseguire due server backend nginx
Quello che segue è il semplice file di composizione che crea due contenitori nginx. Crea il file docker-compse.yml:
$ vim docker-compose.yml
e incolla la seguente configurazione:
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 Avvia i contenitori Docker
Ora esegui il contenitore. Per prima cosa, apri il container back-end di nginx usando il comando seguente.
$:~/traefik/backend$ docker compose up -d
Devono essere in esecuzione due contenitori. Confermalo eseguendo il comando seguente.
example@unixlinux.online:~/traefik/backend$ docker ps

Ora, torna alla directory ed esegui il comando seguente per eseguire il bilanciamento del carico traefik.
$:~/traefik$ docker compose up -d
Assicurati che il contenitore traefik sia attivo e funzionante.
$:~/traefik$ docker ps

Sfoglia il sito
Apri un browser e digita il tuo nome di dominio http://traefik.tuodominio.com. Riceverai la risposta di seguito.

Inoltre, se aggiorni la pagina verrai indirizzato al secondo back-end. Questo è l'algoritmo di instradamento predefinito in traefik.

Puoi anche verificare che il certificato sia emesso daletsencrypt mentre il contenitore è attivo. Basta navigare su https://traefik.yourdomain.com

Conclusione
Imparerai come utilizzare traefik come sistema di bilanciamento del carico per il tuo container Docker. Puoi esplorare di più visitando il sito ufficiale https://doc.traefik.io/traefik/ . Grazie.