Traefik adalah modern HTTP reverse proxy dan load balancer untuk memudahkan dalam mendeploy microservices. Traefik dapat diintegrasikan pada infrastruktur Docker, mode Swarm, Kubernetes, Marathon, Consul, Etcd, Rancher, dan Amazon ECS serta dapat melakukan konfigurasi secara otomatis dan dinamis.
Docker CLI #
Saya asumsikan Anda sudah menginstall docker dan memastikan service docker sudah running.
Buat dan edit file /opt/traefik/traefik.yml
untuk konfigurasi docker sebagai backend.
providers:
docker:
# Default host rule.
#
# Optional
# Default: "Host(`{{ normalize .Name }}`)"
#
defaultRule: Host(`{{ normalize .Name }}.example.io`)
# Expose containers by default in traefik
#
# Optional
# Default: true
#
exposedByDefault: false
api:
insecure: true
defaultRule
pada konfig tersebut akan membuat setiap container yang dideploy dapat diakses dengan subdomain
Install traefik
docker run -dit --name traefik \
-p 8080:8080 -p 80:80 \
-v /opt/traefik/traefik.yml:/etc/traefik/traefik.yml \
-v /var/run/docker.sock:/var/run/docker.sock \
traefik --api=true --api.debug=true --api.dashboard=true --api.insecure=true
Start backend server dengan nama test.
docker run -dit --name test traefik/whoami
Selanjutnya test akses traefik melalui http://test.example.io dengan curl
$ curl http://test.example.io
Hostname: 939bfc511e21
IP: 127.0.0.1
IP: 172.18.0.3
RemoteAddr: 172.18.0.2:53478
GET / HTTP/1.1
Host: test.example.io
User-Agent: curl/7.81.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 192.168.100.100
X-Forwarded-Host: test.example.io
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: 6dd6581a3243
X-Real-Ip: 192.168.100.100
Untuk dashboard traefik dapat diakses melalui http://IP:8080
Docker compose #
Buat dan edit file docker-compose.yml
version: '3'
services:
traefik:
# The official v2 Traefik docker image
image: traefik:v2.10
# Enables the web UI and tells Traefik to listen to docker
command: --api=true --api.debug=true --api.dashboard=true --api.insecure=true
ports:
# The HTTP port
- "80:80"
# The Web UI (enabled by --api.insecure=true)
- "8080:8080"
volumes:
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
- /opt/traefik/traefik.yml:/etc/traefik/traefik.yml
whoami:
image: traefik/whoami
Deploy traefik dan whoami.
docker stack deploy -c docker-compose.yml traefik
List container
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7da932edbb65 traefik/whoami:latest "/whoami" 29 minutes ago Up 29 minutes 80/tcp traefik_whoami.1.wse70h8bju510mcx9qa36smkt
b5026204c70e traefik:latest "/entrypoint.sh --ap…" 29 minutes ago Up 29 minutes 80/tcp traefik_traefik.1.wlpw5gztgez348tuos1xtqjqx
Test akses http://traefik_whoami.1.wse70h8bju510mcx9qa36smkt.topan.io dengan curl
$ curl traefik-whoami-1-wse70h8bju510mcx9qa36smkt.topan.io
Hostname: 7da932edbb65
IP: 127.0.0.1
IP: 10.0.6.6
IP: 172.19.0.4
RemoteAddr: 10.0.6.3:47828
GET / HTTP/1.1
Host: traefik-whoami-1-wse70h8bju510mcx9qa36smkt.topan.io
User-Agent: curl/7.81.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 10.0.0.2
X-Forwarded-Host: traefik-whoami-1-wse70h8bju510mcx9qa36smkt.topan.io
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: b5026204c70e
X-Real-Ip: 10.0.0.2
Service whoami dapat Anda scale sesuai kebutuhan
docker service scale traefik_whoami=10

Notes #
Berikut merupakan saran untuk deploy traefik dengan docker compose
version: "3.3"
services:
traefik:
image: "traefik"
command:
- "--log.level=DEBUG"
- "--accesslog=true"
- "--accesslog.filepath=/var/log/log.txt"
- "--accesslog.bufferingsize=100"
- "--api.insecure=true"
- "--providers.docker=true"
# - "--providers.docker.defaultrule=Host(`{{ normalize .Name }}.example.io`)"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
whoami:
image: "traefik/whoami"
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`web5.srv1.de`)"
- "traefik.http.routers.whoami.entrypoints=web"
Details
--log.level=DEBUG
Untuk setting log traefik ke level debug. Defaultnya adalah Error.--accesslog=true
Mengaktifkan access log--accesslog.filepath=/var/log/log.txt
Mengatur file access log ke /var/log/log.txt--accesslog.bufferingsize=100
Melimit baris yang dapat dicatat pada file access log.--api.insecure=true
Mengaktifkan api dengan traefik--providers.docker=true
Untuk setting docker sebagai backend--providers.docker.exposedbydefault=false
Mencegah traefik mengexpose setiap container.--entrypoints.web.address
Setting entrypoint web di traefik ke tujuan port 80traefik.enable=true
Mengizinkan traefik mengexpose containertraefik.http.routers.whoami.rule=Host(
example.com)
Domain yang akan direspon oleh traefik dan mengarahkan request ke container.traefik.http.routers.whoami.entrypoints
Setting entrypoint container ke tujuan service web traefik.