ติดตั้ง NGIX Ingress Controller v3.3.2 ด้วย Manifests

1 ใน 3 ของวิธีการติดตั้ง NGINX Ingress Controller ตามเอกสารอย่างเป็นทางการของ NGINX คือติดตั้งด้วย Manifests
ติดตั้ง NGIX Ingress Controller v3.3.2 ด้วย Manifests

เตรียมของการติดตั้ง

สิ่งที่เรากำลังจะทำตามเอกสารนี้ ก็คือการติดตั้ง NGINX Ingress Controller ที่เป็น Ingress Controller จาก F5 (เจ้าของ NGINX) และ คนละตัวกับ Ingress NGINX Controller ที่ถูกพัฒนาโดย Kubernetes เอง และสิ่งที่ต้องเตรียมให้เรียบร้อย ก่อนที่จะลงมือติดตั้ง มีประมาณนี้ครับ

  • Kubernetes Cluster ผมติดตั้ง v1.28.2 เพื่อใช้ในการทดสอบ
  • kubeconfig ที่มีสิทธิ์ในการสร้าง component ใน K8s Cluster
  • kubectl ผมใช้ v1.28.2
  • node ใน cluster ชื่อว่า app0.d8k.io
  • ทดสอบบนระบบปฎิบัติการ macOS 14.1.2 (23B92)
### ติดตั้ง NGINX Ingress Controller v3.3.2
  1. เตรียม d/l NGINX Ingress Controller v3.3.2 จาก github
  2. 
    > git clone https://github.com/nginxinc/kubernetes-ingress.git --branch v3.3.2
    Cloning into 'kubernetes-ingress'...
    remote: Enumerating objects: 55908, done.
    remote: Counting objects: 100% (1368/1368), done.
    remote: Compressing objects: 100% (848/848), done.
    remote: Total 55908 (delta 850), reused 883 (delta 472), pack-reused 54540
    Receiving objects: 100% (55908/55908), 66.54 MiB | 5.86 MiB/s, done.
    Resolving deltas: 100% (34807/34807), done.
    Note: switching to 'd239c207534aaa4fc524fb276f8d44330dbe8571'.
    [... truncated output ...]
    
    > cd kubernetes-ingress/deployments
    
  3. สร้าง Namespace, ServiceAccount, ClusterRole และ ClusterRoleBinding
  4. 
    > kubectl apply -f common/ns-and-sa.yaml
    namespace/nginx-ingress created
    serviceaccount/nginx-ingress created
    
    > kubectl apply -f rbac/rbac.yaml
    clusterrole.rbac.authorization.k8s.io/nginx-ingress created
    clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress created
    
  5. สร้าง Secret สำหรับเป็น key pair เป็นใช้เป็นค่า default สำหรับ HTTPs
  6. 
     > kubectl apply -f ../examples/shared-examples/default-server-secret/default-server-secret.yaml
    secret/default-server-secret created
    
  7. สร้าง ConfigMap สำหรับเป็น Customize configuration ของ NGINX
  8. 
     > kubectl apply -f common/nginx-config.yaml
    configmap/nginx-config created
    
  9. กำหนดชื่อ IngressClass สำหรับ NGINX Ingress Controller
  10. 
    > kubectl apply -f common/ingress-class.yaml
    ingressclass.networking.k8s.io/nginx created
    
  11. ติดตั้ง Custom Resource Definition
  12. 
     > kubectl apply -f ./common/crds/k8s.nginx.org_virtualservers.yaml
    customresourcedefinition.apiextensions.k8s.io/virtualservers.k8s.nginx.org created
    
    > kubectl apply -f ./common/crds/k8s.nginx.org_virtualserverroutes.yaml
    customresourcedefinition.apiextensions.k8s.io/virtualserverroutes.k8s.nginx.org created
    
    > kubectl apply -f ./common/crds/k8s.nginx.org_transportservers.yaml
    customresourcedefinition.apiextensions.k8s.io/transportservers.k8s.nginx.org created
    
    > kubectl apply -f ./common/crds/k8s.nginx.org_policies.yaml
    customresourcedefinition.apiextensions.k8s.io/policies.k8s.nginx.org created
    
  13. แก้ไข Deployment และ สร้าง Deployment ของ NGINX Ingress Controller
  14. 
    > sed -i.bak 's/\#- -default-server/ - -default-server/g' deployment/nginx-ingress.yaml
    
    > kubectl apply -f deployment/nginx-ingress.yaml
    deployment.apps/nginx-ingress created
    
  15. กำหนดค่า nodePort และสร้าง Service ชนิด nodePort
  16. 
    > nl=$'\n'
    
    > sed -i.bak "/targetPort: 80/a\\${nl}    nodePort: 30080${nl}" service/nodeport.yaml
    
    > sed -i.bak "/targetPort: 443/a\\${nl}    nodePort: 30443${nl}" service/nodeport.yaml
    
    > kubectl create -f service/nodeport.yaml
    service/nginx-ingress created
    
    > kubectl get service -n nginx-ingress
    NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
    nginx-ingress   NodePort   10.106.82.156   none        80:30080/TCP,443:30443/TCP   2m
    
  17. ทดสอบความพร้อมของ NGINX Ingress Controller
ผลลัพธ์ที่ได้จะเห็นได้ว่า NGINX Ingress Controller ทำงานเรียบร้อยแล้ว แต่ที่แสดงผลออกมาโดยการ return 404 เนื่องจากยังไม่มีการกำหนด Ingress

Ref:

cover