Hướng dẫn cách cài đặt Kong API Gateway

Đây là bài nằm trong tập hợp những bài viết về Kong API Gateway. Tham khảo các bài biết khác theo đường dẫn dưới đây

Series bài viết về Kong API Gateway
Bài 1: Kong API Gateway là gì?
Bài 2: Hướng dẫn cách cài đặt Kong API Gateway (Bài viết hiện tại)
Bài 3: Cấu hình Kong quản lý các APIs từ các backend servers
Bài 4: Cấu hình bảo mật cho Kong API Gateway
Bài 5: Cấu hình các tính năng nâng cao khác của Kong

Ở bài này sẽ hướng dẫn cài đặt Kong API Gateway sử dụng Docker



Yêu cầu
Máy tính đã cài đặt Docker. Với máy tính hệ điều hành Windows, Tải và cài đặt Docker Desktop ở đây

Vì ngoài Kong ta có các thành phần khác đi kèm như
- Loại database sử dụng: Cassandra hoặc PostgreDB
- Công cụ quản lý cấu hình Kong trên giao diện : Konga
- Các công cụ giám sát hoạt động : Prometheus, Grafana

Vì vậy việc cài đặt này có thể được thực hiện lần lượt thông qua câu lệnh của Docker hoặc viết file Docker Compose.

Hiện tại Kong hỗ trợ cài đặt có dùng databases (DB-mode) hoặc không dùng database (DB-less-mode)

Cài đặt Kong có dùng databases (DB-mode)

Các bước thực hiện
Tạo một mạng mới trên Docker, Mọi thành phần cài sau đây sẽ chung mạng này.
docker network create kong-net

Cài đặt database cho Kong. Hiện tại Kong hỗ trợ 2 loại database PostgreDB và Cassandra
Trường hợp muốn sử dụng PostgreDB
docker run -d --name kong-database --network=kong-net -p 5432:5432 -e "POSTGRES_USER=kong" -e "POSTGRES_DB=kong" postgres:9.6

Trường hợp muốn dùng Cassandra
docker run -d --name kong-database --network=kong-net -p 9042:9042 cassandra:3

Kết nối kong với database và tiến hành migration các bảng dữ liệu cho Kong
docker run --rm --network=kong-net --link kong-database:kong-database -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" kong kong migrations bootstrap

Cài đặt Kong
docker run -d --name kong --network=kong-net --link kong-database:kong-database -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, 0.0.0.0:8444 ssl" -p 8000:8000 -p 8443:8443 -p 8001:8001 -p 8444:8444 kong

Cài đặt Konga để quản lý cấu hình Kong trên giao diện Web
docker run -d --name konga --network=kong-net -p 1337:1337 pantsel/konga

Kiểm tra việc cài đặt hoàn tất bằng cách vào các đường dẫn dưới đây
Kong Proxy : http://localhost:8000
Kong Admin : http://localhost:8001
Konga : http://localhost:1337
PostgreDB được expose ra host trên máy thông qua cổng 5432

Kết nối từ Konga tới Kong
Vào giao diện của Konga theo đường dẫn bên trên
Tạo mới một connection kết nối konga tới kong
Name : KongAdmin
Url : http://kong:8001

Để cài đặt Kong một cách đơn giản hơn bạn có dùng các file docker compose. Tham khảo và tải về file thư mục tôi đã tạo sẵn ở đây

Đi đến thư mục bạn vừa tải về
Chạy các thành phần trong docker compose file
docker-compose -f kong-with-db-mode.yaml up -d

Ngừng và xóa toàn bộ thành phần vừa chạy
docker-compose -f kong-with-db-mode.yaml down

Cài đặt Kong không dùng databases (DBless-Mode)

Cách này cấu hình hoàn toàn bằng tay các thuộc tính Routes, Services, Upstreams, Consumers, Plugins, ... thông qua file yaml mà không cần dùng đến database.
Tham khảo và tải về file thư mục tôi đã tạo sẵn ở đây.

Đi đến thư mục bạn vừa tải về
Chạy các thành phần trong docker compose file
docker-compose -f kong-with-dbless-mode.yaml up -d

Ngừng và xóa toàn bộ thành phần vừa chạy
docker-compose -f kong-with-dbless-mode.yaml down

Kiểm tra việc cài đặt hoàn tất bằng cách vào các đường dẫn dưới đây
Kong Proxy : http://localhost:8000
Kong Admin : http://localhost:8001

Một số đường dẫn của Admin API để xem nhanh trạng thái của Kong
http://localhost:8001

/status : Xem trạng thái của Node đang chạy Kong
/services
services?tags=example,admin
/tags
/services/{name or id}
/plugins
/plugins/{plugin id}
/plugins/enabled
/plugins/schema/{plugin name}
/routes
/routes/{route name or id}
/consumers
/consumers/{username or id}
/certificates
/snis
/upstreams
/upstreams/{name or id}
/upstreams/{name or id}/health/
/upstreams/{upstream host:port or id}/targets
/upstreams/{name or id}/targets/all/



Tham khảo thêm
https://docs.konghq.com/install/docker
https://hub.docker.com/_/kong


Tiếp tục cập nhật ...