Belajar Traefik - Plugins & Extensibility
Episode 29 of 31

Belajar Traefik - Plugins & Extensibility

Episode ini membahas ekosistem plugin: marketplace Traefik Hub dan community plugins, plugin populer seperti GeoIP blocking dan ModSecurity WAF, arsitektur pengembangan plugin Go dengan plugin.toml, serta instalasi dengan localPlugins dan versioning plugin.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

Middleware bawaan Traefik sudah lengkap, tapi dunia nyata selalu punya kebutuhan tambahan. Episode 29 membahas plugins: middleware custom yang memperluas Traefik tanpa mengubah inti. Dari plugin komunitas yang siap pakai sampai pengembangan plugin sendiri dalam Go.

Arsitektur plugin Traefik sederhana: setiap plugin adalah sebuah Go module yang mengimplementasikan interface middleware. Traefik v3 memuat plugin lewat Yaegi interpreter — sehingga plugin bisa diaktifkan tanpa rebuild image, meskipun dikompilasi ke Go. Mari kita jelajahi pasar plugin, cara install, dan bagaimana menulisnya.

Ekosistem Plugin

Marketplace dan Komunitas

Plugin didistribusikan lewat Traefik Hub (sebelumnya Traefik Pilot) — katalog resmi yang bisa dicari dan diinstall langsung. Selain itu, banyak plugin open-source beredar di GitHub dengan pola instalasi yang sama.

Beberapa kategori plugin populer:

  • GeoIP blocking: membatasi akses berdasarkan negara asal IP.
  • Request/response logging: log detail tambahan di luar access log bawaan.
  • Custom authentication: integrasi dengan mekanisme auth khusus.
  • Advanced rate limiting: kebijakan berbasis key yang lebih kompleks.
  • ModSecurity WAF: lapisan Web Application Firewall dengan rule OWASP.

Menginstall Plugin

LocalPlugins di Static Config

Plugin diinstall lewat konfigurasi static. Cara paling sederhana adalah experimental.localPlugins, yang memuat kode dari direktori lokal:

Menginstall plugin lokal
experimental:
  localPlugins:
    geo-block:
      moduleName: github.com/yourorg/geo-block
Compose: mount kode plugin
services:
  traefik:
    image: traefik:v3
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./config/plugins:/plugins-local/src/github.com/yourorg/geo-block

Plugin dari Traefik Hub diinstall dengan pola berbeda — via token Hub dan konfigurasi experimental.plugins dengan versi spesifik. Setelah terdaftar, plugin dipakai seperti middleware biasa:

Memakai plugin sebagai middleware
http:
  middlewares:
    geo-filter:
      plugin:
        geo-block:
          allowedCountries:
            - "ID"
            - "SG"
  routers:
    app:
      rule: "Host(`app.example.com`)"
      entrypoints:
        - web
      service: app-svc
      middlewares:
        - geo-filter

Arsitektur Plugin

Go Module dan HTTP Handler

Sebuah plugin adalah Go module dengan struktur:

Struktur plugin
geo-block/
├── go.mod
├── plugin.toml
├── geo_block.go
└── geo_block_test.go

Inti plugin mengimplementasikan interface http.Handler — menerima request, melakukan logika, lalu memanggil handler berikutnya:

Struktur inti plugin Go
package geoblock
 
import "net/http"
 
type Config struct {
    AllowedCountries []string `json:"allowedCountries"`
}
 
func New(ctx context.Context, next http.Handler, config Config, name string) (http.Handler, error) {
    return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
        if !isAllowed(req) {
            rw.WriteHeader(http.StatusForbidden)
            return
        }
        next.ServeHTTP(rw, req)
    }), nil
}

Fungsi New menerima konfigurasi yang didefinisikan user, mengembalikan handler yang membungkus next. Selama context dan net/http tersedia, plugin bisa berbuat apa pun yang dilakukan middleware.

plugin.toml

File plugin.toml adalah metadata yang membuat Traefik mengenali plugin:

plugin.toml
[plugin]
description = "Geo blocking by country"
version = "0.1.0"
[go]
version = "1.21"
[go.mod]
module = "github.com/yourorg/geo-block"
  • description: deskripsi singkat.
  • version: versi plugin.
  • go.mod.module: nama module Go — harus cocok dengan moduleName di konfigurasi Traefik.

Versioning dan Testing

Praktik Pengembangan

  • Versioning: tag release dengan semantic versioning; plugin Traefik Hub menyematkan versi saat install.
  • Testing: tulis unit test untuk logika middleware sebelum dipakai di produksi.
  • Staging dulu: uji plugin di environment staging sebelum production — plugin buggy bisa menjatuhkan seluruh pipeline routing.
  • Pin versi: jangan memakai latest; tentukan versi eksplisit agar perilaku bisa direproduksi.

Warning

Plugin berjalan dalam proses Traefik — plugin yang panic bisa mengganggu pemrosesan request. Batasi jumlah plugin, jaga kode tetap sederhana, dan lakukan review keamanan terhadap plugin dari sumber yang tidak dikenal.

Penutup

Inti yang harus dibawa pulang:

  • Plugin memperluas Traefik sebagai middleware custom.
  • Katalog plugin utama adalah Traefik Hub; banyak plugin komunitas di GitHub.
  • Instalasi lokal via experimental.localPlugins dan mount direktori.
  • Plugin adalah Go module dengan plugin.toml dan interface http.Handler.
  • Versioning, testing, dan staging wajib sebelum production.
  • Batasi jumlah plugin; review kode plugin pihak ketiga.

Di episode 30 selanjutnya — episode terakhir series ini — kita akan menyatukan semua pelajaran: production checklist & best practices, perbandingan Traefik v2 versus v3, pitfall umum, dan daftar periksa lengkap untuk deployment Traefik yang siap produksi.