ข้อมูลเบื้องต้น
Kubernetes เองก็เพิ่งประกาศให้เป็นให้ K8s Gateway API อยู่ในสถานะ GA - Generally Availability … หลังจากนั้นไม่นาน F5 ก็ประกาศว่า NGINX พร้อมที่จะรองรับการทำงานตามมาตรฐานที่ K8s ประกาศออกมา ด้วยผลิตภัณฑ์ใหม่ที่ชื่อว่า NGINX Gateway Fabric โดย engine ก็ยังเป็น NGINX ตัวที่เราคุ้นเคยกัน … ในหัวข้อนี้เราจะติดตั้ง NGINX Gateway Fabric เพื่อใช้ในการเรียนรู้ เรื่อง Kubernetes Gateway API และทดสอบให้พร้อมในการนำไปใช้ในระบบของเรา
เตรียมตัวก่อนติดตั้ง
NGINX Gateway Fabric ที่ติดตั้งจะเป็น v1.0.0 ซึ่งสามารถ ติดตาม version ล่าสุดได้ที่ Github ของ NGINX Gateway Fabric สิ่งที่ต้องเตรียมให้เรียบร้อย ก่อนที่จะลงมือติดตั้ง มีประมาณนี้ครับ
- Kubernetes Cluster ผมติดตั้ง v1.28.2 เพื่อใช้ในการทดสอบ
- kubeconfig ที่มีสิทธิ์ในการสร้าง component ใน K8s Cluster
- kubectl ผมใช้ v1.28.2
- ติดตั้ง Helm
- ทดสอบบนระบบปฎิบัติการ macOS 14.1.2 (23B92)
เริ่มการติดตั้ง
-
ในการใช้งาน NGINX Gateway Fabric เราต้องเริ่มจากการทำให้ Kubernetes Cluster ของเรารู้จัก Kubernetes Gateway API ก่อน เนื่องจาก ณ. วันนี้ Kubernetes Gateway API ยังไม่ได้ถูกรวมเข้าไปเป็นส่วนหนึ่งของ Kubernetes จริงต้องติดตั้งในรูปแบบของ CRD - Custom Resource Definition
แต่เนื่องจาก Kubernetes Gateway API ยังอยู่ในช่วงที่เพิ่งเริ่มใช้งาน เราจึงได้รู้จักทางเลือกในการใช้งานที่ขึ้นอยู่กับช่วงสถานของการพัฒนา ซึีงหลัก ๆ เราจะได้เห็นอยู่ 2 สถานะก็คือ Standard และ Experimental Channel
- Standard Channel เป็นสถานะที่มีทรัพยากรต่าง ๆ ที่ใช้งานได้จริง อาจจะอยู่ขั้นตอนที่เป็น GA หรือ beta ซึ่ง ณ. วันที่ 8 ธันวาคม 2566 ก็จะมีอยู่ 4 ชนิดคือ GatewayClass, Gateway, HTTPRoute, and ReferenceGrant
- Experimental Channel เป็นสถานะที่กำลังอยู่ในช่วงทดลอง ดังนั้นทรัพยากรต่าง ๆ ที่อยู่ในสถานะนี้อาจจะมีการปรับเปลี่ยนในรายละเอียด หรือว่าถูกถอดออกไปก็เป็นไปได้
Standard Channel
-
ในข้อตอนการติดตั้ง NGINX Gateway Fabic เราเลือกใช้ Helm Chart ในการติดตั้ง และมีการปรับเปลี่ยนรายละเอียดค่า default นิดหน่อย เช่น เปลี่ยนจำนวน replica จาก 1 เป็น 3 (ใน version นี้การติดตั้งรองรับเฉพาะการติดตั้งแบบ Deployment เท่านั้น), กำหนดชื่อของ GatewayClass เป็น nginx, ปรับแต่งการ expose เป็น nodePort แล้วกำหนดค่า externalTrafficePolicy เป็นแบบ Cluster
รายละเอียด value สำหรับการปรับเปลี่ยนการติดตั้งได้จาก เอกสารนี้
-
ตรวจสอบผลการติดตั้ง NGINX Gateway Fabric
> kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.0.0/standard-install.yaml
customresourcedefinition.apiextensions.k8s.io/gatewayclasses.gateway.networking.k8s.io created
customresourcedefinition.apiextensions.k8s.io/gateways.gateway.networking.k8s.io created
customresourcedefinition.apiextensions.k8s.io/httproutes.gateway.networking.k8s.io created
customresourcedefinition.apiextensions.k8s.io/referencegrants.gateway.networking.k8s.io created
> cat > ngf-vaules.yaml <<EOF
nginxGateway:
replicaCount: 3
gatewayClassName: nginx
service:
externalTrafficPolicy: Cluster
type: NodePort
EOF
> helm install myngf-1 oci://ghcr.io/nginxinc/charts/nginx-gateway-fabric --create-namespace -n nginx-gateway --values ngf-vaules.yaml
Pulled: ghcr.io/nginxinc/charts/nginx-gateway-fabric:1.0.0
Digest: sha256:b8a6cd9b5f2b7b6aaa10615ca32653fa0ba43d95291be5a146fe459c08c4391f
NAME: myngf-1
LAST DEPLOYED: Sat Dec 9 17:16:12 2023
NAMESPACE: nginx-gateway
STATUS: deployed
REVISION: 1
TEST SUITE: None
> kubectl get pods -n nginx-gateway
NAME READY STATUS RESTARTS AGE
myngf-1-nginx-gateway-fabric-99664896f-clqb4 2/2 Running 0 3m27s
myngf-1-nginx-gateway-fabric-99664896f-jxhkr 2/2 Running 0 3m27s
myngf-1-nginx-gateway-fabric-99664896f-txpxt 2/2 Running 0 3m27s
> kubectl get gatewayclass
NAME CONTROLLER ACCEPTED AGE
nginx gateway.nginx.org/nginx-gateway-controller True 3m49s
Ref: