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

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

author image
drs

Technology evangelistic advocacy

Posted on 2023-12-08 13:40:47 +0700

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

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 <<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
    
  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

Share on

Tags

Human knowledge belongs to the world

a line from the movie "Antitrust"