ingress-nginx部署总结

发布时间 2023-11-27 18:48:20作者: 夜夜漫笔
一、与项目组确认以下信息
(1)ingress-controller 命名空间名称:没有则需创建
(2)ingress 调度节点的标签:没有则需创建
(3)ingress 暴露的 http、https 端口:需检查 ingress 节点端口是否被占用
(4)ingress.class 名称: 按照项目组提供的名称进行部署
(5)ingress-controller 的 daemonset 名称: 一般与 ingress.class 名称一致
二、部署文件准备
#master1 节点为当时部署时配置文件存放节点
文件位置:/root/k8s-upgrade-deploy/deploy-ingress-controller/
#mkdir create_ingress;
#cp /root/k8s-upgrade-deploy/deploy-ingress-controller/* /root/create_ingress/
将上传的 ingress-rbac.yaml、create_ingress.sh 文件放到/root/create_ingress/目录下
三、修改 create_ingress.sh 脚本中的变量并在此目录下执行脚本
备注:
(1)只需修改标红变量部分,其他内容无需修改
(2)该脚本目前只适合在 master 节点的 root 下执行,如需在已做命名空间隔离的 app 用
户下执行,则需将 ingress-rbac.yaml 在 master 上执行,剩余 yaml 可在 app 上执行
脚本内容如下:
(1) 将该目录下所有 yaml 文件的 ns 改成创建 ingress 所需 ns
(2) 在 ingress.yaml 添加 serviceaccount
(3) 在 ingress.yaml、backend.yaml 中配置标签及容忍,使 ingress-controller 的 pod 调度到指
定节点
(4) 设置 ingress-controller 的访问端口
(5) 设置 ingress.class 的名称及 deamonset 名称
#!/bin/bash
ingress_ns='ceshi-gj'
ingress_label='ceshi: gj'
ingress_http='http-port=18081'
ingress_https='https-port=18082'
ingress_class='gj-ingress-controller'
ingress_name='ceshi-ingress-controller'
#替换命名空间
for i in `ls | grep yaml`
dosed -i "s/namespace: kube-system/namespace: $ingress_ns/g" $i
done
#替换标签及污点
sed -i "s/name: nginx-ingress-controller/name: $ingress_name/" ingress.yaml
sed -i "s/node-role.kubernetes.io\/lb: nginx/$ingress_label/g" ingress.yaml
sed -i "/
hostNetwork: false/a\
tolerations:" backend.yaml
sed -i "/
tolerations:/a\
- operator: Exists" backend.yaml
sed -i "/
- operator: Exists/a\
nodeSelector:" backend.yaml
sed -i "/
nodeSelector:/a\
$ingress_label" backend.yaml
#替换访问端口并添加访问穿透参数
sed -i "s/http-port=9080/$ingress_http/g" ingress.yaml
sed -i "s/https-port=9443/$ingress_https/g" ingress.yaml
sed -i "/$ingress_https/a\
- --enable-ssl-passthrough" ingress.yaml
#添加 sa
sed -i "/
hostNetwork: true/a\
serviceAccountName: nginx-ingress-serviceaccount"
ingress.yaml
#修改 ingress.class
sed -i "s/ingress-class=nginx-ingress-controller/ingress-class=$ingress_class/g" ingress.yaml
#添加资源限制
sed -i "/
# use downward API/a\
resources:" ingress.yaml
sed -i "/
resources:/a\
limits:" ingress.yaml
sed -i "/
limits/a\
cpu: 200m" ingress.yaml
sed -i "/
cpu: 200m/a\
memory: 500Mi" ingress.yaml
sed -i "/
memory: 500Mi/a\
requests:" ingress.yaml
sed -i "/
requests:/a\
cpu: 200m" ingress.yaml
sed -i "/
requests:/a\
memory: 500Mi" ingress.yaml
#运行 yaml 文件
kubectl create cm nginx-tmpl -n $ingress_ns --from-file=nginx.tmpl
kubectl create -f ingress-controller-port-cm.yaml
kubectl create -f tcp-configmap.yaml
kubectl create -f udp-configmap.yaml
kubectl create -f configmap.yaml
kubectl create -f ingress-rbac.yaml
kubectl create -f ingress.yaml
kubectl create -f backend.yaml
四、验证 ingress-controller 服务是否正常
1、查看 pod 是否正常
#kubectl get pod -n $ingress_ns
2、项目组将 ingress 节点与创建的域名追加到/etc/hosts,创建 ingress 规则后访问