Episode ini membawa Traefik melampaui HTTP: entrypoint dan router TCP dengan rule HostSNI, TLS termination versus passthrough untuk database, SSH, dan SMTP, entrypoint UDP dengan load balancing, serta contoh nyata untuk DNS dan game server.

Sejauh ini semua routing Traefik berurusan dengan HTTP. Tapi Traefik juga adalah proxy TCP dan UDP yang mumpuni: database PostgreSQL, SSH, SMTP, DNS, dan game server semuanya bisa dilewatkan lewat gerbang yang sama, dengan rule routing dan TLS passthrough yang fleksibel.
Episode 18 membedah tiga lapis: router TCP dengan HostSNI, router UDP, dan pola TLS passthrough. Dengan memahami ini, kalian bisa memusatkan seluruh akses jaringan kalian — bukan hanya web — ke satu titik kontrol.
Entrypoint TCP didefinisikan dengan protokol tcp. Penamaan bebas, misalnya ssh, db, atau smtp:
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
ssh:
address: ":2222"
db:
address: ":5432"Router TCP memakai HostSNI sebagai matcher utama — nilai yang sama dengan SNI pada handshake TLS. Contoh router TCP untuk database PostgreSQL, lengkap dengan label alternatif traefik.tcp.routers.pg.rule yang setara di Docker:
tcp:
routers:
pg-internal:
rule: "HostSNI(`pg.internal.local`)"
entrypoints:
- db
service: pg-svc
tls:
passthrough: true
services:
pg-svc:
loadBalancer:
servers:
- address: "10.0.0.80:5432"Perhatikan tls.passthrough: true: Traefik tidak mendekripsi koneksi, hanya melihat SNI untuk memutuskan rute, lalu meneruskan stream mentah ke PostgreSQL. Backend memegang sertifikat dan menangani TLS sepenuhnya.
tcp:
routers:
smtp-secure:
rule: "HostSNI(`mail.example.com`)"
entrypoints:
- smtp
service: smtp-svc
tls: {}
services:
smtp-svc:
loadBalancer:
servers:
- address: "10.0.0.90:2525"Router SMTP di atas memakai tls: {} — Traefik menangani TLS dengan sertifikat yang tersedia, lalu meneruskan plaintext ke backend di port internal. Waktu paling tepat memilih termination: kalian ingin satu tempat untuk sertifikat; paling tepat passthrough: keamanan end-to-end wajib.
HostSNI per instance, terminate atau passthrough sesuai kebutuhan.Untuk protokol yang tidak memakai TLS sama sekali (misalnya SSH mentah), Traefik menyediakan matcher khusus: rule HostSNI(*) mencocokkan semua koneksi dan mengarahkannya ke service pilihan. Ini pola yang dipakai untuk entrypoint single-purpose:
tcp:
routers:
ssh-gateway:
rule: "HostSNI(`*`)"
entrypoints:
- ssh
service: ssh-svc
services:
ssh-svc:
loadBalancer:
servers:
- address: "10.0.0.100:22"UDP bekerja serupa dengan TCP, dengan satu perbedaan besar: tidak ada handshake. Untuk itu, router UDP memakai rule HostSNI(*) untuk menerima semua datagram pada entrypoint-nya:
entryPoints:
dns-udp:
address: ":53/udp"
udp:
routers:
dns-router:
rule: "HostSNI(`*`)"
entrypoints:
- dns-udp
service: dns-svc
services:
dns-svc:
loadBalancer:
servers:
- address: "10.0.0.110:53"Load balancing UDP di Traefik meneruskan datagram ke server yang dipilih berdasarkan rute; karena sifat connectionless, pemilihan server memakai hash pada source address untuk menjaga konsistensi percakapan.
Tip
Jangan campur UDP dan TCP pada entrypoint yang sama. Definisi entrypoint :53 (TCP) dan :53/udp adalah dua entitas terpisah — buat dua entrypoint bernama berbeda agar jelas.
Inti yang harus dibawa pulang:
HostSNI sebagai matcher; HostSNI(*) mencakup semua.HostSNI(*) dan bisa load-balancing datagram.Di episode 19 selanjutnya kita akan membahas file provider & dynamic configuration — menulis router, service, dan middleware dalam file YAML/TOML, directory watching dengan hot reload, struktur bagian http, tcp, udp, dan tls, serta praktik terbaik untuk layanan non-container. Gerbang kalian kini bisa mengatur apa pun tanpa Docker.