ติดตั้ง NGIX Gateway Fabric ด้วย helm chart

NGINX Gateway Fabric สามารถทำตัวเป็น Gateway Controller ใน K8s Gateway API ได้
ติดตั้ง NGIX Gateway Fabric ด้วย helm chart

ข้อมูลเบื้องต้น

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)
### เริ่มการติดตั้ง
  1. ในการใช้งาน 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 เป็นสถานะที่กำลังอยู่ในช่วงทดลอง ดังนั้นทรัพยากรต่าง ๆ ที่อยู่ในสถานะนี้อาจจะมีการปรับเปลี่ยนในรายละเอียด หรือว่าถูกถอดออกไปก็เป็นไปได้
    ในการทดสอบครั้งนี้ผมเลือกติดตั้ง CRD ของ Kubernetes Gateway API จาก Standard Channel

  2. 
    > 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
    
  3. ในข้อตอนการติดตั้ง NGINX Gateway Fabic เราเลือกใช้ Helm Chart ในการติดตั้ง และมีการปรับเปลี่ยนรายละเอียดค่า default นิดหน่อย เช่น เปลี่ยนจำนวน replica จาก 1 เป็น 3 (ใน version นี้การติดตั้งรองรับเฉพาะการติดตั้งแบบ Deployment เท่านั้น), กำหนดชื่อของ GatewayClass เป็น nginx, ปรับแต่งการ expose เป็น nodePort แล้วกำหนดค่า externalTrafficePolicy เป็นแบบ Cluster

    รายละเอียด value สำหรับการปรับเปลี่ยนการติดตั้งได้จาก เอกสารนี้

  4. 
    > cat > ngf-vaules.yaml <
    > 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
    
  5. ตรวจสอบผลการติดตั้ง NGINX Gateway Fabric

  6. 
    > 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:

cover