必须手动安装Nginx Ingress控制器,方法包括:一、Helm Chart安装(推荐);二、官方YAML清单部署;三、kubectl一键脚本部署;四、源码构建DaemonSet定制部署。

如果您在 Kubernetes 集群中需要为外部流量提供 HTTP/HTTPS 路由能力,而当前尚未部署 Ingress 控制器,则必须手动安装并配置 Nginx Ingress 控制器。以下是适用于 Linux 环境下在 K8s 集群中部署 Nginx Ingress 控制器的多种方法:
一、使用 Helm Chart 安装(推荐)
Helm 是 Kubernetes 的包管理工具,通过官方 stable 或 ingress-nginx 仓库可快速部署经过验证的 Ingress 控制器版本,具备良好版本控制与配置灵活性。
1、确保已安装 Helm CLI 并初始化 helm repo:
2、添加官方 ingress-nginx 仓库:helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
3、更新本地仓库索引:helm repo update
4、创建专用命名空间:kubectl create namespace ingress-nginx
5、执行安装命令,启用默认后端与 hostNetwork 模式(适用于裸金属环境):helm install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --set controller.hostNetwork=true --set controller.kind=DaemonSet
二、使用官方 YAML 清单部署(离线/最小依赖)
该方式不依赖 Helm,直接应用 Kubernetes 原生资源清单,适用于无 Helm 环境或需精确控制 RBAC、Service 类型等场景,所有组件均来自 ingress-nginx 官方 GitHub release 页面。
1、下载对应版本的通用部署清单(例如 v1.10.1):curl -O https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/cloud/deploy.yaml
2、修改清单中 Service 类型为 NodePort 或 LoadBalancer(如需暴露至集群外):sed -i 's/type: LoadBalancer/type: NodePort/g' deploy.yaml
3、应用全部资源:kubectl apply -f deploy.yaml
4、验证控制器 Pod 是否就绪:kubectl -n ingress-nginx get pods -l app.kubernetes.io/name=ingress-nginx
三、使用 kubectl apply 官方快速部署脚本
该方式调用 ingress-nginx 提供的动态生成清单服务,自动适配集群版本与云平台特性,适合快速验证或开发环境一键部署。
1、执行一键部署命令(自动选择最新稳定版):kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
2、等待控制器 Pod 进入 Running 状态:kubectl -n ingress-nginx wait --for=condition=ready pod --all --timeout=300s
3、检查 Service 是否分配了外部 IP 或 NodePort:kubectl -n ingress-nginx get service ingress-nginx-controller
四、基于容器镜像手动构建 DaemonSet(自定义编译)
当需集成定制化 Lua 模块、修改 NGINX 配置模板或启用特定编译选项时,可通过源码构建专属镜像,并以 DaemonSet 方式部署,确保每个节点运行一个控制器实例。
1、克隆 ingress-nginx 源码仓库:git clone https://github.com/kubernetes/ingress-nginx.git && cd ingress-nginx
2、切换到目标发布分支(如 controller-v1.10.1):git checkout controller-v1.10.1
3、构建容器镜像并推送至私有 registry:make docker-build REGISTRY=your-registry:5000 TAG=custom-1.10.1
4、替换 deploy.yaml 中的 image 字段为私有镜像地址:sed -i 's/image:.*$/image: your-registry:5000\/ingress-nginx-controller:custom-1.10.1/g' deploy.yaml
5、应用定制化部署清单:kubectl apply -f deploy.yaml

















