Friday, February 24, 2023

Install Kong API Gateway dengan Docker

Dalam arsitektur microservice, fakta bahwa setiap service akan meng-ekspose endpoint lebih detail. Hal ini, akan mempengaruhi cara client dan service-service lain yang mengakses service-service pada microservice. Semakin besar service-service pada microservice, akan dapat membebani service-service tersebut dengan jutaan request. Hal ini juga akan berpengaruh pada tantangan dalam penanganan security dan authorization, transformasi data, dan dispatching untuk request yang dinamik.

API Gateway

Untuk menjawab hal-hal tersebut, maka penggunaan API Gateway menjadi solusi. API Gateway adalah aplikasi/server yang bertindak sebagai single entry point pada sistem yang kita bangun. Dalam hal ini adalah aplikasi yang kita bangun dengan arsitektur microservices. Selain itu API Gateway juga bertindak sebagai middleware, sehingga sistem internal yang kita bangun dibelakangnya bisa kita enkapsulasi. API Gateway juga bisa kita beri tanggung jawab lain seperti logging, authentication, rate limiting, caching, transforming, dan load balancing.


Apa itu Kong?

Kong adalah open source API Gateway yang digunakan untuk orchestrator microservices yang menyediakan fleksibilitas sebagai abstraction layer. Kong ditulis dengan bahasa pemrograman Lua dan berjalan diatas Nginx. Ketika kita membangun aplikasi mobile, web, atau IOT misalnya, maka Kong yang akan bertindak sebagai API Gateway untuk berkomunikasi dengan service-service internal yang kita bangun. Sehingga fitur seperti logging, authentication, rate limiting, caching, transforming, dan load balancing, akan ditangani oleh Kong dan kita tidak perlu membuatnya sendiri untuk setiap service yang kita bangun.


Instalasi

Instalasi ini dilakukan dalam ekosistem sebagai berikut:

  1. Memakai virtualbox atau vmware workstation (pada saat ini ditulis menggunakan vmware)
  2. Memakai os Ubuntu 22.04
  3. Memakai docker
  4. Memakai kong dan konga
Langkah yang pertama instal Ubuntu 22.04 terlebih dahulu di vmware workstation dengan network bridged untuk bisa internet. Karena proses instalasi akan lebih banyak menggunakan internet untuk download. Jika sudah install Ubuntu, langkah pertama adalah instal docker dengan langkah sebagai berikut :

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

Setelah instalasi docker, maka kita akan instal juga web GUI untuk docker dengan menggunakan Portainer. Portainer ini berfungsi untuk melihat proses dalam docker kita. Caranya sebagai berikut
sudo docker volume create portainer_data
sudo docker run -d -p 9000:9000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

Untuk mengecek apakah sudah jalan portainer dengan mengakses alamat https://ip.address:9443. Nanti akan diminta untuk membuat user dan password.
Tahap akhir adalah instalasi kong dan web gui konga dengan langkah sebagai berikut
kong
install
sudo docker network create kong-net
sudo docker run -d --name kong-database --restart=always --network=kong-net -p 5432:5432 -e "POSTGRES_USER=kong" -e "POSTGRES_DB=kong" -e "POSTGRES_PASSWORD=kongpass" postgres:13
sudo docker run --rm --network=kong-net -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -e "KONG_PG_PASSWORD=kongpass" -e "KONG_PASSWORD=test" kong/kong-gateway:3.1.1.3 kong migrations bootstrap
sudo docker run -d --name kong-gateway \
  --network=kong-net \
  -e "KONG_DATABASE=postgres" \
  -e "KONG_PG_HOST=kong-database" \
  -e "KONG_PG_USER=kong" \
  -e "KONG_PG_PASSWORD=kongpass" \
  -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
  -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
  -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
  -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
  -e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \
  -e "KONG_ADMIN_GUI_URL=http://localhost:8002" \
  -e KONG_LICENSE_DATA \
  -p 8000:8000 \
  -p 8443:8443 \
  -p 8001:8001 \
  -p 8444:8444 \
  -p 8002:8002 \
  -p 8445:8445 \
  -p 8003:8003 \
  -p 8004:8004 \
  kong/kong-gateway:3.1.1.3
sudo curl -i -X GET --url http://localhost:8001/services
remove
docker kill kong-gateway
docker kill kong-database
docker container rm kong-gateway
docker container rm kong-database
docker network rm kong-net

konga
sudo docker volume create mongodb-konga
sudo docker run -d --name mongodb-konga -v mongodb-konga:/bitnami/mongodb -e MONGODB_ROOT_PASSWORD=rahasia --restart always --network kong-net bitnami/mongodb:5.0
sudo docker run -d -p 1337:1337 -e "TOKEN_SECRET=rahasia" -e "DB_ADAPTER=mongo" -e "DB_URI=mongodb://root:rahasia@mongodb-konga:27017/?authSource=admin" -e "NODE_ENV=production" --name konga --network kong-net pantsel/konga

Begitulah cara install Kong dengan docker. Untuk lebih jelas bisa dibaca dari sumber di bawah ini

No comments:

Post a Comment