guyzsarun
guyzsarun DevOps Engineer @ IBM | ex-VMware | Tech Enthusiast

การสร้าง Root HTTPProxy บน Contour

การสร้าง 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

Contour
ก่อนที่เราจะทำการใช้ 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 https://dev.to/sandeepkumardev/fix-the-cors-and-how-the-access-control-allow-origin-header-works-17el

ถ้าเราต้องมีการใช้งาน 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:

Contour project repository
Controlling Ingress with Contour