Episode ini membahas Traefik CRDs: IngressRoute untuk HTTP, IngressRouteTCP dan IngressRouteUDP, Middleware CRD, TLSOption dan TLSStore, syntax routes dan services, referensi lintas namespace, serta fitur lanjutan seperti weighted services, traffic splitting, dan mirroring di Kubernetes.

Resource Ingress standar cukup untuk routing dasar, tapi terbatas: tidak ada middleware, tidak ada weighted service, tidak ada dukungan TCP/UDP. Episode 21 memperkenalkan Traefik CRDs — Custom Resource Definitions yang membuat Traefik di Kubernetes setara dengan semua kemampuan yang sudah kalian pelajari di episode-episode sebelumnya.
Dengan IngressRoute, konfigurasi Kubernetes Traefik menjadi nyaris identik dengan file provider: routes, services, middlewares, dan tls ditulis langsung dalam resource YAML. Ini adalah cara yang paling disarankan memakai Traefik di Kubernetes modern.
Semua resource ini didaftarkan saat install Traefik via Helm — deployment Traefik di Kubernetes biasanya sudah mengaktifkan CRDs secara otomatis. Cek dengan kubectl get crd dan filter kata traefik untuk memastikan.
IngressRoute menggantikan Ingress standar dengan struktur yang lebih eksplisit:
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: web
namespace: default
spec:
entryPoints:
- web
routes:
- kind: Rule
match: Host(`app.example.com`) && PathPrefix(`/api`)
middlewares:
- name: api-rate
namespace: default
services:
- name: api-service
port: 8080entryPoints: daftar entrypoint yang dilayani.match: rule Traefik lengkap — sama sintaksnya dengan episode 6.middlewares: daftar middleware CRD beserta namespace-nya.services: backend tujuan dengan name dan port.Middleware didefinisikan sebagai resource terpisah, lalu dirujuk oleh IngressRoute:
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: api-rate
namespace: default
spec:
rateLimit:
average: 100
burst: 50Referensi lintas namespace memakai sintaks nama@namespace atau field namespace eksplisit. Traefik v3 juga memperkenalkan namespaces pada middleware: middleware yang dirujuk dengan name@namespacename bisa di-share lintas namespace jika diizinkan. Ini membuat tim bisa berbagi middleware keamanan tanpa duplikasi.
TLSOption yang tadi ditulis di file provider kini menjadi resource sendiri:
apiVersion: traefik.io/v1alpha1
kind: TLSOption
metadata:
name: hardened
namespace: default
spec:
minVersion: VersionTLS12
cipherSuites:
- TLS_AES_128_GCM_SHA256
sniStrict: trueIngressRoute merujuknya di bagian tls.options:
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: Host(`app.example.com`)
services:
- name: app-service
port: 443
tls:
options:
name: hardened
certResolver: letsencryptKemampuan canary yang dulu kita bangun dengan weighted service di file provider kini tersedia langsung di IngressRoute:
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: app-canary
namespace: default
spec:
entryPoints:
- web
routes:
- kind: Rule
match: Host(`app.example.com`)
services:
- name: app-stable
port: 80
weight: 9
- name: app-v2
port: 80
weight: 1Bobot 9:1 mengirim 90 persen trafik ke versi stabil dan 10 persen ke versi baru. Kenaikan bobot versi baru — misalnya jadi 5:5 — dilakukan dengan kubectl apply tanpa restart Traefik. Teknik yang sama bisa dipakai untuk mirroring dan sticky sessions dengan menambahkan sticky dan mirror di resource.
Tip
Untuk canary yang lebih halus, kombinasikan weighted services dengan Header rule: bagian kecil pengguna yang punya header khusus diarahkan ke versi baru, sisanya ke versi lama. Ini memberi kontrol presisi sebelum menaikkan bobot global.
Inti yang harus dibawa pulang:
nama@namespace.Di episode 22 selanjutnya kita akan membahas Kubernetes Service Mesh dengan Traefik Mesh — service mesh ringan berbasis SMI, fitur traffic splitting, circuit breaking, retry, dan observability, serta pola canary, A/B testing, dan blue-green deployment. Kalian akan melihat Traefik melampaui peran ingress controller.