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.crt và kong-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.