k8s- nginx ingress 高可用部署(最新版,支持 k8s 1.22---1.19)第一篇
一、找安装的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
作者:沐雪
文章均系作者原创或翻译,如有错误不妥之处,欢迎各位批评指正。本文版权归作者和博客园共有,如需转载恳请注明。
如果您觉得阅读这篇博客让你有所收获,请点击右下方【推荐】
为之网-热爱软件编程 http://www.weizhi.cc/