Docker Gids: Traefik installeren – een moderne Reverse Proxy voor Microservices

Traefik is een moderne HTTP reverse proxy en load balancer voor microservices. Traefik maakt alle microservices inzet eenvoudig, geïntegreerd met bestaande infrastructuurcomponenten zoals Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul etc.

Traefik dient als router voor al je microservices toepassingen, waarbij alle client verzoeken naar de juiste microservices bestemming worden gerouteerd.

In deze tutorial laat ik je stap voor stap zien hoe je Traefik moderne reverse proxy installeert en configureert als Docker container op Ubuntu 18.04 LTS (Bionic Beaver).

Voorwaarden

  • Ubuntu 18.04
  • Root privileges

Wat gaan we doen?

  1. Docker installeren op Ubuntu 18.04
  2. Docker Compose installeren
  3. Aangepast Docker-netwerk aanmaken
  4. Traefik installeren en configureren
  5. Testen

Stap 1 – Docker installeren op Ubuntu 18.04

Voor deze gids gebruiken we de nieuwste docker versie die geïnstalleerd kan worden vanuit de officiële docker repository.

Voeg de docker-sleutel en repository toe met het onderstaande commando.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

Het ‘add-apt-repository’ commando zal automatisch alle repositories bijwerken.

Docker installeren op Ubuntu

Installeer nu de nieuwste docker-ce.

sudo apt install docker-ce

Nadat de installatie is voltooid, start je de docker-service en schakel je deze in om telkens bij het opstarten van het systeem te starten.

systemctl start docker
systemctl enable docker

De docker community-editie is geïnstalleerd op Ubuntu 18.04 systeem, controleer de geïnstalleerde docker-versie.

docker version

Controleer docker versie

Extra: Docker draaien voor niet-root gebruiker

Docker container kan gedraaid worden onder de niet-root gebruiker. We hoeven de gebruiker alleen maar toe te voegen aan de docker groep.

Voeg de gebruiker ‘mohammad’ toe.

useradd -m -s /bin/bash mohammad

Voeg nu de ‘mohammad’ gebruiker toe aan de docker groep, en herstart dan de docker service.

usermod -a -G docker mohammad
systemctl restart docker

Test door de docker hello-world uit te voeren.

docker run -it hello-world

En het volgende is het resultaat.

Docker draaien voor niet-root gebruiker

Stap 2 – Installeer Docker Compose

Docker-Compose is een commandoregelhulpmiddel voor het definiëren en beheren van multi-container docker toepassingen.

Docker Compose is een python script, het kan eenvoudig worden geïnstalleerd met het python pip commando of met het apt commando uit de Ubuntu repository. Met compose kunnen we met één commando meerdere Docker-containers draaien.

Installeer docker compose vanuit de repository met het onderstaande apt commando.

sudo apt install docker-compose

Controleer na de installatie de docker compose versie.

docker-compose version

De docker compose 1.17 is geïnstalleerd op Ubuntu 18.04.

Docker Compose installeren

Stap 3 – Maak een aangepast Docker-netwerk aan

In deze tutorial zal de traefik container draaien op het docker custom netwerk. We moeten dus een nieuw docker custom netwerk aanmaken op de server.

Controleer het beschikbare docker netwerk op het systeem.

docker network ls

Maak nu een nieuw aangepast netwerk met de naam ‘proxy’ voor de traefik-container.

docker network create proxy

En je krijgt een willekeurige string van de naam van de netwerkcontainer. Controleer opnieuw het beschikbare netwerk.

docker network ls

Hieronder zie je het resultaat.

Aangepast Docker-netwerk maken

Het aangepaste docker netwerk met de naam ‘proxy’ voor traefik is aangemaakt.

Stap 4 – Traefik Reverse Proxy installeren en configureren

In deze stap zullen we de traefik container aanmaken met HTTPS letsencrypt ingeschakeld (met een domeinnaam ’traefik.hakase-labs.io), en HTTP automatisch omleiden naar HTTPS op traefik.

Traefik voorinstallatie

Voordat we alle traefik configuraties maken, moeten we ‘apache2-utils’ installeren voor het genereren van het versleutelde htpasswd wachtwoord en het aanmaken van de nieuwe traefik directory.

Installeer ‘apache2-utils’ met het onderstaande apt commando.

sudo apt install apache2-utils -y

Voer nu het onderstaande htpasswd commando uit om een nieuw wachtwoord te genereren voor traefik dashboard authenticatie.

htpasswd -nb mohammad password

Bewaar het resultaat in je notitie.

mohammad:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.

Traefik Reverse Proxy installeren en configureren

Log vervolgens in op de gebruiker ‘mohammad’.

su - mohammad

Maak een nieuwe map genaamd ’traefik’ voor alle traefik configuratie.

mkdir -p traefik/
cd traefik/

Traefik configuratie aanmaken

Ga naar de map ’traefik’ en maak een nieuw configuratiebestand ’traefik.toml’ met behulp van vim editor.

cd traefik/
vim traefik.toml

Plak de onderstaande configuratie.

#Traefik Global Configuration
debug = false
checkNewVersion = true
logLevel = "ERROR"

#Define the EntryPoint for HTTP and HTTPS
defaultEntryPoints = ["https","http"]

#Enable Traefik Dashboard on port 8080
#with basic authentication method
#mohammad and password
[web]
address = ":8080"
[web.auth.basic]
users = ["mohammad:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi."]

#Define the HTTP port 80 and
#HTTPS port 443 EntryPoint
#Enable automatically redirect HTTP to HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]

#Enable retry sending a request if the network error
[retry]

#Define Docker Backend Configuration
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "traefik.hakase-labs.io"
watch = true
exposedbydefault = false

#Letsencrypt Registration
#Define the Letsencrypt ACME HTTP challenge
[acme]
email = "[email protected]"
storage = "acme.json"
entryPoint = "https"
OnHostRule = true
  [acme.httpChallenge]
  entryPoint = "http"

Sla op en sluit af.

Opmerking:

Alle informatie over de configuratie staat in het commentaargedeelte‘#.… ‘.

Maak Traefik Docker Compose Script

Maak nu het docker-compose yml script.

vim docker-compose.yml

Plak de configuratie hieronder.

version: '3'

services:

  traefik:
    image: traefik:latest
    command: --docker --docker.domain=hakase-labs.io
    ports:
      - 80:80
      - 443:443
    networks:
      - proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./acme.json:/acme.json
    labels:
      - "traefik.frontend.rule=Host:traefik.hakase-labs.io"
      - "traefik.port=8080"
    container_name: traefik
    restart: always

networks:
  proxy:
    external: true

Sla op en sluit af.

Opmerking:

  1. We maken een nieuwe container genaamd ’traefik’ op basis van de ’traefik:latest’ docker image.
  2. De ’traefik’ container zal draaien op het aangepaste docker netwerk met de naam ‘proxy’ en externe poorten HTTP 80 en HTTPS 443 blootstellen.
  3. De container zal de traefik configuratie ’traefik.toml’ en ‘acme.json’ mounten, inclusief het docker sock bestand.
  4. Label configuratie voor traefik, de frontend domeinnaam, en de traefik poort.

Letsencrypt ACME configuratie

De acme configuratie op ’traefik.toml’ wordt gebruikt voor het automatisch genereren van de SSL letsencrypt. En het is nodig voor het opslagbestand ‘acme.json’.

Maak een nieuw JSON bestand ‘acme.json’ en verander de toestemming in ‘600’.

touch acme.json
chmod 600 acme.json

Alle logs over SSL letsencrypt info zullen in het bestand worden opgeslagen.

Bouw Traefik Container

Nu zijn we klaar om onze eigen traefik-container te bouwen met behulp van de bovenstaande configuratiebestanden.

cd traefik/
ls -lah

Alle configuratie ’traefik.toml’, ‘docker-compose.yml’, en ‘acme.json’ bestanden.

Bouw Traefik Container

Bouw de container met onderstaand docker compose commando.

docker-compose up -d

Bouw de container met docker compose

Als het voltooid is, controleer dan de draaiende container.

docker-compose ps

En je krijgt de Traefik-container aan de praat, die de externe poorten HTTP en HTTPS blootstelt.

Traefik container in werking

Stap 5 – Testen

Open je webbrowser en typ de traefik domeinnaam in de adresbalk. De mijne is:

http://traefik.hakase-labs.io/

Je wordt doorgestuurd naar de HTTPS-verbinding en er wordt gevraagd om de gebruikersnaam en het wachtwoord voor authenticatie.

Authenticatie met wachtwoord

Log in met de gebruiker ‘mohammad’ en het wachtwoord is ‘password’.

En je krijgt het Traefik dashboard zoals hieronder.

Traefik Dashboard

Traefik Gezondheidsstatus pagina.

Traefik Gezondheidspagina

Traefik moderne HTTP reverse-proxy is geïnstalleerd als Docker container op Ubuntu 18.04.

Referentie