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