当前位置: 首页 > news >正文

Kubernetes Nginx Ingress Controller 安装与测试文档

Kubernetes Nginx Ingress Controller 安装与测试文档

本文档介绍了如何使用 Helm 在 Kubernetes 集群中部署 Nginx Ingress Controller。为了应对国内网络限制,文档中包含了离线获取 Chart 包以及替换镜像源的完整解决方案,并采用了DaemonSet+HostNetwork的高性能部署模式。最后提供了一个 Nginx 应用作为测试案例。

零、 安装 Helm (如已安装可跳过)

在部署 Ingress 之前,需要确保你的主控节点上已经安装了 Helm 工具。

# 下载安装脚本curl-fsSL-oget_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3# 赋予执行权限chmod700get_helm.sh# 执行安装./get_helm.sh# 验证安装是否成功helm version

一、 准备 Helm Chart

1. 添加官方仓库并更新

# 添加 ingress-nginx 官方 Helm 仓库helm repoaddingress-nginx https://kubernetes.github.io/ingress-nginx# 更新本地仓库缓存helm repo update# (可选) 搜索可用的 chart 版本helm search repo ingress-nginx/ingress-nginx-l

2. 下载 Chart 包

由于国内网络环境限制,直接使用helm pull可能会遇到connection reset by peer错误。

方式一:使用 Helm 直接拉取(网络通畅时)

helm pull ingress-nginx/ingress-nginx--version4.15.1

方式二:备选下载方式(网络受限时)
直接使用wget或通过浏览器下载 GitHub Releases 上的压缩包:

wgethttps://github.com/kubernetes/ingress-nginx/releases/download/helm-chart-4.15.1/ingress-nginx-4.15.1.tgz

下载完成后,解压并进入目录:

tar-zxvfingress-nginx-4.15.1.tgzcdingress-nginx

二、 镜像准备(应对拉取困难)

官方使用的镜像托管在registry.k8s.io,国内可能无法直接访问。你可以选择手动替换并分发镜像在 Helm 安装时动态指定代理源

方案 A:手动下载并分发镜像(适合内网完全断网环境)

注:以下操作需在所有计划部署 Ingress 的节点上执行,或在一台机器操作后通过ctr导出分发。以 Chart 对应的v1.11.3v1.4.4版本为例,假设你找到了华为云等替代镜像。

# === 处理 controller 镜像 ===# 1. 从替代源拉取镜像 (使用 crictl)crictl pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/ingress-nginx/controller:v1.11.3# 2. 将镜像重新打标签,使其与官方名称一致 (crictl 不支持 tag,使用 ctr 指定 k8s 命名空间)ctr-nk8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/ingress-nginx/controller:v1.11.3 registry.k8s.io/ingress-nginx/controller:v1.11.3# 3. (可选) 保存镜像为 tar 文件,用于分发ctr-nk8s.io imagesexportncontroller.tar registry.k8s.io/ingress-nginx/controller:v1.11.3# === 处理 kube-webhook-certgen 镜像 ===# 1. 从替代源拉取镜像crictl pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.4# 2. 重新打标签ctr-nk8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.4 registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.4# 3. (可选) 保存镜像为 tar 文件ctr-nk8s.io imagesexportcertgen.tar registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.4# === 在其他目标节点上分发与加载 ===# 4. (如果使用了 .tar 文件) 将 tar 文件拷贝到其他节点# scp ncontroller.tar root@<other-node-ip>:/root# scp certgen.tar root@<other-node-ip>:/root# 5. (如果使用了 .tar 文件) 在其他节点导入镜像到 k8s 命名空间# ctr -n k8s.io images import ncontroller.tar# ctr -n k8s.io images import certgen.tar

确保在执行 Helm 安装之前,所有目标节点上都存在registry.k8s.io/ingress-nginx/controller:v1.11.3registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.4这两个本地镜像。

方案 B:Helm 动态指定代理镜像源(推荐,适合有公网能力的集群)

在下文的安装步骤中,我们将直接使用k8s.m.daocloud.io作为镜像代理地址。


三、 执行安装

我们采用DaemonSet结合HostNetwork的模式部署,以获得最低的网络转发延迟。同时配置ClusterFirstWithHostNet确保在主机网络模式下,Pod 依然能正确解析集群内部的 DNS。

如果之前安装过失败的版本,可以先执行卸载:helm uninstall ingress-nginx -n ingress-nginx

在解压后的ingress-nginx目录下,执行以下命令安装:

helminstallingress-nginx--debug\--namespaceingress-nginx --create-namespace\--setcontroller.hostNetwork=true\--setcontroller.kind=DaemonSet\--setcontroller.service.type=ClusterIP\--setcontroller.dnsPolicy=ClusterFirstWithHostNet\--setcontroller.image.registry=k8s.m.daocloud.io\--setcontroller.image.image=ingress-nginx/controller\--setcontroller.admissionWebhooks.patch.image.registry=k8s.m.daocloud.io\--setcontroller.admissionWebhooks.patch.image.image=ingress-nginx/kube-webhook-certgen\--setcontroller.admissionWebhooks.create.image.registry=k8s.m.daocloud.io\--setcontroller.admissionWebhooks.create.image.image=ingress-nginx/kube-webhook-certgen\.

四、 部署测试应用

部署一个简单的 Nginx 网页服务,并为其创建 Service 和 Ingress 路由规则。

1. 创建部署文件my-nginx.yaml

apiVersion:apps/v1kind:Deploymentmetadata:name:my-nginxspec:selector:matchLabels:run:my-nginxreplicas:2template:metadata:labels:run:my-nginxspec:containers:-name:my-nginximage:nginx:latestresources:limits:memory:"128Mi"cpu:"500m"ports:-containerPort:80---apiVersion:v1kind:Servicemetadata:name:nginx-servicespec:selector:run:my-nginxtype:ClusterIPports:-protocol:TCPport:8080targetPort:80---apiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:example-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target:/$1spec:ingressClassName:nginxrules:-host:test.ingress.comhttp:paths:-path:/pathType:Prefixbackend:service:name:nginx-serviceport:number:8080

2. 应用配置

kubectl apply-fmy-nginx.yaml

五、 验证测试

在配置了本机hosts或内部 DNS 将test.ingress.com解析到任意一台运行了 Ingress Controller 的 Node IP 后,发起请求测试:

curl-H"Host: test.ingress.com"http://<运行Ingress的Node_IP># 或者配置 hosts 后直接请求:# curl http://test.ingress.com

如果返回了标准的 Nginx 欢迎页面 (Welcome to nginx!),则说明 Ingress Controller 部署并路由成功!

http://www.cnnetsun.cn/news/2720899.html

相关文章:

  • 实践1: Linux 系统运维环境搭建与自动化实践
  • 本地跑 LLM 哪家强?Llama / Qwen / DeepSeek 全方位对比
  • 长文本处理Agent的架构挑战:上下文窗口、分治策略与摘要融合
  • 避坑指南:RK3568 USB设备树配置常见错误与调试技巧(附真实问题排查记录)
  • Kotlin Flow实战:从LiveData迁移到Flow的完整避坑指南(Android Jetpack)
  • 网御星云防火墙策略配置实战:从放行办公网到封禁挖矿流量,一条规则搞定
  • ArcGIS Pro 3 里OSGB转SLPK,我踩过的那些坑和最终的高效批处理方案
  • MATLAB四阶矩可靠度计算工具:含熵辅助、偏导数值求解与改进算法
  • 粒球计算与骨架聚类技术在大数据中的应用
  • WaveTools鸣潮工具箱:解锁120帧极致体验的完整指南
  • 深入解析JetBrains Maple Mono字体合成架构与实现原理
  • MiniMax M3 把百万上下文、SOTA 编程、多模态集齐,模型不再“偏科“
  • 从“灵光一现”到“深思熟虑”:Self-Consistency如何让大模型更像人类专家做决策
  • 别只做Demo了!给你的EasyAR图像识别APP加上手势缩放旋转,提升交互体验
  • 【AI电商整合实战指南】:2024年最全7大落地场景+3套避坑清单,头部平台已验证
  • 抖音无水印视频批量下载神器:告别手动保存的烦恼
  • 手把手教你用ENVI搞定Landsat8影像的FLAASH大气校正(附完整参数设置与避坑点)
  • PHP日志系统从入门到精通
  • 从Fluent面板到理论公式:一文讲透ANSYS Help文档的四种正确打开方式
  • 别再只做九点标定了!Halcon+C#实战:手眼标定完整流程与旋转中心补偿避坑指南
  • 【万字文档+源码】基于springBoot+vue摄影师分享交流社区系统-项目分享学习
  • 手把手教你理解GW星座:从3GPP NTN标准到手机直连卫星的实战展望
  • SAP EWM两步拣配实战:从波次释放到发货完成的完整流程演示与库存变化追踪
  • 企业级Windows Syslog服务器终极指南:Visual Syslog Server完整部署与优化方案
  • 从一次跨国服务时间戳Bug说起:深入理解Linux的CST、UTC、GMT和RTC到底怎么玩
  • 在AutoDL上租张4090,5小时跑通So-vits-svc4.1模型训练(含社区镜像选择与日志解读)
  • 转行AI训练师,你竟然能找到这些高薪工作!(附岗位地图)
  • 实验室萌新必看:手把手教你读懂pET-28a(+)质粒图谱,从元件到实操一次搞定
  • MATLAB实现的车-路-网协同充电负荷模拟工具:支持动态路径规划与区域级24小时负荷热力图生成
  • 从无效社交到价值网络:工程师的个人品牌与系统性连接策略