📌 Perbedaan Mendasar di Kubernetes
Di luar Kubernetes, Anda mengonfigurasi Kong lewat Admin API atau berkas decK. Di dalam Kubernetes, objek Kubernetes menjadi sumber kebenarannya — controller membaca Gateway, HTTPRoute, dan CRD Kong, lalu menerjemahkannya menjadi konfigurasi Kong secara otomatis.
Mengubah konfigurasi lewat Admin API pada Kong yang dikelola KIC adalah pekerjaan sia-sia: controller akan mengembalikannya ke keadaan yang tertulis di objek Kubernetes pada rekonsiliasi berikutnya. Pilih satu jalur dan konsisten.
📦 Instalasi
helm repo add kong https://charts.konghq.com
helm repo update
helm install kong kong/ingress \
-n kong --create-namespace \
--set gateway.ingressController.gatewayDiscovery.enabled=true
kubectl get pods -n kong
kubectl get gatewayclass
🚪 Gateway API — Cara yang Dianjurkan
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: gerbang-kong
namespace: kong
spec:
gatewayClassName: kong
listeners:
- name: https
protocol: HTTPS
port: 443
hostname: "*.contoh.com"
tls:
certificateRefs:
- name: tls-wildcard
allowedRoutes:
namespaces:
from: All # route dari namespace mana pun boleh menempel
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rute-pesanan
namespace: produksi
spec:
parentRefs:
- name: gerbang-kong
namespace: kong
hostnames: ["api.contoh.com"]
rules:
- matches:
- path:
type: PathPrefix
value: /pesanan
backendRefs:
- name: layanan-pesanan
port: 80
weight: 90
- name: layanan-pesanan-baru
port: 80
weight: 10 # canary 10% — bagian dari spesifikasi
Dengan Ingress, kemampuan seperti pembagian trafik dan pencocokan header hanya tersedia lewat anotasi khusus vendor, sehingga konfigurasi terkunci pada satu controller. Gateway API menjadikannya field resmi, sekaligus memisahkan peran: tim platform mengelola Gateway beserta sertifikatnya, tim aplikasi mengelola HTTPRoute masing-masing di namespace sendiri.
🔌 Plugin lewat CRD
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: batas-laju
namespace: produksi
config:
minute: 100
policy: redis
redis:
host: redis.produksi.svc.cluster.local
port: 6379
plugin: rate-limiting
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: rute-pesanan
namespace: produksi
annotations:
konghq.com/plugins: batas-laju # ← dilampirkan di sini
spec:
...
Anotasi konghq.com/plugins dapat dipasang pada HTTPRoute, Ingress, Service, atau KongConsumer — cakupannya mengikuti resource tempat ia dilampirkan.
👥 Consumer & Kredensial sebagai Objek
apiVersion: v1
kind: Secret
metadata:
name: kredensial-mitra-a
namespace: produksi
labels:
konghq.com/credential: key-auth
stringData:
key: "rahasia-dari-external-secrets"
---
apiVersion: configuration.konghq.com/v1
kind: KongConsumer
metadata:
name: mitra-a
namespace: produksi
annotations:
kubernetes.io/ingress.class: kong
username: mitra-a
credentials:
- kredensial-mitra-a
Kredensial disimpan sebagai Secret Kubernetes, yang berarti hanya di-encode base64 dan tidak boleh masuk Git dalam bentuk mentah. External Secrets Operator dapat mengambilnya dari Vault atau AWS Secrets Manager, sehingga yang tersimpan di Git hanyalah petunjuk lokasinya.
⚠️ CRD yang Sudah Usang
Banyak tutorial masih mengajarkan CRD KongIngress untuk mengatur perilaku upstream, protokol, dan penulisan ulang path. CRD ini sudah usang di KIC 3.x. Penggantinya lebih spesifik dan lebih jelas: KongUpstreamPolicy untuk pengaturan load balancing dan health check, serta field resmi Gateway API untuk routing dan penulisan ulang path.
apiVersion: configuration.konghq.com/v1beta1
kind: KongUpstreamPolicy
metadata:
name: kebijakan-pesanan
namespace: produksi
spec:
algorithm: least-connections
healthchecks:
active:
type: http
httpPath: /healthz
healthy:
interval: 5
successes: 2
unhealthy:
interval: 5
httpFailures: 3
🔍 Menelusuri Masalah
kubectl get gateway,httproute -A
kubectl describe httproute rute-pesanan -n produksi
kubectl logs -n kong deploy/kong-controller -c ingress-controller --tail=100
kubectl get kongplugin,kongconsumer -A
# Melihat konfigurasi Kong yang DIHASILKAN controller
kubectl exec -n kong deploy/kong-gateway -- \
curl -s http://localhost:8001/config | jq
Bagian status pada objek HTTPRoute adalah tempat pertama yang harus dilihat: ia menyatakan apakah route berhasil menempel ke Gateway, dan bila tidak, alasannya.