Membedah arsitektur KEDA HTTP Add-on: interceptor yang menahan request saat scale-to-zero, operator, HTTPScaledObject, hosts, timeout, hingga batasan di Kubernetes 1.30 dan penanganannya di produksi.

Di episode 11 kalian sudah menguasai fallback dan tuning lanjutan. Sekarang waktunya menyelam penuh ke add-on yang paling sering ditanyakan: KEDA HTTP Add-on. Di episode 9 kita sempat menyinggung HTTPScaledObject. Masalah intinya begini: workload HTTP biasanya tidak aman di-scale-to-zero, karena request yang datang saat nol pod langsung gagal. HTTP Add-on menjawabnya dengan menyisipkan lapisan interceptor di depan aplikasi — sekaligus membuka jalan untuk skema pending requests yang akurat. Sebelum menulis konfigurasi, penting memahami dulu siapa melakukan apa di dalam add-on ini.
Alur request dengan HTTP Add-on:
Client
| request masuk
v
Ingress -> Interceptor (buffer saat replika 0)
|
+---> Deployment (pod aplikasi) setelah skala naik
|
+---> KEDA operator + HPA (membaca pending requests)Tiga komponen yang bekerja sama:
Komponen-komponen ini diinstall sebagai chart Helm terpisah, bukan bagian dari instalasi KEDA utama. Setelah terinstall, pastikan CRD-nya dikenali lewat kubectl get httpscaledobjects -n keda.
helm repo add kedacore https://kedacore.github.io/charts
helm install keda-add-ons-http kedacore/keda-add-ons-http \
--namespace keda --create-namespace
kubectl get pods -n keda -l app.kubernetes.io/name=keda-add-ons-httpVerifikasi bahwa interceptor, operator, dan scaler add-on muncul dalam kondisi Running sebelum membuat HTTPScaledObject.
apiVersion: http.keda.sh/v1alpha1
kind: HTTPScaledObject
metadata:
name: web-app
namespace: production
spec:
hosts:
- api.contoh.com
scaleTargetRef:
deployment: web-app
service: web-app-svc
port: 8080
replicas:
min: 0
max: 10
activation: 20
scalingMetric:
targetPendingRequests: 100
cooldownPeriod: 300| Field | Fungsi |
|---|---|
hosts | Domain yang dialihkan ke interceptor |
scaleTargetRef.deployment | Deployment yang diskalakan |
scaleTargetRef.service | Service internal aplikasi |
replicas.min | Replika minimum; 0 memungkinkan scale-to-zero |
replicas.max | Replika maksimum |
replicas.activation | Ambang pending sebelum scale dari nol |
scalingMetric.targetPendingRequests | Target request pending per pod |
cooldownPeriod | Jeda sebelum scale-down |
Ketika request datang, interceptor menghitungnya sebagai pending. Jika melewati activation, add-on menaikkan pod. Pod baru dianggap siap setelah siap menerima request — baru pada saat itu request dibebaskan.
Selama tidak ada pod, interceptor tetap menerima koneksi dan menahan request di memori. Pahami bahwa interceptor adalah buffer, bukan storage: request yang ditahan terlalu lama akan dibatalkan oleh timeout. Untuk aplikasi dengan cold start lama, besarkan window scale-up dan kapasitas buffer.
Tip
Atur kapasitas buffer interceptor lebih besar dari lonjakan request terbesar. Kalau buffer penuh, request dijawab 503. Pastikan kapasitas cukup untuk menutup jendela cold start aplikasi kalian — misalnya 30 detik dari nol pod sampai pod ready.
Beberapa hal yang wajib kalian catat sebelum dipakai produksi:
tlsSecret pada scaleTargetRef.hosts, cocok untuk routing beberapa domain ke workload yang sama.keda_scaler_errors_total agar kegagalan add-on terdeteksi lebih awal.Warning
Interceptor bukan pengganti ingress controller — HTTP Add-on diarahkan lewat Ingress. Untuk produksi, jadwalkan interceptor terpisah dari pod aplikasi (node pool tersendiri bila perlu) agar buffer tetap tersedia saat aplikasi scale-to-zero, dan jangan pernah meletakkan state di interceptor.
targetPendingRequests.keda_scaler_errors_total untuk deteksi kegagalan lebih awal.Workload sudah bisa diskalakan dan diamankan secara fungsional. Tapi ada satu sisi yang belum kita sentuh serius: keamanan kredensial. Di episode 13 kita membahas Security & Credentials — best practice secret management, podIdentity IRSA, Azure AD Workload Identity, GCP IAM, integrasi HashiCorp Vault, rotasi, dan kebijakan least privilege untuk akses queue dan stream dari operator KEDA. Sampai jumpa!