Kong เป็นแพลตฟอร์ม API Gateway ที่ได้รับความนิยมอย่างมาก ซึ่งใช้สำหรับจัดการ, ควบคุม, และรักษาความปลอดภัยในการเชื่อมต่อระหว่างบริการ (services) ต่างๆ ภายในระบบ โดย Kong สามารถติดตั้งและใช้งานได้ผ่าน Docker ซึ่งทำให้สะดวกในการตั้งค่าและใช้งานในสภาพแวดล้อมต่างๆ จัดการ API ในระบบที่มีการเชื่อมต่อหลายๆ บริการหรือ Microservices
คุณสมบัติหลักของ Kong
API Gateway: Kong ทำหน้าที่เป็นเกตเวย์สำหรับการควบคุมและจัดการการเรียกใช้งาน API โดยสามารถทำการบังคับใช้นโยบาย, การรับรองความถูกต้อง, การควบคุมการเข้าถึง และการตรวจสอบการใช้งาน API
Load Balancing: Kong สามารถกระจายการโหลดของ API ไปยังหลายเซิร์ฟเวอร์หรือเซอร์วิสได้ เพื่อปรับปรุงประสิทธิภาพและความยืดหยุ่นของระบบ
Rate Limiting: คุณสามารถกำหนดขีดจำกัดการใช้งาน API ได้ (rate limiting) เพื่อป้องกันการใช้งานมากเกินไปหรือลดการโจมตีจาก DDOS
Plugins: Kong มีปลั๊กอินมากมายที่สามารถเพิ่มคุณสมบัติต่างๆ ได้ เช่น การตรวจสอบ JWT, การบีบอัดข้อมูล, การทำ cache, และอื่นๆ ซึ่งสามารถปรับแต่งได้ตามความต้องการ
ขั้นตอนการติดตั้ง Kong
1.สร้างไฟล์ docker-compose.yml
version: '3.7'
services:
kong-database:
image: postgres:13
container_name: kong-database
environment:
POSTGRES_USER: kong
POSTGRES_DB: kong
POSTGRES_PASSWORD: kong
networks:
- kong-net
volumes:
- kong-data:/var/lib/postgresql/data
kong-migration:
image: kong:latest
container_name: kong-migration
command: "kong migrations bootstrap"
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_PASSWORD: kong
networks:
- kong-net
depends_on:
- kong-database
kong:
image: kong:latest
container_name: kong
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_PASSWORD: kong
KONG_PROXY_ACCESS_LOG: /dev/stdout
KONG_ADMIN_ACCESS_LOG: /dev/stdout
KONG_PROXY_ERROR_LOG: /dev/stderr
KONG_ADMIN_ERROR_LOG: /dev/stderr
KONG_ADMIN_LISTEN: 0.0.0.0:8001, 0.0.0.0:8444 ssl
KONG_PROXY_LISTEN: 0.0.0.0:80, 0.0.0.0:443 ssl
networks:
- kong-net
ports:
- "8000:8000"
- "8443:8443"
- "8001:8001"
- "8444:8444"
# - "80:80"
# - "443:443"
depends_on:
- kong-migration
kong-manager:
image: kong:latest
container_name: kong-manager
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_PASSWORD: kong
KONG_ADMIN_GUI_ACCESS_LOG: /dev/stdout
KONG_ADMIN_GUI_ERROR_LOG: /dev/stderr
KONG_ADMIN_LISTEN: 0.0.0.0:8001, 0.0.0.0:8444 ssl
KONG_ADMIN_GUI_LISTEN: 0.0.0.0:8002, 0.0.0.0:8445 ssl
networks:
- kong-net
ports:
- "8002:8002"
- "8445:8445"
depends_on:
- kong
volumes:
kong-data:
esdata:
networks:
kong-net:
external: true
2. ติดตั้ง kong ผ่าน composer ด้วยคำสั่ง docker-compose up -d
3. เข้าไปที่ URL : http://localhost:8002
4. ส่วนที่เราต้องจัดการหลักๆ จะมี Gateway Service กับ Route ถ้าอธิบายแบบง่ายคือ
Gateway Service คือ Endpoint ที่จะให้ API ของเราชี้ไปที่ไหน
Routes คือ API Endpoint ที่ใช้เรียก
ตัวอย่างเช่น ต้องการให้ API ชื่อ test.lib.kmutnb.ac.th/api ลิงก์ไปที่ IP 192.168.4.1 จะทำตามขั้นตอนดังนี้
4.1 สร้าง Gateway Service -> New Gateway Service เพิ่มรายละเอียดที่สำคัญได้กี่ ชื่อ Service Host ให้ใส่เป็น 192.168.4.1 Path ถ้ามี path ย่อยลงไปในระบบของ API ของเรา และ port ที่กำหนดไว้
4.2 เมื่อสร้าง Service เสร็จแล้วจะมีรายการที่เราสร้างขึ้นให้กดเข้าไปที่รายการ Service ที่ต้องการ เพื่อทำการสร้าง Route
สำหรับการสร้าง Route จะประกอบไปด้วยส่วนการตั้งชื่อ กับ ส่วนของการตั้งค่าเรียก API ส่วนที่จะต้องกำหนดให้ชัดเจนคือ - Protocols แนะนำเป็นทั้ง http และ https
- Paths ตามตัวอย่างเราต้องใส่ /api
- Methods สามารถกำหนดได้ว่าต้องการให้เรียก API ได้ในรูปแบบใดบ้าง ในที่นี้จะทำให้เรียกได้ทั้ง GET และ POST
4.3 หลังจากที่ตั้งค่าเสร็จแล้วให้กดปุ่ม save จากนั้นก็ทำการทดสอบ API ได้จากโปรแกรมต่างๆ เช่น postman
นี่เป็นเพียงการใช้งานเบื้องต้น ยังมี ส่วนของ plugin ที่สามารถติดได้เพิ่มเติมอีกมากมาย เช่น ACL ที่ใช้ควบคุม Consumers รวมไปถึง basic-auth ที่ใช้กำหนด username password ในการเข้าถึง api