Kubernetes Ingress แบบเดิมกำลังถูกแทนที่ด้วย Gateway API ซึ่งเป็นมาตรฐานใหม่ของโครงการ Kubernetes สำหรับจัดการ Traffic ขาเข้า ประเด็นนี้เร่งด่วนขึ้นสำหรับคลัสเตอร์ที่ใช้ ingress-nginx เพราะโครงการได้ประกาศยุติการพัฒนาและเหลือเพียงการดูแลแบบจำกัดในช่วงเปลี่ยนผ่าน [ตรวจสอบ: วันที่ประกาศและกำหนดสิ้นสุดการดูแลจาก Kubernetes Blog] ทีมที่ใช้อยู่ควรวางแผนย้ายไป Gateway API หรือ Ingress Controller ตัวอื่นที่ยังพัฒนาต่อเนื่อง
สิ่งที่ต้องแยกให้ชัดคือ ingress-nginx ที่ดูแลโดยชุมชน Kubernetes เป็นคนละโครงการกับ NGINX Ingress Controller ที่พัฒนาโดยผู้ผลิต NGINX ก่อนวางแผนให้ตรวจว่าคลัสเตอร์ของคุณใช้ตัวไหน
Kubernetes Ingress กับ Gateway API ต่างกันอย่างไร
| มิติ | Ingress | Gateway API |
|---|---|---|
| โครงสร้าง | Resource เดียวรวมทุกอย่าง | แยกเป็น GatewayClass, Gateway และ Route |
| การแบ่งความรับผิดชอบ | ผู้ดูแลคลัสเตอร์และทีมแอปแก้ Resource เดียวกัน | ทีม Platform ดูแล Gateway ทีมแอปดูแล Route ของตัวเอง |
| โปรโตคอล | HTTP และ HTTPS เป็นหลัก | HTTP, gRPC, TLS, TCP และ UDP |
| ฟีเจอร์ขั้นสูง | ใช้ Annotation ซึ่งต่างกันในแต่ละ Controller | กำหนดใน Spec มาตรฐาน เช่น Header Matching และ Traffic Splitting |
| การย้าย Controller | ต้องแปลง Annotation ใหม่ | Route ส่วนใหญ่ใช้ต่อได้ถ้า Controller รองรับฟีเจอร์เดียวกัน |
ปัญหาหลักของ Kubernetes Ingress แบบเดิมคือฟีเจอร์ที่เกินกว่าการ Route พื้นฐานต้องใช้ Annotation เฉพาะของแต่ละ Controller การเปลี่ยน Controller จึงต้องแก้ Manifest จำนวนมาก Gateway API แก้ปัญหานี้ด้วยการกำหนดฟีเจอร์เหล่านี้เป็นมาตรฐาน ดูเอกสารทางการได้ที่ Gateway API
ส่วนประกอบของ Gateway API ที่มาแทน Kubernetes Ingress
- GatewayClass: ระบุว่าใช้ Controller ตัวไหน คล้าย StorageClass
- Gateway: กำหนด Listener เช่น พอร์ต 443 และ Certificate เป็นจุดรับ Traffic
- HTTPRoute: กำหนดว่า Host และ Path ใดไปที่ Service ไหน ทีมแอปสร้างเองใน Namespace ของตัวเองได้
เลือก Controller สำหรับ Gateway API
Controller ที่รองรับ Gateway API มีหลายตัว เช่น Envoy Gateway, Istio, Cilium, NGINX Gateway Fabric, Traefik, Kong และ HAProxy ตรวจระดับการรองรับของแต่ละตัวได้จากหน้า Implementations ในเอกสาร Gateway API ให้เลือกโดยพิจารณาจาก
- ระดับ Conformance ของ Gateway API ที่ Controller ผ่าน
- ฟีเจอร์ที่แอปใช้อยู่ เช่น Rate Limiting, Authentication และ WebSocket
- ความคุ้นเคยของทีม เช่น ทีมที่ใช้ Service Mesh อยู่แล้วอาจเลือก Controller ที่มากับ Mesh นั้น
- รอบการออก Release และช่องทาง Support
ขั้นตอนที่ 1: สำรวจ Kubernetes Ingress และ Annotation ที่ใช้
kubectl get ingress -A
kubectl get ingress -A -o yaml | grep "nginx.ingress.kubernetes.io" | sort | uniq -c | sort -rn
คำสั่งที่สองนับว่า Annotation แต่ละตัวถูกใช้กี่ครั้ง ช่วยให้รู้ว่าต้องหาฟีเจอร์อะไรมาทดแทน เช่น rewrite-target, ssl-redirect, auth-url และ configuration-snippet ตัวหลังสุดควรตรวจเป็นพิเศษ เพราะเป็นการแทรก Config ของ NGINX โดยตรง ซึ่งไม่มีสิ่งเทียบเท่าในมาตรฐาน
ขั้นตอนที่ 2: ติดตั้ง Gateway API CRD และ Controller
ติดตั้ง CRD ของ Gateway API ตามเวอร์ชันที่ Controller รองรับ แล้วติดตั้ง Controller คู่ขนานกับ ingress-nginx เดิม โดยยังไม่เปลี่ยน DNS ทำให้ทดสอบได้โดยไม่กระทบผู้ใช้
