一、安装 Ingress Nginx¶
1.4.1 使用 Helm 安装 Ingress Nginx¶
1、helm安装
下载地址:https://github.com/helm/helm/releases
说明:我用的Kubernetes版本为1.26.9,考虑到后期会升级Kubernetes版本,所以helm版本为3.11
[root@master01 ~]# k get no
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane 11d v1.26.9
master02 Ready control-plane 11d v1.26.9
master03 Ready control-plane 11d v1.26.9
node01 Ready <none> 11d v1.26.9
node02 Ready <none> 11d v1.26.9
下载二进制包
$ wget https://get.helm.sh/helm-v3.11.3-linux-amd64.tar.gz
解压,改名并做软链接
$ tar zxf helm-v3.11.3-linux-amd64.tar.gz -C /opt/
$ mv /opt/linux-amd64/ /opt/helm
$ ln -s /opt/helm/helm /bin/
验证软链接
$ ll /bin/helm
lrwxrwxrwx 1 root root 14 Oct 5 22:00 /bin/helm -> /opt/helm/helm
测试,查看helm版本
$ helm version
version.BuildInfo{Version:"v3.11.3", GitCommit:"323249351482b3bbfc9f5004f65d400aa70f9ae7", GitTreeState:"clean", GoVersion:"go1.20.3"}
2、helm下载ingress-nginx
添加Helm仓库源
$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
更新Helm仓库
$ helm repo update
查看
$ helm repo list
搜索Hlem仓库中的ingress-nginx
$ helm search repo ingress-nginx/ingress-nginx
下载到本地并解压
$ helm pull ingress-nginx/ingress-nginx --version 4.6.0 --untar
#如果下载不下来,可以直接访问https://github.com/kubernetes/ingress-nginx/releases/download/helm-chart-4.6.0/ingress-nginx-4.6.0.tgz进行下载
3、修改values.yaml文件
修改 ingress-nginx-contorller 的镜像仓库地址(同时一定要注释掉digest信息)
[root@master01 4]# cd ingress-nginx
[root@master01 ingress-nginx]# vim values.yaml
#Controller镜像地址(21行位置)
image:
registry: registry.cn-hangzhou.aliyuncs.com
image: google_containers/nginx-ingress-controller
tag: "v1.7.0"

修改 kube-webhook-certgen 的镜像地址改为国内仓库地址(同时一定要注释掉digest信息)
[root@master01 4]# cd ingress-nginx
[root@master01 ingress-nginx]# vim values.yaml
#kube-webhook-certgen镜像地址(599行)
image:
registry: registry.cn-hangzhou.aliyuncs.com
image: google_containers/kube-webhook-certgen
tag: v20230312-helm-chart-4.5.2-28-g66a760794

dnsPolicy 由ClusterFirst设置为 ClusterFirstWithHostNet
#56行位置
dnsPolicy: ClusterFirstWithHostNet

hostNetwork 由false设置为 true
#77行位置
hostNetwork: true

NodeSelector 处在原来的基础上添加 ingress: "true"部署至指定节点
#262行位置
nodeSelector:
kubernetes.io/os: linux
ingress: "true"

类型由Deployment更改为 DaemonSet,用于确保在Kubernetes集群的每个节点上都部署一个ingress-nginx的副本
#169行位置
kind: DaemonSet

1.4.2 安装 Ingress Nginx¶
选择节点打label
[root@master01 4]# kubectl label node node01 node02 ingress=true
验证
[root@master01 ingress-nginx]# kubectl get node --show-labels | grep ingress=true
node01 Ready <none> 13d v1.26.9 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ingress=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=node01,kubernetes.io/os=linux
node02 Ready <none> 13d v1.26.9 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ingress=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=node02,kubernetes.io/os=linux
创建命名空间
[root@master01 4]# kubectl create ns ingress-nginx
进入到ingress-nginx目录,使用helm进行安装
[root@master01 ~]# cd /root/4/ingress-nginx
[root@master01 ingress-nginx]# helm install ingress-nginx -f values.yaml -n ingress-nginx .
查看helm部署情况
[root@master01 ingress-nginx]# helm list -n ingress-nginx
更新维护
#删除ingress-nginx
[root@master01 ~]# cd /root/4/ingress-nginx
[root@master01 ingress-nginx]# helm delete ingress-nginx -n ingress-nginx
#更新ingress-nginx
[root@master01 ~]# cd /root/4/ingress-nginx
[root@master01 ingress-nginx]# helm upgrade ingress-nginx ./ingress-nginx -f values.yaml -n ingress-nginx
查看ingress-nginx资源
[root@master01 ingress-nginx]# kg all -ningress-nginx
NAME READY STATUS RESTARTS AGE
pod/ingress-nginx-controller-44w46 1/1 Running 0 9h
pod/ingress-nginx-controller-5zl7w 1/1 Running 0 9h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ingress-nginx-controller LoadBalancer 10.0.104.133 10.0.0.10 80:30431/TCP,443:32003/TCP 9h
service/ingress-nginx-controller-admission ClusterIP 10.0.36.40 <none> 443/TCP 9h
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/ingress-nginx-controller 2 2 2 2 2 ingress=true,kubernetes.io/os=linux 9h
ingress-nginx-controller Service:这个Service负责将请求转发到ingress-nginx- controller Pods。它通常会将流量分发到ingress-nginx-controller的多个副本中,并确 保副本集的负载平衡。这个Service可以被配置为使用NodePort、LoadBalancer或 ClusterIP类型,根据需要进行暴露。
ingress-nginx-controller-admission Service:用于检查和验证Ingress中定义的规则 和设置是否正确。它可以确保在创建、更新或删除Ingress资源时,所有必需的配置项都 已正确设置,并防止不正确的配置影响到您的应用程序的运行。此服务还可以执行一些 自动化的操作,例如生成TLS证书并将其与相应的Ingress资源关联,以确保通过Ingress 的所有流量都以加密的方式传输。该Service也可以被配置为使用NodePort、 LoadBalancer或ClusterIP类型,根据需要进行暴露。