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