Ingress-Nginx 安装实战:使用 Helm 部署控制器

来自AI助手的总结
介绍了通过Helm部署并配置Ingress Nginx Controller的方法
Ingress-Nginx 安装实战:使用 Helm 部署控制器

一、安装Ingress Nginx

通常有两种方式:

  1. 部署一个独立的 Ingress 控制器 Pod:可以通过将 Ingress 控制器部署为一个独立 的 Pod,使用 Kubernetes Service 对其进行负载均衡和暴露服务。

  2. 部署一个 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"

image-20231130095408109

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

image-20231130095318748

dnsPolicy 由ClusterFirst设置为 ClusterFirstWithHostNet


dnsPolicy: ClusterFirstWithHostNet

image-20231130095752589

hostNetwork 由false设置为 true


hostNetwork: true

image-20231130095834301

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


nodeSelector:

    kubernetes.io/os: linux

    ingress: "true"

image-20231130095917871

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


kind: DaemonSet

image-20231130100006530

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

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容