- รีเวิร์สพร็อกซีสำหรับทำ tunneling ไปยังเครือข่ายภายนอก
- รองรับทราฟฟิกระดับ production และออกแบบมาให้โฮสต์ได้ง่าย โดยเฉพาะบน Kubernetes
- สามารถใช้เปิดเผยบริการในเครือข่ายลูกค้า, บริการแบบ BYOC (Bring Your Own Cloud) หรือเชื่อมต่อกับอุปกรณ์ IoT ได้
- สามารถโฮสต์เป็นคลัสเตอร์ของโหนดเพื่อความทนทานต่อความขัดข้อง, การขยายระบบ, และการ deploy แบบไม่หยุดให้บริการ
Piko ทำงานอย่างไร
- บริการ upstream จะเชื่อมต่อกับ Piko เพื่อลงทะเบียน endpoint
- Piko จะ route คำขอของ endpoint ไปยังบริการ upstream ที่ลงทะเบียนไว้ผ่านการเชื่อมต่อแบบ outbound-only
- นั่นหมายความว่าสามารถเปิดเผยบริการได้โดยไม่ต้องเปิด public port
- คำขอ HTTP(S) ขาเข้าจะระบุ ID ของ endpoint เป้าหมายโดยใช้ Host header หรือ
x-pico-endpoint header
- หากมีหลายบริการ upstream ลงทะเบียน endpoint เดียวกัน Piko จะทำ load balancing คำขอของ endpoint นั้นระหว่าง upstream ที่ลงทะเบียนไว้
เป้าหมายการออกแบบของ Piko
รองรับทราฟฟิก production
- Piko ถูกออกแบบมาเพื่อรองรับทราฟฟิก production ไม่ใช่แค่เครื่องมือสำหรับทดสอบและพัฒนา
- สามารถใช้ Piko เพื่อเข้าถึงเครือข่ายลูกค้า, สร้างโซลูชัน BYOC และเข้าถึงอุปกรณ์ IoT ได้
- เพื่อรองรับสิ่งนี้ Piko สามารถรันเป็นคลัสเตอร์ของโหนดเพื่อความทนทานต่อความขัดข้อง, การขยายแนวนอน, และการ deploy แบบไม่หยุดให้บริการ
- นอกจากนี้ยังมีเครื่องมือด้าน observability สำหรับการมอนิเตอร์และดีบัก
โฮสต์ได้ง่าย
- Piko ถูกออกแบบมาให้โฮสต์บน Kubernetes ได้ง่าย
- คลัสเตอร์ Piko สามารถโฮสต์เป็น Kubernetes StatefulSet หลัง HTTP load balancer หรือ Kubernetes Gateway ได้
- ทั้งการเชื่อมต่อของบริการ upstream และคำขอจาก proxy client สามารถถูก load balancing ไปยังทุกโหนดในคลัสเตอร์ได้ และ Piko จะจัดการ route คำขอไปยัง upstream ที่ถูกต้อง
ความปลอดภัย
- บริการ upstream จะเชื่อมต่อกับ Piko ผ่านการเชื่อมต่อแบบ outbound-only
- Piko จะ route คำขอทั้งหมดไปยัง upstream ผ่านการเชื่อมต่อนั้น
- ดังนั้น upstream จึงไม่จำเป็นต้องเปิดพอร์ตเพื่อรับคำขอ
- Piko รองรับการยืนยันตัวตนของบริการ upstream ก่อนลงทะเบียน endpoint
- เนื่องจาก Piko สามารถโฮสต์เองได้ จึงสามารถโฮสต์ไว้ในเครือข่ายเดียวกับ proxy client เพื่อไม่ต้องรับคำขอจากเครือข่ายภายนอก
- ตัวอย่างเช่น สามารถอนุญาตให้บริการ upstream ที่ยืนยันตัวตนแล้วลงทะเบียนผ่าน TLS จากอินเทอร์เน็ต จากนั้นให้เส้นทางภายในเฉพาะกับ proxy client ที่อยู่ในเครือข่ายเดียวกับ Piko เท่านั้น
6 ความคิดเห็น
หมายความว่าสามารถเปิดให้บริการเข้าถึงได้โดยไม่ต้องเปิดพอร์ตสาธารณะ
ยกตัวอย่างเช่น สมมติว่านักศึกษาปริญญาตรีสาขาวิทยาการคอมพิวเตอร์คนหนึ่งชื่อ A กำลังทำโปรเจกต์อยู่
A พัฒนาอย่างขะมักเขม้น และเมื่อใกล้ถึงวันนำเสนอ ก็อยากสาธิตบริการนี้แล้ว
แต่ A เพิ่งจะเขียนเซิร์ฟเวอร์เป็นเท่านั้น ยังไม่รู้วิธีเปิดใช้งานทั้งเซิร์ฟเวอร์หรืออินสแตนซ์ใด ๆ
ยิ่งไปกว่านั้น เพราะอาศัยอยู่ในหอพัก จึงไม่สามารถเปิดเผยบริการผ่าน port forwarding ได้
ในจังหวะนี้เอง tunneling จึงเข้ามามีบทบาท
หากพิมพ์
ngork http 8080บนโน้ตบุ๊กที่อยู่ในหอพัก ระบบจะออก URL แบบสุ่มมาให้ และเมื่อผู้ใช้เข้าถึง URL นี้ตอนสาธิตในห้องเรียน คำขอ HTTP จะถูกส่งต่อผ่านเซิร์ฟเวอร์ ngrok - ไคลเอนต์ ngrok - ไปยังโปรแกรมเซิร์ฟเวอร์ของ A ทำให้สามารถเปิดเผยบริการได้โดยไม่ต้องทำ port forwarding แยกต่างหากhttps://github.com/andydunstall/piko/pull/20
ดูเหมือนว่าชื่อโปรเจกต์จะถูกเปลี่ยนจาก Pico เป็น Piko แล้ว น่าจะเปลี่ยนเพราะมีเอดิเตอร์ที่ใช้ชื่อ pico อยู่แล้ว จึงเกิดปัญหาชื่อชนกัน
พอเห็นคำตอบที่บอกว่าไม่รู้จัก pico editor ก็รู้สึกได้ถึงความเป็นลุงของตัวเองเลยครับ สมัยก่อน nano ยังไม่มา มี pico มาก่อนนี่นา ฮือฮือ
เมื่อวานผมหาข้อมูล สรุปไว้ แล้วโพสต์ไปแล้วครับ.. แต่แป๊บเดียวก็เปลี่ยนไปแล้ว เศร้า เลยแก้ไขไว้เรียบร้อยแล้วครับ