Dalam ekosistem microservices dan arsitektur berbasis container, layanan sering kali dibuat, dihapus, atau di-scale secara dinamis. Meng...
Dalam ekosistem microservices dan arsitektur berbasis container, layanan sering kali dibuat, dihapus, atau di-scale secara dinamis. Menggunakan reverse proxy tradisional seperti Nginx atau Apache HTTP Server dalam arsitektur semacam ini mengharuskan engineer memperbarui file konfigurasi vhost secara manual dan menjalankan nginx -s reload setiap kali ada container baru yang online.
Kini telah hadir Traefik v3, sebuah cloud-native edge router mutakhir yang secara revolusioner mengeliminasi konfigurasi statis tersebut. Traefik langsung mendengarkan event stream dari Docker API Socket; ketika sebuah container dijalankan dengan label tertentu, Traefik secara otomatis membuat rute ruting, mengatur load balancer, hingga menerbitkan sertifikat SSL gratis dari Let's Encrypt secara otomatis tanpa pernah me-reload proses proxy.
1. Konsep Inti Arsitektur Traefik v3
Sebelum menulis konfigurasi, pahami 4 pilar arsitektur yang menggerakkan Traefik v3:
- EntryPoints: Gerbang masuk jaringan tempat Traefik mendengarkan port (biasanya port 80 untuk HTTP dan port 443 untuk HTTPS).
- Routers: Komponen penganalisis lalu lintas yang mencocokkan kriteria permintaan (rule) seperti domain
Host(`api.domainanda.id`)atau path URLPathPrefix(`/v1`). - Middlewares: Komponen filter penengah yang memodifikasi permintaan sebelum diteruskan ke backend (misalnya: pengalihan otomatis HTTP ke HTTPS, otentikasi BasicAuth, rate limiting, atau header keamanan HSTS).
- Services: Target aplikasi backend sebenarnya tempat Traefik meneruskan lalu lintas data (container IP dan target port internal).
2. Struktur Direktori & Konfigurasi Statis Traefik
Siapkan struktur direktori yang bersih pada server host Linux Anda:
sudo mkdir -p /opt/traefik/config
cd /opt/traefik
sudo touch acme.json && sudo chmod 600 acme.json
Buat file konfigurasi statis utama traefik.yml:
sudo tee traefik.yml <<EOF
global:
checkNewVersion: false
sendAnonymousUsage: false
api:
dashboard: true
insecure: false
entryPoints:
web:
address: ":80"
# Otomatis mengalihkan semua traffic HTTP ke HTTPS secara global
http:
redirections:
entryPoint:
to: websecure
scheme: https
permanent: true
websecure:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
network: "traefik-net"
certificatesResolvers:
myresolver:
acme:
email: [email protected]
storage: acme.json
httpChallenge:
entryPoint: web
EOF
3. Deployment Traefik v3 via Docker Compose
Buat jaringan Docker eksternal bersama (shared bridge network) agar Traefik dapat berkomunikasi secara terisolasi dengan container aplikasi lain:
docker network create traefik-net
Selanjutnya, buat file docker-compose.yml untuk meluncurkan Traefik:
sudo tee docker-compose.yml <<EOF
services:
traefik:
image: traefik:v3.2
container_name: traefik
restart: always
ports:
- "80:80"
- "443:443"
networks:
- traefik-net
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/traefik.yml:ro
- ./acme.json:/acme.json
labels:
- "traefik.enable=true"
# Proteksi akses Dashboard Traefik
- "traefik.http.routers.dashboard.rule=Host(\`traefik.domainanda.id\`)"
- "traefik.http.routers.dashboard.service=api@internal"
- "traefik.http.routers.dashboard.entrypoints=websecure"
- "traefik.http.routers.dashboard.tls.certresolver=myresolver"
# Tambahkan middleware BasicAuth untuk keamanan dashboard
- "traefik.http.routers.dashboard.middlewares=auth"
# Format user:password ter-hash htpasswd (contoh: admin:password)
- "traefik.http.middlewares.auth.basicauth.users=admin:\$\$apr1\$\$xyz123...hashanda"
networks:
traefik-net:
external: true
EOF
# Jalankan Traefik
docker compose up -d
docker compose logs -f
4. Menerbitkan Layanan Baru (Contoh: Microservice Whoami)
Keajaiban Traefik terlihat saat Anda menjalankan aplikasi baru. Anda cukup menyematkan labels deklaratif pada file docker-compose.yml aplikasi tersebut tanpa menyentuh file konfigurasi Traefik:
services:
whoami-service:
image: traefik/whoami
container_name: whoami-app
restart: unless-stopped
networks:
- traefik-net
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(\`whoami.domainanda.id\`)"
- "traefik.http.routers.whoami.entrypoints=websecure"
- "traefik.http.routers.whoami.tls.certresolver=myresolver"
- "traefik.http.services.whoami.loadbalancer.server.port=80"
networks:
traefik-net:
external: true
Segera setelah perintah docker compose up -d dijalankan pada aplikasi di atas, Traefik akan mendeteksi container, memvalidasi domain dengan Let's Encrypt melalui HTTP-01 challenge, menyimpan sertifikat SSL ke acme.json, dan menyajikan situs Anda melalui protokol HTTPS terenkripsi sempurna!
:ro (Read-Only). Untuk lingkungan multi-tenant atau klaster produksi berskala besar, disarankan memasang Docker Socket Proxy (seperti Tecnativa docker-socket-proxy) yang hanya mengizinkan metode GET pada endpoint /events, /containers, dan /version.
Kesimpulan
Traefik v3 mengubah paradigma manajemen reverse proxy di era modern. Dengan integrasi native pada Docker, penerbitan sertifikat SSL otomatis, dan konfigurasi berbasis label deklaratif, tim pengembang dan tim operasi dapat melakukan rilis layanan baru secara independen, cepat, dan aman tanpa friksi operasional manual.
COMMENTS