เรากำลัง (ในที่สุด) ย้ายจาก Traefik 1 เป็น 2 เรารันแอปมากกว่า 400 แอปบน GKE อีกหนึ่งความท้าทายที่เหลืออยู่ของเราคือ:
ใน Traefik 1 เราตั้งค่าคำอธิบายประกอบใน Ingress ของแต่ละแอพที่เพิ่มส่วนหัวให้กับคำขอไปยังแบ็กเอนด์ ค่าของส่วนหัวนั้นไม่ซ้ำกันในแต่ละ Ingress นี่คือตัวอย่างที่มีค่า แต่ละแอปมีค่าอื่นใน Ingress:
---
รุ่น api: networking.k8s.io/v1
ชนิด: ทางเข้า
ข้อมูลเมตา:
ชื่อ: testapp
เนมสเปซ: ทดสอบ
คำอธิบายประกอบ:
ingress.kubernetes.io/custom-request-headers: X-Backend-คำแนะนำ:<ชื่อแอป>
ข้อมูลจำเพาะ:
...
Traefik 2 ไม่รองรับส่วนหัวนี้อีกต่อไป ดูเหมือนว่าวิธีเดียวที่จะเพิ่มส่วนหัวคำขอดังกล่าวให้กับแต่ละแอปคือการสร้างมิดเดิลแวร์ customRequestHeaders ที่ไม่ซ้ำกันสำหรับแต่ละค่าที่ไม่ซ้ำกัน จากนั้นเพิ่มมิดเดิลแวร์นั้นไปยัง Ingress ที่ตรงกัน เช่น:
---
รุ่น api: traefik.containo.us/v1alpha1
ชนิด: มิดเดิลแวร์
ข้อมูลเมตา:
ชื่อ: แบ็กเอนด์คำใบ้ส่วนหัว
เนมสเปซ: ทดสอบ
ข้อมูลจำเพาะ:
ส่วนหัว:
customRequestHeaders:
X-Backend-คำแนะนำ: <ชื่อแอป>
---
รุ่น api: networking.k8s.io/v1
ชนิด: ทางเข้า
ข้อมูลเมตา:
ชื่อ: testapp
เนมสเปซ: ทดสอบ
คำอธิบายประกอบ:
traefik.ingress.kubernetes.io/router.middlewares: test-backend-hint-header@kubernetescrd
ข้อมูลจำเพาะ:
...
แน่นอนว่าการดำเนินการนี้เป็นไปโดยอัตโนมัติ แต่ก็หมายถึงการปรับใช้มิดเดิลแวร์ที่เหมือนกันเกือบ 400 รายการขึ้นไป นั่นจะไม่สร้างปัญหาให้กับ Traefik เหรอ?
นี่เป็นวิธีที่ดีที่สุดจริงหรือ? หรือเราสามารถใช้มิดเดิลแวร์เดียวกับตัวแปรที่ส่งผ่านคำอธิบายประกอบ Ingress ได้หรือไม่? อาจจะมีอย่างอื่นที่ฉันยังไม่ได้คิด?
ณ จุดนี้ เนื่องจากความเข้ากันได้กับเครื่องมืออื่นๆ ที่อ้างอิง Ingresses เช่น cert-manager และ external-dns เราจึงไม่สามารถใช้ IngressRoute CRD ได้ แต่ต้องใช้ Ingress แบบคลาสสิก