Skip to main content

Kong API Gateway ทำความรู้จัก และการติดตั้ง (ตอนที่ 1)

Kongvut Sangkla

Intro

สวัสดีครับ บทความนี้พามารู้จักกับ Kong API Gateway โดยจะเน้นพาทำแต่จะไม่บรรยายอะไรมาก ซึ่งจะแบ่งออกเป็น 2 ตอนดังนี้

ทำความรู้จัก

Screen Shot Kong

Kong API Gateway คือ Open-source Software โดยเป็นเครื่องมือที่ทำหน้าที่เป็น API Gateway ที่เป็นตัวกลางในการจัดการ Microservices ต่าง ๆ มาไว้ที่เดียว เพื่อควบคุมและจัดการให้ง่ายขึ้น ไม่ว่าจะเป็นเรื่องความปลอดภัย สิทธิ์การเข้าถึง การ Monitoring การกำหนด Rate Limiting เป็นต้น

info

Kong API Gateway จะมี 2 รุ่น ดังนี้

  • Kong EE (Enterprise Edition) รุ่นเสียเงิน (มีทดลองใช้งาน) มีหน้า Admin (GUI) ให้ใช้งาน
  • Kong CE (Community Edition) รุ่นฟรี ไม่มีหน้า Admin (GUI) ให้ใช้งาน

Imgur

รูปภาพ แสดงการเชื่อมต่อกับ Clients กับ API Gateway และเป็นเครื่องมือช่วยสำหรับจัดการกับ Microservices

Imgur

รูปภาพ แสดงการเชื่อมต่อกับ Clients กับ Microservices แบบตรง ๆ

จะเห็นว่าแบบที่มี API Gateway เข้ามาช่วยจัดการจะทุก Microservices จะมารวมที่ API Gateway จากนั้น Clients ต่างจะเข้าถึง Microservices ผ่าน API Gateway ดังนั้นข้อดีที่สำคัญมีดังนี้

  • ง่ายต่อการบริหารจัดการ
  • ความสะดวกในการพัฒนา Clients เพราะ API Gateway ไม่ได้เปลี่ยนบ่อย ทำให้สามารถเปลี่ยน Endpoints (URL) ของ Microservices จาก Resources ได้ตลอดโดยไม่กระทบกับ Clients ที่ยังใช้งานอยู่ เพราะ Endpoints ของ API Gateway ไม่ได้เปลี่ยนแปลง

การติดตั้ง

ต่อไปจะเป็นการติดตั้ง Kong CE (Community Edition) โดยใช้ Docker เป็นตัวช่วยในการติดตั้ง สิ่งที่ต้องเตรียมและต้องมีมีดังนี้

  • Docker
  • Public IP (หากต้องการให้ Public)
  1. สร้าง Docker Network
docker network create kong-net
  1. สร้าง Database และเชื่อมต่อเข้ากับ Docker Network
docker volume create pg_data
docker run -d --name kong-database \
--network=kong-net \
--restart unless-stopped \
-v pg_data:/var/lib/postgresql/data \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kong" \
postgres:9.6
  1. สั่ง Migration ฐานข้อมูล (ต้องมี Database แล้วเท่านั้น)
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong:latest kong migrations bootstrap
  1. สั่งให้ Kong เชื่อมโยงกับ Database พร้อมกับ Start Kong
docker run -d --name kong \
--restart unless-stopped \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latest
info

สามารถใช้งาน Kong ผ่าน http://localhost:8001

คำอธิบายการใช้งาน Port ต่าง ๆ ของ Kong

  • 8000 สำหรับการเข้าถึง API Gateway ผ่าน HTTP Request
  • 8443 สำหรับการเข้าถึง API Gateway ผ่าน HTTPS Request
  • 8001 สำหรับการตั้งค่า Kong ผ่าน HTTP Request
  • 8444 สำหรับการตั้งค่า Kong ผ่าน HTTPS Request

เสร็จแล้วแต่...

เสร็จแล้วครับ แต่ Kong จะไม่มี GUI ให้เข้าใช้งานนะครับ การใช้งาน Kong ต้องใช้งานผ่านการสั่ง CURL และอาจจะไม่ค่อยสะดวกเท่าไหร่ดังนั้นจึงมีนักพัฒนาหลายคนช่วยทำ Web UI เพื่อจะช่วยใช้งาน Kong ให้ง่ายขึ้น เช่น Konga

Screen Shot Konga

วิธีติดตั้ง Konga Web UI เพื่อจะช่วยใช้งาน Kong

  1. สร้างฐานข้อมูลและ Migration ฐานข้อมูลสำหรับ Konga
docker run --rm \
--network=kong-net \
pantsel/konga -c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga
  1. Start Konga
docker run -d -p 1337:1337 \
--restart unless-stopped \
--network kong-net \
-e "TOKEN_SECRET=2E55D9A3EFB8542DC145C19EA3D5E" \
-e "DB_ADAPTER=postgres" \
-e "DB_URI=postgresql://kong:kong@kong-database:5432/konga" \
-e "NODE_ENV=production" \
--name konga \
pantsel/konga
note

อย่าลืมกำหนดค่าต่าง ๆ ดังนี้ให้ถูกต้อง

--network kong-net \ // optional

-e "TOKEN_SECRET=2E55D9A3EFB8542DC145C19EA3D5E" \ // some random string

-e "DB_ADAPTER=postgres" \ // 'mongo','postgres','sqlserver' or 'mysql'

-e "DB_URI=full-connection-uri" \

-e "NODE_ENV=production" \ // or 'development' | defaults to 'development'

ทดสอบเข้าใช้งาน

note

สามารถเข้าใช้งานได้ผ่าน http://localhost:1337

กำหนด User Passsword และ Email ของ Admin

Imgur

Login

Imgur

กำหนดชื่อ API Gateway และ URL ที่ใช้จัดการ Kong

  • ตรงช่อง Kong Admin URL ใส่เป็นเลข IP ก็ได้
  • ในบทความจะใส่เป็นชื่อของ Service ของ Docker (เพราะอยู่ใน Docker Network เดียวกันจึง Resolve หากันเจอ)

Imgur

เมื่อตั้งค่า Konga สำเร็จ

Imgur

หากต้องการลบออก

$ docker rm -f kong kong-database konga

$ docker network rm kong-net

$ docker volume rm pg_data

วิธี Upgrade

มีผู้ขอวิธีการ Upgrade มาที่จริงวิธีการไม่ได้ยาก หลักการคือ

# 1. Stop และ Remove Container นั้นออก
$ docker rm -f kong

# 2. สั่ง Run Container ใหม่ และ Pull Image ตัว Latest ใหม่ล่าสุดลงมา
# เพิ่มคำสั่ง pull image ตัวล่าสุดสุด (--pull=always)
$ docker run -d --name kong \
--pull=always \
--restart unless-stopped \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latest

# 3. Clean Image เดิมที่ไม่ได้ใช้ออก เพื่อเรียกคืนพื้นที่บนดิส (ทั้งหมด)
$ docker image prune -a

สรุป

ขั้นตอนการติดตั้งง่ายมาก ๆ หากติดตั้งแล้วติดขัดปัญหาอย่างไรสามารถ Comments ไว้ข้างล่างบทความได้นะครับ หากผมสามรถตอบได้จะพยายามเข้ามาตอบให้ทุกคนครับ 😊

มาถึงขั้นตอนนี้ก็เสร็จเรียบร้อยทั้งหมดแล้วครับ สำหรับบทความตอนที่ 2 จะเป็นการใช้งาน Konga เพื่อใช้งาน Kong โดยจะพยายามเขียนให้กระชับ เพื่อให้เข้าใจง่ายและเห็นภาพเร็วที่สุด ขอบคุณที่อ่านจนจบครับ 😊

*อัปเดต Kong API Gateway การใช้งาน (ตอนที่ 2)

References

Loading...