Kodeloka
  1. Kodeloka
  2. Kelas Kong API Gateway
  3. Materi

1 · Fondasi · Modul 2 dari 12

Instalasi Kong: DB-less vs Berbasis Database

Dua mode penyimpanan konfigurasi Kong, konsekuensi masing-masing, dan cara menjalankannya dengan Docker Compose.

⚖️ DB-less atau Database?

DB-lessPostgreSQL
Sumber konfigurasiBerkas YAMLBasis data
Ubah saat berjalanTidak (muat ulang berkas)Ya, lewat Admin API
Cocok untuk GitOpsSangatPerlu disiplin tambahan
Komponen yang dikelolaHanya KongKong + PostgreSQL
Beberapa simpulTiap simpul baca berkas sendiriBerbagi satu basis data
Dukungan pluginSebagian kecil tidak tersediaSemua
💡 Anjuran

Untuk proyek baru, mulailah dengan DB-less. Konfigurasi menjadi berkas yang bisa ditaruh di Git, ditinjau lewat pull request, dan diterapkan ulang secara identik ke lingkungan mana pun. Mode database baru diperlukan bila Anda butuh perubahan dinamis saat berjalan — misalnya konsumen API yang mendaftar sendiri lewat portal.

💻 DB-less dengan Docker Compose

compose.yaml
services:
  kong:
    image: kong:3.9
    environment:
      KONG_DATABASE: "off"
      KONG_DECLARATIVE_CONFIG: /kong/kong.yaml
      KONG_PROXY_LISTEN: "0.0.0.0:8000"
      # Admin API HANYA ke localhost dalam kontainer
      KONG_ADMIN_LISTEN: "127.0.0.1:8001"
      KONG_PROXY_ACCESS_LOG: /dev/stdout
      KONG_PROXY_ERROR_LOG: /dev/stderr
      KONG_LOG_LEVEL: notice
    volumes:
      - ./kong.yaml:/kong/kong.yaml:ro
    ports:
      - "8000:8000"      # proxy — boleh diekspos
      # port 8001 sengaja TIDAK dipublikasikan
    healthcheck:
      test: ["CMD", "kong", "health"]
      interval: 10s
      retries: 5
kong.yaml
_format_version: "3.0"

services:
  - name: layanan-pesanan
    url: http://layanan-pesanan:8080
    retries: 3
    connect_timeout: 3000
    read_timeout: 30000
    routes:
      - name: rute-pesanan
        paths: ["/pesanan"]
        strip_path: false

🔌 Port yang Perlu Diketahui

PortFungsiBoleh publik?
8000Proxy HTTP — lalu lintas aplikasiYa
8443Proxy HTTPSYa
8001Admin APITIDAK PERNAH
8444Admin API HTTPSHanya jaringan internal
8002Kong Manager (antarmuka web)Hanya internal
🚫 Admin API yang terbuka = kendali penuh atas gateway

Admin API tidak punya autentikasi bawaan pada Kong OSS. Siapa pun yang bisa menjangkau port 8001 dapat mengubah routing, menonaktifkan plugin autentikasi, mengarahkan trafik ke server penyerang, dan membaca seluruh kredensial konsumen. Ini kesalahan konfigurasi Kong yang paling sering dieksploitasi.

Aturan mutlak: ikat Admin API ke 127.0.0.1 atau jaringan internal, lindungi dengan firewall, dan jangan pernah mempublikasikan portnya. Bila butuh akses jarak jauh, lewati VPN atau bastion.

🔍 Verifikasi

# Dari dalam kontainer atau jaringan internal
curl -s http://localhost:8001/status | jq

# Menguji proxy
curl -i http://localhost:8000/pesanan/123

# Header yang ditambahkan Kong pada respons:
#   Via: kong/3.9
#   X-Kong-Upstream-Latency: 12
#   X-Kong-Proxy-Latency: 1
📌 Dua header latensi itu alat diagnosis utama

X-Kong-Upstream-Latency adalah waktu yang dihabiskan layanan Anda; X-Kong-Proxy-Latency adalah waktu yang dihabiskan Kong sendiri termasuk seluruh plugin. Bila permintaan lambat, kedua angka ini langsung memberi tahu siapa yang harus disalahkan — gateway atau layanan di belakangnya.