Skip to main content

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

· 6 min read

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​

แชร์บทความ
☕

เนื้อหานี้มีประโยชน์ไหม? ช่วยสนับสนุนค่ากาแฟให้ผู้เขียนสักแก้ว

Buy Me a Coffee
Loading...