ติดตั้ง 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
-
เตรียม d/l NGINX Ingress Controller v3.3.2 จาก github
> 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 -
สร้าง Namespace, ServiceAccount, ClusterRole และ ClusterRoleBinding
> 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 -
สร้าง Secret สำหรับเป็น key pair เป็นใช้เป็นค่า default สำหรับ HTTPs
> kubectl apply -f ../examples/shared-examples/default-server-secret/default-server-secret.yaml secret/default-server-secret created -
สร้าง ConfigMap สำหรับเป็น Customize configuration ของ NGINX
> kubectl apply -f common/nginx-config.yaml configmap/nginx-config created -
กำหนดชื่อ IngressClass สำหรับ NGINX Ingress Controller
> kubectl apply -f common/ingress-class.yaml ingressclass.networking.k8s.io/nginx created -
ติดตั้ง Custom Resource Definition
> 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 -
แก้ไข Deployment และ สร้าง Deployment ของ NGINX Ingress Controller
> 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 -
กำหนดค่า nodePort และสร้าง Service ชนิด nodePort
> 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 -
ทดสอบความพร้อมของ NGINX Ingress Controller

ผลลัพธ์ที่ได้จะเห็นได้ว่า NGINX Ingress Controller ทำงานเรียบร้อยแล้ว แต่ที่แสดงผลออกมาโดยการ return 404 เนื่องจากยังไม่มีการกำหนด Ingress
Ref: