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个镜像。

nginx-ingress-controller 
kube-webhook-certgen
2、我们可以去阿里云镜像仓库下载(yaml里的地址是需要 上外网才可以下载)。
我们找到2个地址,
 
三、选择节点和安装镜像
1、 我们计划将3个worker节点上安装nginx ingress,搭建高可用架构。
 
2、 这3台上都要下载这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 实现高可用。

我们通过 keepalive+nginx 实现 nginx-ingress-controller 高可用!
 内容太多,请看下一篇!
 
 

教程中涉及到的文件可以下载:

链接:https://pan.baidu.com/s/1oRvhN2_nfVT2ndE2VEN2QQ
提取码:muxx 

 

posted @ 2021-12-07 16:14  沐雪架构师  阅读(6224)  评论(0编辑  收藏  举报