一、安装Ingress Nginx¶
通常有两种方式:
- 部署一个独立的 Ingress 控制器 Pod:可以通过将 Ingress 控制器部署为一个独立 的 Pod,使用 Kubernetes Service 对其进行负载均衡和暴露服务。
- 部署一个 DaemonSet 类型的 Ingress 控制器:使特定节点上都运行一个 Ingress 控制器 Pod,并通过 Kubernetes Service 对其进行负载均衡和暴露服务。
安装Ingress Nginx Controller 的方式有多种,以下是其中的一些:
- Helm安装(推荐):使用 Helm 工具,可以在 Kubernetes 集群上轻松安装和升级 Ingress Nginx Controller。
- Kubernetes YAML 安装:使用 Kubernetes YAML 配置文件,可以在 Kubernetes 集群上安装 Nginx Ingress Controller。
- Cloud安装:在某些云平台上,可以使用托管服务的形式安装 Nginx Ingress Controller,例如阿里云上的 ACK。
1.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 6]# cd ingress-nginx
[root@master01 ingress-nginx]# vim values.yaml
#Controller镜像地址
image:
registry: registry.cn-hangzhou.aliyuncs.com
image: google_containers/nginx-ingress-controller
tag: "v1.7.0"

修改 kube-webhook-certgen 的镜像地址改为国内仓库地址(同时一定要注释掉digest信息)
[root@master01 6]# cd ingress-nginx
[root@master01 ingress-nginx]# vim values.yaml
#kube-webhook-certgen镜像地址
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
dnsPolicy: ClusterFirstWithHostNet

hostNetwork 由false设置为 true
hostNetwork: true

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

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

1.2 安装 Ingress Nginx¶
选择节点打label
[root@master01 ~]# 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 ~]# kubectl create ns ingress-nginx
进入到ingress-nginx目录,使用helm进行安装
[root@master01 ~]# cd /root/6/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
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx ingress-nginx 1 2025-04-07 08:18:33.722210289 +0800 CST deployed ingress-nginx-4.6.0 1.7.0
更新维护
#删除ingress-nginx
[root@master01 ~]# cd /root/6/ingress-nginx
[root@master01 ingress-nginx]# helm delete ingress-nginx -n ingress-nginx
#更新ingress-nginx
[root@master01 ~]# cd /root/6/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 192.168.1.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类型,根据需要进行暴露。