一、安装 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"

image-20231130095408109

修改 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

image-20231130095318748

dnsPolicy 由ClusterFirst设置为 ClusterFirstWithHostNet

#56行位置
dnsPolicy: ClusterFirstWithHostNet

image-20231130095752589

hostNetwork 由false设置为 true

#77行位置
hostNetwork: true

image-20231130095834301

NodeSelector 处在原来的基础上添加 ingress: "true"部署至指定节点

#262行位置
nodeSelector:
    kubernetes.io/os: linux
    ingress: "true"

image-20231130095917871

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

#169行位置
kind: DaemonSet

image-20231130100006530

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类型,根据需要进行暴露。