การสร้าง Root HTTPProxy บน Contour
หลังจากที่เราทำการ Install Contour เป็น Kubernetes Ingress ไปใน Part ที่แล้ว
ใน Part นี้เราจะมาดูวิธีการสร้าง root HTTPProxy เพื่อแก้ปัญหา Config Ingress ชนกันบน Cluster เวลาหลายๆทีมมีการใช้ FQDN เดียวกัน. รวมถึงเพื่อช่วย Platform/ Operator Team ในการ Manage Ingress / Proxy จากฝั่ง Developer
Root HTTPProxy & Inclusion Concepts
ก่อนที่เราจะทำการใช้ Root HTTPProxy เราต้องมีการ Config namespace
ที่จะใช้เป็น Root ก่อน โดยสามารถกำหนดโดยใช้ flag --root-namespaces
หรือกำหนด contour.rootNamespaces
ตอน Install ด้วย Helm.
หลังจากนั้นเราจะสามารถ Include HTTPProxy resource จาก namespace
อื่นที่ Developer หรือ Team ต่างๆมีการใช้งาน โดยจะใช้ Concept ของ Inclusion เป็นคล้ายๆกับ Selector
ใน k8s ในการเลือก HTTPProxy จากฝั่ง Developer มาใช้
ตัวอย่างการสร้าง Root HTTPProxy
ในตัวอย่างมีการกำหนด rootNamespaces
เป็น httpproxy-root
มี FQDN เป็น foo-basic.bar.com
สามารถเข้าถึง HTTPProxy auth
ที่อยู่ใน namespace authentication
ผ่าน foo-basic.bar.com/auth
และ HTTPProxy reserve
ใน namespace reservations
ผ่าน foo-basic.bar.com/reservations
ตัวอย่าง HTTPProxy ในแต่ละ Namespace
HTTPProxy auth
จะถูก deploy ใน namespace authentication
โดยจะทำการ route connection จาก foo-basic.bar.com/auth
ไปยัง Service authentication-home
ที่ port 80
รวมถึงเราสามารถกำหนด Conditions แยกในแต่ละ HTTPProxy ที่ Includes ไว้ใน Root-Proxy ได้ โดยใช้ prefix
เช่นเดียวกับ HTTPProxy ปกติ. Connection จาก foo-basic.bar.com/auth/cancel
จะถูก Route ไปที่ Service authentication-cancellation
ที่ port 80
สามารถเช็ค HTTPProxy ว่าตัวไหนเป็น Root ได้ที่ field
virtualhost
การใช้ Enable CORS
ถ้าเราต้องมีการใช้งาน CORS หรือ Cross-origin resource sharing การมี Root HTTPProxy ก็สามารถช่วย Apply Config ไปทุก route รวมถึง include ที่อยู่ใต้ Root HTTPProxy
ตัวอย่างการ Enable CORS
สามารถเปิดการใช้งาน CORS ได้ใน corsPolicy
ซึ่งในตัวอย่างเป็นการเปิดทุก Origin ให้ใช้งานได้
สามารถอ่านถึง Methods, Header ต่างๆที่สามารถ Config ได้ที่
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests
Summary
โดยสรุปแล้วการใช้ Root HTTPProxy จะช่วยให้ทีม Platform/Operator manage Ingress ที่ทีม Developer สร้างขึ้นในแต่ละ namespace
ง่ายขึ้น รวมถึงยังสามารถ Route Traffic ไปยัง Service ที่ Deploy อยู่คนละ namespace
ได้ครับรวมถึงช่วยการ Manage Application ที่เป็น Microservice Architecture
Useful Links: