Episode ini membahas implementasi rate limiting dan request throttling, pola perlindungan terhadap klien yang abusive, serta logging dan alerting untuk mendeteksi anomali traffic sejak dini.

Traffic yang sah boleh penuh sesak; traffic jahat harus dicek sejak awal. Episode 14 membahas DDoS protection dan rate limiting di Multigress: membatasi kecepatan request, melindungi backend dari klien yang abusive, serta membangun logging dan alerting untuk mendeteksi anomali sebelum menjadi bencana.
Ingat: gateway adalah garis pertahanan pertama. Semakin awal kalian menolak traffic buruk, semakin sedikit beban yang sampai ke aplikasi dan database.
Rate limiting paling sederhana bersifat lokal per proxy instance. Konfigurasi via BackendTrafficPolicy:
apiVersion: gateway.multigress.io/v1
kind: BackendTrafficPolicy
metadata:
name: api-rate-limit
spec:
targetRefs:
- group: gateway.networking.k8s.io
kind: HTTPRoute
name: api-route
rateLimit:
type: Local
requests: 100
unit: SecondPolicy di atas membatasi 100 request per detik per instance proxy. Karena bersifat lokal, jumlah total bergantung pada jumlah replica — nilai ini dibagi rata antar pod.
Jika batasan harus akurat di level gateway secara keseluruhan, gunakan rate limit global. Multigress memakai layanan pembantu untuk menghitung token bersama:
helm upgrade multigress multigress/multigress \
--namespace multigress-system \
--set ratelimit.enabled=trueapiVersion: gateway.multigress.io/v1
kind: BackendTrafficPolicy
metadata:
name: api-rate-limit-global
spec:
targetRefs:
- group: gateway.networking.k8s.io
kind: HTTPRoute
name: api-route
rateLimit:
type: Global
rps: 500Dengan type: Global, batasan 500 request per detik dihitung lintas seluruh instance, sehingga tidak bisa di-akali dengan menambah replica.
Selain per detik, kalian bisa mengatur burst dan batasan per menit. Kombinasi rps dengan burst umum dipakai untuk aplikasi API:
spec:
rateLimit:
type: Global
rps: 100
burst: 20Nilai burst mengizinkan lonjakan singkat di atas rata-rata — misalnya saat flash sale — tanpa langsung menolak request.
Rate limit per IP klien sangat efektif melawan serangan sederhana. Aktifkan key berdasarkan alamat klien:
apiVersion: gateway.multigress.io/v1
kind: BackendTrafficPolicy
metadata:
name: client-rate-limit
spec:
targetRefs:
- group: gateway.networking.k8s.io
kind: HTTPRoute
name: api-route
rateLimit:
type: Global
rps: 10
key:
clientAddress: trueSetiap alamat IP dibatasi 10 request per detik. Ini memastikan satu klien tidak bisa memonopoli kapasitas untuk pengguna lain.
DDoS protection bekerja berlapis:
seq 1 200 | xargs -P 20 -I {} curl -s -o /dev/null -w "%{http_code}\n" \
http://localhost:8080/api | sort | uniq -cPerintah seq 1 200 | xargs -P 20 -I {} curl -s mengirim 200 request paralel. Setelah melewati batas, kalian akan melihat banyak kode 429 Too Many Requests — tanda bahwa rate limiter bekerja.
Rate limiter bekerja, tetapi kalian juga harus tahu kapan serangan terjadi. Pantau metric multigress_http_requests_total dan multigress_http_requests_rejected_total:
sum(rate(multigress_http_requests_rejected_total[5m])) by (reason)Query di atas menampilkan alasan penolakan per 5 menit: karena rate limit, karena policy, atau karena resource. Pola lonjakan pada satu reason adalah petunjuk awal jenis serangan.
Buat alert di Prometheus ketika tingkat penolakan mendadak tinggi:
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: multigress-rejections
namespace: monitoring
spec:
groups:
- name: multigress-traffic
rules:
- alert: MultigressRejectionSpike
expr: |
sum(rate(multigress_http_requests_rejected_total[5m])) by (route)
/ sum(rate(multigress_http_requests_total[5m])) by (route)
> 0.2
for: 5m
labels:
severity: warning
annotations:
summary: "Lonjakan penolakan pada route {{ $labels.route }}"Jika lebih dari 20 persen request ditolak selama 5 menit, alert MultigressRejectionSpike menyala. Alert ini terhubung ke Alertmanager untuk dikirim ke channel on-call — topik runbook di episode 21.
Tip
Rate limit tanpa alert adalah proteksi yang tidak terlihat. Pastikan setiap policy rate limiting dipasangkan dengan alert rejection yang relevan.
Episode 14 memberi kalian senjata melawan traffic buruk: rate limit lokal dan global, pembatasan per klien, strategi pertahanan berlapis, serta alerting yang memberitahu sejak dini saat anomali terjadi.
Inti yang harus dibawa pulang:
burst mengizinkan lonjakan singkat di atas rata-rata.Di episode 15 selanjutnya kita akan membahas performance tuning & scalability — concurrency gateway dan resource sizing, optimasi route evaluation dan koneksi backend, serta horizontal scaling dan autoscaling pod gateway. Konfigurasi rate limiting kalian akan diuji di bawah beban untuk pertama kalinya.