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