Kong API Gateway được thiết kế hỗ trợ cho việc xây dựng hệ thống microservice. Bài viết này hướng dẫn các bạn cài đặt Kong qua docker, đồng thời cài đặt open source dashboard.

Để sử dụng Kong API  qua Docker, bạn cần cài đặt Docker. Kong cần kết nối vào database hoặc là Postgresql hoặc là Casandra. Bài này chỉ tập trung hướng dẫn kết nối vào Postgresql

Mô hình mạng của các container

Cài đặt Kong

Sau khi đã có Docker bật terminal lên rồi gõ lệnh như sau:

docker network create my-net

Lệnh này tạo một network bridge cho phép các container chúng ta sắp tạo nhìn thấy nhau và kết nối được với nhau qua tên host.

Tạo container Postgresql dùng baseimage là Alpine cho nhẹ

docker run -d --name kong-database \
                --network my-net \
                -p 5432:5432 \
                -e "POSTGRES_USER=kong" \
                -e "POSTGRES_DB=kong" \
                postgres:alpine

Chạy một container tạm thời (ephemeral, chạy xong rồi xoá). Container này sử dụng image kong:latest sau đó chạy lệnh kong migrations up để khởi tạo dữ liệu vào container kong-database vừa khởi tạo ở bước trên.

docker run --rm \
    --network my-net \
    -e "KONG_DATABASE=postgres" \
    -e "KONG_PG_HOST=kong-database" \
    kong:latest kong migrations up

Thực sử khởi động container kong, chạy ở chế độ detach mode, nối vào container kong-database, đặt giá trị cho một số biến môi trường -e, ánh xạ cổng 8000, 8443, 8001 và 8444 vào host

docker run -d --name kong \
    --network my-net \
    -e "KONG_DATABASE=postgres" \
    -e "KONG_PG_HOST=kong-database" \
    -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_LISTEN_SSL=0.0.0.0:8444" \
    -p 8000:8000 \
    -p 8443:8443 \
    -p 8001:8001 \
    -p 8444:8444 \
    kong:latest

Nối vào terminal của container kong

docker exec -it kong /bin/sh

Gõ lệnh với kong CLI

sh-4.2# kong health
nginx.......running

Kong is healthy at /usr/local/kong
sh-4.2# kong version
0.12.1

Mấy tay lập trình Kong API Gateway vui tính phết, tạo hẳn một lệnh kong roar (gầm) để in ra console hình Khỉ đột leo tháp. 

sh-4.2# kong roar
-- Kong, Monolith destroyer.
--
--     /\  ____
--     <> ( oo )
--     <>_| ^^ |_
--     <>   @    \
--    /~~\ . . _ |
--   /~~~~\    | |
--  /~~~~~~\/ _| |
--  |[][][]/ / [m]
--  |[][][[m]
--  |[][][]|
--  |[][][]|
--  |[][][]|
--  |[][][]|
--  |[][][]|
--  |[][][]|
--  |[][][]|
--  |[][][]|
--  |[|--|]|
--  |[|  |]|
--  ========
-- ==========
-- |[[    ]]|
-- ==========

Tạo API forward

Bước tiếp theo hãy thực hành theo hướng dẫn ở đây để thêm request routing

Tạo một API forward

curl -i -X POST \
  --url http://localhost:8001/apis/ \
  --data 'name=example-api' \
  --data 'hosts=example.com' \
  --data 'upstream_url=http://mockbin.org'

Gõ lệnh để kiểm tra với API forward vừa được tạo

curl -i -X GET \
  --url http://localhost:8000/ \
  --header 'Host: example.com'

Cài đặt dashboard

Cài Kong Dashboard open source https://github.com/PGBI/kong-dashboard

docker run --rm --network my-net -p 8080:8080 pgbi/kong-dashboard start --kong-url http://kong:8001

KongA cũng là một lựa chọn dashboard open source khác. Cài đặt cần có 2 bước:

docker run -d --name kongadb \
                --network my-net \
                -e "POSTGRES_USER=konga" \
                -e "POSTGRES_PASSWORD=k0ng@123-" \
                -e "POSTGRES_DB=konga_database" \
                postgres:alpine

docker run -d -p 1337:1337 \
             --name konga \
             --network my-net \
             -e "DB_ADAPTER=postgres" \
             -e "DB_HOST=kongadb" \
             -e "DB_USER=konga" \
             -e "DB_PASSWORD=k0ng@123-" \
             -e "DB_DATABASE=kongadb" \
             -e "NODE_ENV=development" \
             pantsel/konga