Thứ Năm, 18 tháng 9, 2025

Cài đặt Kong làm API Gateway cho hệ thống Microservices

Mục lục

  • Tại sao lại là Kong?
  • Giới thiệu
  • Ưu điểm của Kong
  • Khả năng mở rộng dễ dàng
  • Hiệu năng khủng
  • Nhiều plugins
  • Miễn phí
  • Cài đặt
  • Kong on Docker
  • Cài đặt Kong
  • Tổng kết

Ở bài viết API Gateway là gì? Tại sao một hệ thống microservices lại cần API Gateway? mình đã nói tới khái niệm về API Gateway, nó là gì, nó có ăn được không và tại sao hệ thống microservices lại cần tới nó. Trong bài viết tiếp theo này, mình sẽ giới thiệu về Kong API Gateway và chạy Kong API Gateway trên Docker.

Tại sao lại là Kong?

Giới thiệu

Kong là một open-source API Gateway và platform, Kong được viết bằng ngôn ngữ Lua và xây dựng trên NGINX. Kong hỗ trợ nhiều plugins giúp cho việc triển khai microservices dễ dàng hơn như authentication, rate-limiting, transformation, logging,... Mình có thể tự viết plugins cho Kong bằng Lua tùy vào nhu cầu sử dụng.

Ưu điểm của Kong

Khả năng mở rộng dễ dàng

Kong server là stateless, chúng ta có thể thêm hoặc xóa bao nhiêu nodes tùy ý, miễn là chúng trỏ vào 1 datastores. Kong Datastore có thể chọn 1 trong 2 loại DB

  • Postgres: khi muốn xây dựng một hệ thống Api Gateway tập chung, đơn giản, hiệu năng tốt. Mặc định thì Kong sẽ sử dụng Postgres làm datastore.
  • Cassandra: Dùng cassandra khi muốn xây dựng một hệ thống api gateway phân tán, tính khả dụng cao, chịu tải tốt, dễ dàng scale. Cassandra sẽ chạy tốt nhất trên các server có cấu hình mạnh.

Hiệu năng khủng

Trong các bài test performance thì Kong là một trong những API Gateway có hiệu năng cao nhất, nó có thể xử lý được một lượng rất lớn requests / s

Nhiều plugins

Kong hỗ trợ rất nhiều plugins tùy vào chức năng như authen, logging, traffic control, analytics & monitoring...giúp quản lý cũng như theo dõi các microservices được hiệu quả và dễ dàng hơn thay vì chỉ đảm nhận mỗi việc routing requests.

Miễn phí

Kong có 2 phiên bản là Community và Enterprise. Bản Enterprise thì hỗ trợ nhiều thứ hơn như Kong Admin GUI, hỗ trợ trực tuyến, sử dụng các Plugins Enterprises và tất nhiên là nó phải mất tiền, nhiều tiền là đằng khác. Tuy nhiên với nhu cầu sử dụng bình thường thì bản miễn phí của nó là Community là đủ dùng rồi, và ta có thể sử dụng Konga để quản lý và config Kong bằng GUI thay cho việc gửi request tới Kong Admin (Kong Commnity không có GUI, chỉ bản Enterprise mới có)

Cài đặt

Kong hỗ trợ rất nhiều nền tảng để có thể cài đặt lên như Ubuntu, Centos, Red Hat, Kubernetes, Docker...cụ thể hơn, bạn có thể vào đây để tải phiên bản phù hợp với mình. 

Kong on Docker

Việc cài đặt Kong có hướng dẫn rất đầy đủ và chi tiết trên trang chủ, chúng ta sẽ phải cài đặt Kong ServerKong DatastoreKonga để quản lý Kong, Database cho Konga, khá là nhiều thứ, để dễ dàng hơn cho mọi người thì mình sẽ cung cấp "Kong ăn liền" trên Docker bằng việc sử dụng docker-compose. Tất cả những gì bạn cần là một máy tính có cài Docker , docker-compose và mạng internet.

docker-compose.yml

version: "3"

networks:
 kong-net:
  driver: bridge

services:

  #######################################
  # Postgres: The database used by Kong
  #######################################
  kong-database:
    image: postgres:9.6
    restart: always
    networks:
      - kong-net
    environment:
      POSTGRES_USER: kong
      POSTGRES_DB: kong
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "kong"]
      interval: 5s
      timeout: 5s
      retries: 5

  #######################################
  # Kong database migration
  #######################################
  kong-migration:
    image: kong:latest
    command: "kong migrations bootstrap"
    networks:
      - kong-net
    restart: on-failure
    environment:
      KONG_PG_HOST: kong-database
    links:
      - kong-database
    depends_on:
      - kong-database

  #######################################
  # Kong: The API Gateway
  #######################################
  kong:
    image: kong:latest
    restart: always
    networks:
      - kong-net
    environment:
      KONG_PG_HOST: kong-database
      KONG_DATABASE: postgres 
      KONG_PROXY_LISTEN: 0.0.0.0:8000
      KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443
      KONG_ADMIN_LISTEN: 0.0.0.0:8001
    depends_on:
      - kong-migration
      - kong-database
    healthcheck:
      test: ["CMD", "curl", "-f", "http://kong:8001"]
      interval: 5s
      timeout: 2s
      retries: 15
    ports:
      - "8001:8001"
      - "8000:8000"

  #######################################
  # Konga database prepare
  #######################################
  konga-prepare:
    image: pantsel/konga:next
    command: "-c prepare -a postgres -u postgresql://kong@kong-database:5432/konga_db"
    networks:
      - kong-net
    restart: on-failure
    links:
      - kong-database
    depends_on:
      - kong-database

  #######################################
  # Konga: Kong GUI
  #######################################
  konga:
    image: pantsel/konga:next
    restart: always
    networks:
        - kong-net
    environment:
      DB_ADAPTER: postgres
      DB_HOST: kong-database
      DB_USER: kong
      TOKEN_SECRET: km1GUr4RkcQD7DewhJPNXrCuZwcKmqjb
      DB_DATABASE: konga_db
      NODE_ENV: production
    depends_on:
      - kong-database
    ports:
      - "1337:1337"

Giải thích các services được sử dụng ở trong docker-compose file và cách tùy chỉnh

  • kong-database

    • Overview: Database được dùng làm datastore cho Kong.
    • Details: Service này sử dụng Postgre bản 9.6 từ docker hub, được sử dụng làm datastore cho Kong Server.
      • Environment variables:
        • POSTGRES_USER: database user name (default: kong).
        • POSTGRES_DB: database name (default: kong).
        • POSTGRES_PASSWORD: database user's password (default: kong).
  • kong

    • Overview: Kong Server.
    • Details: Service này sử dụng Kong Comunity Edittion image mới nhất, chính chủ của Kong từ docker hub (phiên bản sử dụng alpine linux) https://hub.docker.com/_/kong
    • Environment variables:
      • KONG_DATABASE: postgres /cassandra - config database sử dụng bởi Kong, ở đây chúng ta dùng postgres.
      • KONG_PG_HOST: Postgres database address.
      • KONG_PG_PASSWORD: Postgres database user's password.
      • KONG_PROXY_LISTEN: Địa chỉ mà ta sẽ gửi http requests tới Kong để xử lý và routing (default: 0.0.0.0:8000, trên môi trường production sử dụng 0.0.0.0:80).
      • KONG_PROXY_LISTEN_SSL: Địa chỉ mà ta sẽ gửi https requests tới Kong để xử lý và routing (default: 0.0.0.0:8443, trên môi trường production sử dụng 0.0.0.0:443
      • KONG_ADMIN_LISTEN: Địa chỉ mà ta sẽ sử dụng để quản lý Kong thông qua việc gửi request tới hoặc sử dụng Konga. -konga
      • Overview: Konga GUI.
      • Detail: Service này sử dụng konga image từ dockerhub để cung cấp giao diện quản lý, monitoring cho Kong, thay vì việc bắn request bằng tay tới Kong Admin.
  • kong-migration

    • Overview: Migrate database để Kong có thể sử dụng -konga-prepare
    • Overview: Prepare db để sử dụng cho Konga

Cài đặt Kong

Clone file docker-compose trên

git clone https://github.com/huyhoc1310/kong-docker-ce.git

Change directory tới thư mục chứa docker-compose file

cd kong-docker-ce

Chạy docker-compose

docker-compose up --build

Chúng ta sẽ đợi 1 lát để cho các services được chạy xong, kiểm tra thử xem Kong đã được chạy thành công bằng cách gửi thử request tới Kong Admin

curl -i http://localhost:8001

Tiếp theo ta vào Konga (port 1337) để bắt đầu sử dụng Kong bằng cách sử dụng trình duyệt và vào địa chỉ http://localhost:1337. Konga sẽ yêu cầu chúng ta tạo tài khoản Admin để sử dụng 

Sau khi tạo xong tài khoản và đăng nhập, việc đầu tiên chúng ta cần làm sẽ là kết nối Konga với Kong Server thông qua Kong Admin bằng cách điền vào form, với Kong admin url là địa chỉ của Kong admin, trong trường hợp này chúng ta sẽ phải sử dụng địa chỉ mạng nội bộ của máy đang sử dụng thay vì localhost vì Konga đang được chạy ở trong Docker container. Để kiểm tra địa chỉ của máy, ta có thể sử dụng lệnh ifconfig (với Unix, đã cài nettools). Máy của mình là 192.168.5.14 

Sau khi create connection, chúng ta đã có thể quản lý Kong server từ Konga.

Tổng kết

Trong bài viết lần này, mình đã giới thiệu một API Gateway rất thông dụng và mạnh mẽ hiện nay là Kong API Gateway và cách cài đặt nó chạy trên Docker. Bài viết tiếp theo mình sẽ hướng dẫn chi tiết cách config và sử dụng Kong để quản lý hệ thống microservices một cách hiệu quả.

=============================
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
cơ sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c/21c/23c/23ai, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, docker, k8s, micro service, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty Sửa bài viết

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master