เริ่มต้น Kong api gateway 101 กันเถอะ

Chaiwat Tungtongsoontorn
Tri Petch Digital
Published in
3 min readJun 14, 2022

Kong api gateway 101

Kong’s diagrams
Figure a

มีหลายเครื่องมือที่คุณกำลังสนใจทำ Proxy server เพื่อทำการแยกเจ้า Microservices ของคุณอยู่ใช่ไหม แน่นอน หลายคนคงหน่ายกับการมาจัดการ config microservices ต่างๆ

คุณอาจจะต้องจัดการเรื่องทั้งติดตั้งส่วนอื่นๆ อีกหลังจากขึ้น microservices ไปแล้วอาทิเช่น

- ตั้งค่าเน็ตเวิร์คต่างๆ
- ทำการ port mapping ไปยังหลังบ้าน
- จัดการเรื่อง DNS
- และอื่นๆ

จะดีกว่าไหมถ้าเราสามารถติดตั้งครั้งเดียวเฉพาะ Proxy แล้วรันหลาย microservice ภายใต้เน็ตเวิร์คภายในของเรา ใช่แล้วเรากำลังพูดถึง Kong api gateway ซึ่งเป็นเครื่องมือที่จัดการสิ่งเหล่านี้

ก่อนอื่นเลยเราต้องทำความเข้าใจก่อนว่าเราทำ Kong proxy ไว้ทำไมกันนะ!?

  • สามารถควบคุม request traffic ได้โดยผ่านเครื่องมือเดียว
  • Microservices ต่างๆ มีการจัดการอย่างเหมาะสม
  • Microservices ต่างๆ แยกออกจากกัน
  • สามารถทำ Code versioning ในกรณีที่รัน Kong แบบ DB-less mode
  • ทุกๆ upstream service จะมองเห็นภายใต้โดเมนเดียวกัน แยกกันด้วย route
  • Kong เป็น API Gateway ที่ได้รับความนิยม และมี Community ที่ยัง contribute กันอยู่ ทำให้ไม่ต้องกังวลเวลาเกิดปัญหาต่างๆ

เอาล่ะ เรามาเล่นกันเถอะ!

figure b

จากรูปจะเห็นได้ว่า Kong เปรียบเสมือนหน้าด้านที่คอยรับ Request และ ส่งต่อไปยัง Service หลังบ้าน โดย Kong จัดการได้นั้นเนื่องจาก Kong ทำงานด้วยภาษา Lua บน Nginx โดยมี openResty เป็นตัวจัดการ kong application

ก่อนอื่นครับ เราต้องดึง repository นี้มาก่อน แล้วก็ทำการรันที่ Localhost ได้เลยใน repo นี้จะ มี nginx ที่เป็นตัวแทน Upstream service หรือเป็น microsiveA และมี microsiveฺB ให้เราได้เห็นภาพว่าภายใต้ Docker network จะมีแค่ Kong port 8000 และ 8001 ที่ต่อกับ Internet เท่านั้น

คำถามต่อมาคือ “เราจะให้เจ้า MicroserviceA และ MicroserviceB ของเรามองเห็นจาก Internet ได้ยังไงกันนะ?”

คำตอบคือ เราก็ต้องสร้าง Service กับ route ขึ้นมาก่อน โดย

- Service คือ URL ที่บอกให้ Kong รู้ว่ามี Backend มาเชื่อมต่อ- Route คือ เงื่อนไขต่างๆ ที่ request วิ่งเข้ามาผ่าน Kong แล้วรู้ว่าจะจัดการกับ Request นั้นๆ แล้วส่งไปให้ใคร

เพื่อทำให้ kong รู้จัก backend microservice หลังบ้านของเรา

  • ต้องเพิ่ม service
  • จากนั้นก็ใส่ route เข้าไป

ใส่ Service ผ่าน Curl ไปยัง Kong admin port ซึ่งก็คือ 8001 ดังตัวอย่าง

curl -i -X POST http://<kong-admin-host>:8001/services \
--data name=your_service_name \
--data url='http://yourdomain.com'

เพิ่ม Route ด้วยคำสั่ง Curl

curl -i -X POST http://<admin-hostname>:8001/services/webA/routes \
--data 'paths[]=/weba' \
--data name=web-a-route

อีกวิธีเราสามารถใส่ Service และ Route ผ่าน Yaml file ได้กรณีที่ Kong รันเป็นแบบ DB-Less mode

repository นี้มีตัวจัดการ GUI ด้วยนะ เพียงแค่เข้าไปที่http://localhost:1337 . เราก็จะพบกับ Konga, The GUI for kong admin api.

  • ขั้นตอนที่ 1) ลงทะเบียน konga GUI
  • ขั้นตอนที่ 2) ลงชื่อเข้าใจ konga GUI
  • ขั้นตอนที่ 3) ติดต่อเจ้า Kong Server ของเรา ดังรูป

จากรูปจะเห็นได้ว่าเรา เชื่อมต่อ Kong Admin URl ด้วย http://kong:8001 แทนที่จะเป็น http://localhost:8001 เพราะว่า domain name ต้องเป็นไปตาม docker-compose.yml config ที่ปรากฏ เพื่อที่จะทำให้ instances ภายใต้เน็ตเวิร์คของ Docker คุยกันรู้เรื่อง

จากนั้นก็กดปุ่ม ACTIVE ดังรูป

  • ขั้นตอนที่ 4) เพิ่ม service
    - ไปที่แถบ SERVICES.
    - กดปุ่ม + ADD NEW SERVICE
    - ใส่ข้อมูลต่างๆ ดังรูป และกดปุ่ม SUBMIT SERVICE
  • ขั้นตอนที่ 5) เพิ่ม route ด้วยข้อมูลดังรูป และกดปุ่ม SUBMIT ROUTE

เยี่ยมยอด ตอนนี้เราสามารถเชื่อมต่อ microserviceA ของเราได้ทาง http://localhost:8000/weba แล้ว หน้าตาก็จะประมาณนี้

ติดต่อเรา หรืออ่าน Blog เราเพิ่มเติมได้ที่
- https://www.tripetchgroup.com/en/tripetchitsolutions

ได้รับความสนับสนุนจาก
- K’Somsak: https://medium.com/@soemsak_l

--

--