Featured image of post Instalasi Kong Api Gateway & KONGA dengan Docker Compose

Instalasi Kong Api Gateway & KONGA dengan Docker Compose

FYI

  • Saya akan membuat serial untuk pembelajaran KONG pada blog ini. Jadi ini adalah blog pertama tentang KONG yang akan dibahas disini dan selanjutnya masih ada lagi.
  • Kenapa menggunakan kontainer? Karena KONG bersifat stateless yang bisa discale berapapun dan bisa dirubah kapanpun. Namun untuk database, karena kita hanya belajar maka jangan dipikirkan dulu.
  • Kita menggunakan KONG Community Edition

Serial

Intro

KONG API Gateway adalah Load Balancer dengan fitur-fitur yang kaya. Beda dengan load balancer lain, dengan KONG menggunakan fitur seperti Rate Limiting, Caching, Logging, Autentikasi dll menjadi lebih mudah karena KONG memaketkan fitur-fiturnya dengan format Plugin. Sorry saya bukannya mau ngepromote KONG, cuma yang saya rasakan seperti itu wkwk.

TL;DR

Kalian udah paham? Tapi kesini cuma mau cari docker-compose-nya aja? Langsung aja clone repo ini https://github.com/ledleledle/belajar-kong.

DB-Mode vs DB-Less

Kong memiliki 2 pilihan diantaranya, DB-Mode yaitu KONG dengan database, database yang dapat disupport ada 2 yaitu PostreSQL dan Cassandra. Dan DB-Less yaitu KONG tanpa database, yaitu kita bisa menggunakan file .yml untuk melakukan konfigurasi terhadap KONG. Namun kali ini saya akan menggunakan DB-Mode dengan database PostgreSQL.

Good Point

Seperti yang saya jelaskan pada intro, karena KONG memiliki pluginnya sendiri, kita dapat memanfaatkan fitur-fiturnya tanpa perlu membuat service dengan fitur yang sama satu per satu. Lebih gampangnya mari kita lihat gambar dibawah.

Tanpa KONG

Ya karena eranya microservices, mungkin kita akan memecah beberapa services, hanya saja ada fitur-fitur yang diperlukan ditiap servicenya misal pada gambar diatas yaitu Logging dan Security. Dengan KONG kita bisa membuatnya lebih simpel dengan mengimplementasi plugin pada level API Gateway seperti pada gambar dibawah.

Dengan KONG

Instalasi

Mungkin kita akan membahas instalasinya terlebih dahulu, berikut adalah hal-hal yang akan dipakai dalam praktek ini.

  • Docker & Docker Compose
  • KONG Community Edition
  • KONGA (Admin WEB UI, untuk mempermudah penggunaan KONG)

Siapkan sebuah folder dan file docker-compose.yml.

1
2
mkdir kong-api-gateway && cd kong-api-gateway
touch docker-compose.yml

Lalu edit file docker-compose.yml yang telah kita buat dengan konfigurasi dibawah. Mari kita bahas step-by-step untuk komponen-komponennya.

1
version: "3.0"

Format dokumen docker compose yang dipakai yaitu 3.0. Untuk lebih detailnya, bisa kalian lihat pada dokumentasi docker compose berikut.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
services:
  kong-database:
    image: postgres:9.6
    restart: always
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=12345
      - POSTGRES_DB=kong_db
    ports:
      - 5432:5432
    networks:
      - kong-net

Sediakan databasenya, disini saya menggunakan versi postgres:9.6 (tidak ada alasan khusus, kalian bisa menggunakan versi yang berbeda). Untuk membuat databasenya lebih persistent, saya juga membuat volume yang mengarah pada directory postgres-data. Set USER, PASSWORD dan DB pada environment. Dan join network ke kong-net untuk menghubungkan container satu dengan yang lain pada jaringan yang sama.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
  kong-migrate:
    image: kong:2.3.3
    restart: on-failure
    command: kong migrations bootstrap
    environment:
      - KONG_DATABASE=postgres
      - KONG_PG_HOST=kong-database
      - KONG_PG_DATABASE=kong_db
      - KONG_PG_USER=user
      - KONG_PG_PASSWORD=12345
    depends_on:
      - kong-database
    networks:
      - kong-net

Lalu ada perintah migrate, yaitu KONG akan melakukan migrasi database dan seluruh table agar KONG dapat berjalan dengan normal. Masukkan DATABASE, USER dan PASSWORD postgres yang telah didefinisikan sebelumnya pada environment kong-migrate. depends_on yaitu perintah untuk menunggu suatu container yang dispesifikasikan untuk berjalan terlebih dahulu, barulah container selanjutnya akan dijalankan.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  kong:
    image: kong:2.3.3
    restart: always
    environment:
      - KONG_LOG_LEVEL=debug
      - KONG_DATABASE=postgres
      - KONG_PG_HOST=kong-database
      - KONG_PG_DATABASE=kong_db
      - KONG_PG_USER=user
      - KONG_PG_PASSWORD=12345
      - KONG_PROXY_ACCESS_LOG=/dev/stdout
      - KONG_ADMIN_ACCESS_LOG=/dev/stdout
      - KONG_PROXY_ERROR_LOG=/dev/stderr
      - KONG_ADMIN_ERROR_LOG=/dev/stderr
      - KONG_ADMIN_LISTEN=0.0.0.0:8001
      - KONG_PROXY_LISTEN=0.0.0.0:8000
      - KONG_PROXY_LISTEN_SSL=0.0.0.0:8443
    ports:
      - 8000:8000
      - 8443:8443
      - 8001:8001
      - 8444:8444
    depends_on:
      - kong-migrate
      - kong-database
    networks:
      - kong-net

Setelah migrasi selesai, selanjutnya kita bisa menjalankan KONG. Seperti sebelumnya, masukkan DATABASE, USER dan PASSWORD postgres yang telah didefinisikan sebelumnya pada environment kong. Sebenarnya dari sini kita sudah bisa menggunakan KONG melalui HTTP Request seperti cURL atau Postman. Namun untuk mempermudah penggunaan KONG, kita akan memasang WEB UI yang dibuat oleh komunitas yaitu KONGA.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
  konga-prepare:
    image: pantsel/konga:0.14.9
    command: "-c prepare -a postgres -u postgresql://user:12345@kong-database:5432/konga_db"
    networks:
      - kong-net
    restart: on-failure
    links:
      - kong-database
    depends_on:
      - kong-database

Untuk KONGA kita juga membutuhkan database, jadi kita juga akan melakukan migrasi database untuk KONGA, kita bisa menggunakan database yang sama yang kita gunakan untuk KONG. Untuk mengisikan USERNAME, PASSWORD dan DATABASE PostgreSQL, pada KONGA kita menggunakan format URL seperti postgresql://user_anda:password_anda@host_atau_ip_anda:5432/db_anda.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
  konga:
    image: pantsel/konga:0.14.9
    restart: on-failure
    networks:
      - kong-net
    environment:
      - DB_ADAPTER=postgres
      - DB_HOST=kong-database
      - DB_USER=user
      - DB_PASSWORD=12345
      - TOKEN_SECRET=km1GUr4RkcQD7DewhJPNXrCuZwcKmqjb
      - DB_DATABASE=konga_db
      - NODE_ENV=production
    depends_on:
      - kong-database
    ports:
      - "1337:1337"

Setelah migrasi KONGA database selesai, barulah kita bisa melakukan deployment KONGA. Konfigurasinya overall hampir sama, jadi tidak usah saya jelaskan. Untuk TOKEN_SECRET sebenarnya bisa diisi bebas, tapi disini saya mengikuti dokumentasinya saja.

1
2
3
networks:
  kong-net:
    driver: bridge

Ini adalah network yang dipanggil disetiap service, Network bersifat bridge.

Jadi, konfigurasi penuhnya akan terlihat seperti berikut.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
version: "3.0"
services:
  kong-database:
    image: postgres:9.6
    restart: always
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=12345
      - POSTGRES_DB=kong_db
    ports:
      - 5432:5432
    networks:
      - kong-net

  kong-migrate:
    image: kong:2.3.3
    restart: on-failure
    command: kong migrations bootstrap
    environment:
      - KONG_DATABASE=postgres
      - KONG_PG_HOST=kong-database
      - KONG_PG_DATABASE=kong_db
      - KONG_PG_USER=user
      - KONG_PG_PASSWORD=12345
    depends_on:
      - kong-database
    networks:
      - kong-net

  kong:
    image: kong:2.3.3
    restart: always
    environment:
      - KONG_LOG_LEVEL=debug
      - KONG_DATABASE=postgres
      - KONG_PG_HOST=kong-database
      - KONG_PG_DATABASE=kong_db
      - KONG_PG_USER=user
      - KONG_PG_PASSWORD=12345
      - KONG_PROXY_ACCESS_LOG=/dev/stdout
      - KONG_ADMIN_ACCESS_LOG=/dev/stdout
      - KONG_PROXY_ERROR_LOG=/dev/stderr
      - KONG_ADMIN_ERROR_LOG=/dev/stderr
      - KONG_ADMIN_LISTEN=0.0.0.0:8001
      - KONG_PROXY_LISTEN=0.0.0.0:8000
      - KONG_PROXY_LISTEN_SSL=0.0.0.0:8443
    ports:
      - 8000:8000
      - 8443:8443
      - 8001:8001
      - 8444:8444
    depends_on:
      - kong-migrate
      - kong-database
    networks:
      - kong-net

  konga-prepare:
    image: pantsel/konga:0.14.9
    command: "-c prepare -a postgres -u postgresql://user:12345@kong-database:5432/konga_db"
    networks:
      - kong-net
    restart: on-failure
    links:
      - kong-database
    depends_on:
      - kong-database

  konga:
    image: pantsel/konga:0.14.9
    restart: on-failure
    networks:
      - kong-net
    environment:
      - DB_ADAPTER=postgres
      - DB_HOST=kong-database
      - DB_USER=user
      - DB_PASSWORD=12345
      - TOKEN_SECRET=km1GUr4RkcQD7DewhJPNXrCuZwcKmqjb
      - DB_DATABASE=konga_db
      - NODE_ENV=production
    depends_on:
      - kong-database
    ports:
      - "1337:1337"

  project:
    build: ./project
    restart: always
    networks: 
      - kong-net
    ports:
      - "3000:3000"

networks:
  kong-net:
    driver: bridge

Simpan dan jalankan perintah, lalu tunggu beberapa menit untuk menunggu database, table dan container disiapkan.

1
docker-compose up -d

Setelah semuanya selesai, kita bisa akses localhost:1337. Untuk pertama kali kalian akan dimintai untuk mendaftar, ini adalah salah satu fitur KONGA yaitu kita bisa memberikan Role Based Access Control (RBAC). Dan setelah login, kita akan mendapatkan tampilan seperti berikut.

KONGA Wellcome Page

Menambah Connection

Connection disini yaitu Admin API KONG, Disini kita bisa menyambungkan beberapa KONG Nodes yang ingin kita konfigurasi. Cara menambahkannya simple. Cukup masukkan URL KONG yang sudah kalian deploy, lalu simpan.

Add Connection KONGA

Serial

References

Penutup

Okay… Sudah dulu, untuk fitur-fitur yang lain dan cara penggunaan KONGA. Kita akan bahas pada artikel berikutnya (sorry ngantuk). Oke sekian dulu, semoga artikel ini membantu, jika ada pertanyaan silakan isi pada kolom komentar. Terimakasih.

comments powered by Disqus
Writen with ❤️ by Leon
Built with Hugo
Theme Stack designed by Jimmy