一、找安裝的yaml文件
ingress-nginx的官網地址為:
https://github.com/kubernetes/ingress-nginx
我們可以找到安裝的yaml文件,網址為:
https://github.com/kubernetes/ingress-nginx/tree/main/deploy/static/provider/baremetal
文件為:deploy.yaml
下載到本地。
二、找鏡像
1、從deploy.yaml文件里,我們可以看到,需要2個鏡像。
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.1.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1
3、將這3個worker節點都打上標簽:
kubectl label node k8s-node1 kubernetes.io/ingress=nginx kubectl label node k8s-node2 kubernetes.io/ingress=nginx kubectl label node k8s-node3 kubernetes.io/ingress=nginx
四、修改deploy.yaml文件
將剛剛下載的deploy.yaml修改,修改完后上傳到master節點。
1、分析該yaml文件,大概步驟有:
yaml里的步驟: 1、創建一個 Namespce,名為 ingress-nginx,下面的所有資源都在改命名空間下 2、創建一個 ServiceAccount,名為ingress-nginx 3、創建一個 ConfigMap,名為ingress-nginx-controller 4、創建一個 ClusterRole,名為 ingress-nginx 5、創建一個 ClusterRoleBinding,名為 ingress-nginx,與ClusterRole綁定,分配給 名稱為ingress-nginx的 ServiceAccount 6、創建一個 Role,名為 ingress-nginx, 7、創建一個 RoleBinding,名稱為 ingress-nginx,與6的Role綁定,分配給 名稱為ingress-nginx的 ServiceAccount 8、創建一個 Service ,名稱為 ingress-nginx-controller-admission,類型為CusterIP,對外暴露443 ,targetPort: webhook ---- 9、創建一個 Service ,名稱為 ingress-nginx-controller,對外暴露80,443, targetPort: http, targetPort: https 10、創建一個 Deployment,名稱為 ingress-nginx-controller,副本為2,標簽略, 給上面2個service匹配上了。hostNetwork: true 11、創建一個 ValidatingWebhookConfiguration,名稱為 ingress-nginx-admission, 12、創建一個 ServiceAccount,名稱為 ingress-nginx-admission 13、創建一個 ClusterRole,名稱為 ingress-nginx-admission 14、創建一個 ClusterRoleBinding,名稱為 ingress-nginx-admission ,與上面13的ClusterRole綁定,分配給12. 15、創建一個 Role,名稱為 ingress-nginx-admission 16、創建一個 RoleBinding,名稱為 ingress-nginx-admission,綁定15的role,分配給12 17、創建一個 Job,名稱為 ingress-nginx , 18、創建一個 Job,名稱為 ingress-nginx-admission-patch
2、將鏡像的地址修改微阿里雲下載的鏡像。(修改3處)
3、我們要將 nginx ingress controller分別部署在3個worker節點,每個節點一個應用,
(1)則要將 Deployment是ingress-nginx-controller的副本數改為3;
(2)Deployment是ingress-nginx-controller利用親和性和反親和性等增加代碼,以及dnsPolicy策略修改。
affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchLabels: app.kubernetes.io/name: ingress-nginx topologyKey: kubernetes.io/hostname dnsPolicy: ClusterFirstWithHostNet
(3)、ports添加宿主機的端口:
(4)Deployment是ingress-nginx-controller添加 hostNetwork: true
最后的文件內容請下載:
鏈接:https://pan.baidu.com/s/1oRvhN2_nfVT2ndE2VEN2QQ
提取碼:muxx
五、執行
kubectl apply -f deploy.yaml
等2-3分鍾。
查看pods情況:
kubectl get pods -n ingress-nginx -owide
到此, nginx-ingress-controller 安裝完畢,接下來開始對 nginx-ingress-controller 實現高可用。
教程中涉及到的文件可以下載:
鏈接:https://pan.baidu.com/s/1oRvhN2_nfVT2ndE2VEN2QQ
提取碼:muxx