Triển khai và vận hành cổng API Kong với Cassandra và giao diện quản trị

Giới thiệu tổng quan

Trong các dự án trước đây, hệ thống API thường sử dụng Nginx tự xây dựng để làm reverse proxy. Tuy nhiên, giải pháp này thiếu tính linh hoạt và mở rộng. Để nâng cao hiệu quả quản lý và bảo mật, nhóm kỹ thuật đã quyết định chuyển sang sử dụng Kong – một nền tảng cổng API mã nguồn mở, mạnh mẽ và dễ tích hợp.

Nguyên lý hoạt động

Kong đóng vai trò là lớp trung gian giữa client và các dịch vụ backend. Thay vì truy cập trực tiếp vào từng service, client sẽ gọi đến Kong thông qua cổng 8000 (hoặc 8443 nếu dùng HTTPS). Kong lưu trữ cấu hình API, người dùng và plugin trong cơ sở dữ liệu (ở đây là Cassandra), từ đó thực hiện định tuyến, xác thực, kiểm soát lưu lượng và ghi log một cách tập trung.

Môi trường hệ thống

Hệ điều hành: CentOS 6.7
Kong: 0.9.9
Cassandra: 2.2.x
Node.js: 5.11.1
npm: 3.8.6
Python: 2.7.8
JDK: Phiên bản 1.7 trở lên
GCC: 4.8.2

Cài đặt Kong

Thêm repository và cài đặt gói RPM:

wget https://bintray.com/mashape/kong-rpm-el6-0.9.x/rpm -O kong-repo.repo
mv kong-repo.repo /etc/yum.repos.d/
yum install -y kong

Cấu hình và khởi động

Sau khi cài đặt, cần cấu hình kết nối tới cơ sở dữ liệu. Mặc dù có nhiều file cấu hình, file chính được Kong sử dụng nằm tại:

/usr/local/share/lua/5.1/kong/templates/kong_defaults.lua

Chỉnh sửa file này để thiết lập sử dụng Cassandra thay vì PostgreSQL mặc định:

database = cassandra
cassandra_contact_points = 127.0.0.1
cassandra_port = 9042
cassandra_keyspace = kong
cassandra_repl_factor = 1

Cài đặt và cấu hình Cassandra 2.2

Thêm repo DataStax:

vim /etc/yum.repos.d/datastax.repo
[datastax]
name = DataStax Repo for Apache Cassandra
baseurl = http://rpm.datastax.com/community
enabled = 1
gpgcheck = 0

Cài đặt gói:

yum install -y dsc22

Khởi động dịch vụ:

service cassandra start

Xử lý lỗi tương thích Python

CQLSH – công cụ dòng lệnh của Cassandra – yêu cầu Python 2.7, trong khi CentOS 6.7 mặc định chỉ có Python 2.6. Do đó, cần cài đặt song song Python 2.7:

yum install -y zlib-devel bzip2-devel openssl-devel
wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tar.xz
xz -d Python-2.7.8.tar.xz
tar -xvf Python-2.7.8.tar
cd Python-2.7.8
./configure --prefix=/usr/local
make && make altinstall

Liên kết và cập nhật yum:

mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/bin/python2.7 /usr/bin/python

Chỉnh sửa file /usr/bin/yum, thay dòng đầu thành:

#!/usr/bin/python2.6

Cài đặt pip và các thư viện cần thiết:

curl https://bootstrap.pypa.io/get-pip.py | python2.7
pip install cqlsh cassandra-driver

Khởi động Kong

Sau khi hoàn tất cấu hình:

kong start

Nếu không có lỗi, đầu ra sẽ hiển thị: Kong started.

Các cổng dịch vụ chính

  • 8000: Cổng proxy – nơi client gửi request đến API.
  • 8001: Cổng quản trị – REST API để cấu hình Kong.
  • 8443: Cổng proxy HTTPS.
  • 7946: Giao tiếp giữa các node Kong trong cụm.
  • 7373: Giao tiếp nội bộ cụm.

Thao tác với API qua dòng lệnh

Tạo mới một API backend:

curl -i -X POST \
  --url http://localhost:8001/apis/ \
  --data 'name=announcement-service' \
  --data 'upstream_url=http://192.168.1.100:5105/' \
  --data 'request_path=/notice/getNotice'

Cho phép truy cập:

curl -i -X GET http://localhost:8000/notice/getNotice

Thêm xác thực bằng API Key

Kích hoạt plugin xác thực cho API:

curl -i -X POST \
  --url http://localhost:8001/apis/announcement-service/plugins/ \
  --data 'name=key-auth'

Tạo người dùng:

curl -i -X POST \
  --url http://localhost:8001/consumers/ \
  --data 'username=mobile-app'

Cấp API key:

curl -i -X POST \
  --url http://localhost:8001/consumers/mobile-app/key-auth/ \
  --data 'key=app123secret456'

Gọi API với header xác thực:

curl -i -X GET \
  http://localhost:8000/notice/getNotice \
  -H "apikey: app123secret456"

Hoặc truyền qua query string:

http://localhost:8000/notice/getNotice?apikey=app123secret456

Thiết lập giới hạn tần suất (Rate Limiting)

Áp dụng giới hạn 3 lần/phút cho một API:

curl -i -X POST \
  --url http://localhost:8001/apis/announcement-service/plugins/ \
  --data 'name=rate-limiting' \
  --data 'config.minute=3'

Sau lần gọi thứ 3 trong vòng 60 giây, request tiếp theo sẽ nhận phản hồi:

{
  "message": "API rate limit exceeded"
}

Cài đặt giao diện quản trị Kong Dashboard

Do phiên bản Kong 0.9.9 tương thích tốt với Kong Dashboard 1.x, thực hiện cài đặt như sau:

npm install -g kong-dashboard@1
kong-dashboard start -p 8080 -a admin=securepass

Truy cập giao diện tại: http://<server_ip>:8080. Nhập địa chỉ quản trị Kong (ví dụ: http://localhost:8001) để kết nối.

Giám sát hệ thống

Kong cung cấp endpoint trạng thái:

GET /status

Thông tin trả về bao gồm số lượng kết nối, request, và số lượng đối tượng trong cơ sở dữ liệu như APIs, Consumers, Plugins…

Endpoint cụm:

GET /cluster

Hiển thị trạng thái hoạt động của các node trong cụm.

Hỗ trợ HTTPS

Đặt chứng chỉ SSL (từ Let's Encrypt hoặc nhà cung cấp như Alibaba Cloud) vào thư mục /etc/kong/ssl/. Đổi tên file thành kong-default.crtkong-default.key. Bật cấu hình trong file kong_defaults.lua:

ssl = on

Khởi động lại Kong. Client có thể truy cập API qua HTTPS tại cổng 8443.

Thẻ: Kong Cassandra API Gateway Rate Limiting Key Authentication

Đăng vào ngày 18 tháng 5 lúc 18:08