Traefik as Reverse Proxy & Load Balancer Locally
Tentang Traefik
Traefik adalah reverse proxy dan load balancer modern yang dirancang untuk mengelola lalu lintas web di dalam infrastruktur berbasis microservices. Traefik mendukung integrasi langsung dengan berbagai sistem orkestrasi seperti Docker, Kubernetes, dan lainnya, serta menyediakan fitur-fitur canggih untuk memudahkan pengelolaan lalu lintas aplikasi.
Apa itu Reverse Proxy
Reverse proxy adalah server yang duduk di depan satu atau lebih server backend. Tugasnya adalah menerima permintaan dari klien (misalnya, browser pengguna), meneruskannya ke server backend yang sesuai, dan mengirimkan respons kembali ke klien. Dengan reverse proxy, kita bisa:
Menyembunyikan detail server backend.
Membagi beban lalu lintas ke beberapa server backend.
Menambahkan fitur keamanan seperti TLS/SSL.
Traefik bertindak sebagai reverse proxy untuk layanan-layanan Anda.
Fitur Utama Traefik
a. Integrasi Otomatis dengan Orkestrasi Kontainer
Traefik dapat secara otomatis mendeteksi dan mengatur rute untuk layanan yang berjalan di dalam sistem orkestrasi seperti Docker, Kubernetes, Nomad, atau Swarm. Anda tidak perlu secara manual mendefinisikan rute atau memuat ulang konfigurasinya.
b. TLS Termination (HTTPS)
Traefik mendukung TLS termination, yaitu proses mendekripsi lalu lintas HTTPS di sisi Traefik sebelum diteruskan ke server backend. Ini memungkinkan backend Anda tetap berjalan di HTTP biasa. Traefik juga mendukung integrasi dengan Let's Encrypt untuk mengelola sertifikat TLS otomatis.
c. Routing Dinamis
Traefik memungkinkan Anda untuk mendefinisikan rute secara dinamis menggunakan berbagai aturan:
Berdasarkan host (contoh:
Host(
app.example.com
)
).Berdasarkan jalur (contoh:
Path(/api)
).Kombinasi aturan lainnya.
d. Middlewares
Middlewares memungkinkan Anda untuk memodifikasi lalu lintas sebelum diteruskan ke server backend. Contoh middleware:
Redirect Scheme: Mengarahkan HTTP ke HTTPS.
Rate Limiting: Membatasi jumlah permintaan.
Authentication: Menambahkan otentikasi dasar untuk layanan tertentu.
e. Load Balancing
Traefik mendukung berbagai algoritma load balancing (round-robin, least connections, dll.) untuk mendistribusikan lalu lintas ke beberapa server backend.
f. Dashboard
Traefik menyediakan dashboard berbasis web yang memungkinkan Anda memantau status rute, middleware, dan layanan.
g. Plug-and-Play
Traefik mendukung banyak protokol seperti HTTP, HTTPS, TCP, dan UDP secara native, sehingga sangat fleksibel.
Setup Traefik in docker-compose
docker-compose.yaml
version: '3.9'
services:
traefik:
image: traefik:v2.10
container_name: traefik
command:
- '--api.insecure=true' # Enables the Traefik dashboard
- '--providers.docker=true'
- '--providers.file.directory=/etc/traefik/dynamic'
- '--entrypoints.web.address=:80'
- '--entrypoints.websecure.address=:443'
- '--entrypoints.websecure.http.tls=true'
ports:
- '80:80'
- '443:443'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./certs:/certs
- ./dynamic:/etc/traefik/dynamic
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.traefik.rule=Host(`traefik.docker.localhost`)'
- 'traefik.http.routers.traefik.service=api@internal'
- 'traefik.http.routers.traefik.tls=true'
networks:
- frontend
restart: always
nginx:
image: nginx:latest
container_name: nginx
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.nginx.rule=Host(`app.docker.localhost`)'
- 'traefik.http.routers.nginx.entrypoints=websecure'
- 'traefik.http.routers.nginx.tls=true'
- 'traefik.http.services.nginx.loadbalancer.server.port=80'
networks:
- frontend
restart: always
nginxtwo:
image: nginx:latest
container_name: nginxtwo
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.nginxtwo.rule=Host(`apptwo.docker.localhost`)'
- 'traefik.http.routers.nginxtwo.entrypoints=websecure'
- 'traefik.http.routers.nginxtwo.tls=true'
- 'traefik.http.services.nginxtwo.loadbalancer.server.port=80'
networks:
- frontend
restart: always
networks:
frontend:
external: true
buat networks agar semua aplikasi menjadi satu network
$ docker network create frontend
selanjutnya kita setting domain localhost
$ sudo nano /etc/hosts
tambahkan domain local
traefik.docker.localhost
app.docker.localhost
apptwo.docker.localhost
Adding SSL certificates for localhost
Jika sudah setting domain local, selanjutnya generate local SSL dengan mkcert.
untuk ubuntu dapat menginstall dengan
$ sudo apt install mkcert libnss3-tools
$ mkdir cert
$ cd cert
$ mkcert -install
$ mkcert traefik.docker.localhost
$ mkcert app.docker.localhost
$ mkcert apptwo.docker.localhost
Basic Traefik configuration walkthrough
selanjutnya kita buat dynamic configuration file.
$ mkdir dynamic
$ touch tls.yml
# dynamic/tls.yml
tls:
certificates:
- certFile: /certs/traefik.docker.localhost.pem
keyFile: /certs/traefik.docker.localhost-key.pem
- certFile: /certs/app.docker.localhost.pem
keyFile: /certs/app.docker.localhost-key.pem
- certFile: /certs/apptwo.docker.localhost.pem
keyFile: /certs/apptwo.docker.localhost-key.pem
Run Traefik
//jika ingin melihat log tidak berjalan di background
$ docker compose up
//jika ingin lgsung berjalan di background
$ docker compose up -d
kita check di browser
thanks…
Subscribe to my newsletter
Read articles from Muhamad Dani Ramanda directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Muhamad Dani Ramanda
Muhamad Dani Ramanda
Tukang Infra #root