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

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

author image
drs

Technology evangelistic advocacy

Posted on 2023-12-07 23:40:47 +0700

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

สิ่งที่เรากำลังจะทำตามเอกสารนี้ ก็คือการติดตั้ง 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

Share on

Tags

Human knowledge belongs to the world

a line from the movie "Antitrust"