【架构实战】Kubernetes Ingress实战:从路由转发到流量治理的统一入口
一、开篇网关讲完了集群内的流量怎么出去前面两篇我们分别聊了 Kong 和 APISIX 两款主流 API 网关的落地实战。有读者在后台问我“小花网关我懂了可是我的服务都跑在 Kubernetes 里Pod 的 IP 是随时会变的内网地址外面用户怎么访问进来难道每个服务都挂一个 Kong”这个问题问到了点子上。我刚接手公司容器化改造那会儿团队用的是一个极其朴素的方案每个需要对外暴露的服务手动创建一个NodePort类型的 Service然后在前面挂一层 Nginx把不同端口映射成不同域名。结果就是——Nginx 配置几千行、端口表一张 A4 纸都列不下、新增一个服务要同时改三处地方运维同学每周都要因为配错端口背一次锅。那次线上故障我到现在都记得一个新来的同事把 30080 和 30081 两个 NodePort 在 Nginx 里写反了导致支付回调流量被打到了测试环境好在测试环境当时没数据不然又是一次 P0。所以今天这篇我们专门聊 Kubernetes 里对外暴露服务这件事的集大成者——Ingress。它本质上是把路由规则这件事从手工改 Nginx 配置变成了声明式、可版本管理、跟着集群一起走的资源对象。二、服务暴露的四种姿势以及为什么最终是 IngressKubernetes 把服务暴露给集群外历史上有这么几种演进1. hostNetwork / hostPort让 Pod 直接用宿主机的网络命名空间。简单粗暴但端口冲突、调度受限、没法做负载均衡生产环境基本告别。2. NodePort每个节点开一个固定端口默认 30000-32767kube-proxy 把它转发到 Pod。优点是省事缺点是端口号丑、要自己在前端再挡一层负载均衡而且端口资源是有限的。3. LoadBalancer云厂商直接给你每个 Service 分配一个外部负载均衡器SLB/ELB。爽是真爽但一个服务一个 LB几十个服务就是几十个公网 IP月底账单能让你怀疑人生。我们曾经一个月光 LB 就烧了小两万。4. Ingress一个 LB 打底后面用 Ingress 规则把不同域名、不同路径路由到不同 Service。一个入口N 个后端这才是性价比最高的解法。Ingress 的核心价值就一句话用一份 YAML 描述什么流量去哪里剩下的转发、TLS、负载均衡交给 Controller 自动处理。三、最容易搞混的概念Ingress ≠ Ingress Controller这是我带新人时必考的一道题错的人能有一半。Ingress只是一个声明式的资源对象相当于你写的一份路由需求清单。它本身不干活。Ingress Controller真正干活的进程它监听 Ingress 资源的变化动态生成底层数据面Nginx/Envoy 等的配置并 reload。打个比方Ingress 是你要装修时画的户型图Ingress Controller 是施工队。你只画图纸施工队按图施工。没有 Controller你画一百张图也不会有一面墙被砌起来。这也是为什么你光创建一个 Ingress YAML 没反应时第一反应应该是我的 Controller 装了吗跑起来了吗它监听的是哪个 IngressClass四、主流 Controller 横评含前两篇的网关既然前面聊了 Kong 和 APISIX这里正好把它们的 Ingress 形态也一并对比方便你选型时有个全局视角方案数据面配置热更新动态能力适用场景Nginx IngressNginxreload大配置有抖动中靠注解绝大多数公司首选稳Traefik自研真正热加载强原生支持灰度云原生原生、追求自动化APISIX IngressAPISIX/etcd全动态无 reload极强已用 APISIX、要插件生态Kong IngressKong动态强已用 Kong、要丰富插件我的建议很直接如果你们没有既有的网关体系直接用 Nginx Ingress Controller 起手它资料最多、坑最少、社区最活跃。等业务复杂到需要灰度、限流、插件了再考虑 APISIX/Traefik 这类更动态的方案——而且它们本质上也能复用你已有的 Ingress 声明。五、基础路由实战host、path 与 rewrite一个最小可用的 Ingress 长这样apiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:shop-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target:/spec:ingressClassName:nginxrules:-host:mall.example.comhttp:paths:-path:/apipathType:Prefixbackend:service:name:order-serviceport:number:8080这里有几个关键点都是我踩过坑才记住的pathType一定要显式写。Prefix是前缀匹配Exact是精确匹配ImplementationSpecific是看 Controller 心情。新版本里不写会报错老版本里不写会行为诡异。rewrite-target常常被忽略。比如你的 Service 实际路径是/但外面暴露的是/api不做 rewrite请求打到后端就变成/api/xxx后端大概率 404。这个注解就是告诉 Controller“把/api这段前缀摘掉再转发”。六、TLS 实战cert-manager 让证书自愈HTTPS 现在是标配但手工管理证书是运维噩梦申请、部署、盯着到期、续期……任何一个环节漏了就是一次全站 HTTPS 崩盘。我们吃过这个亏。一次证书过期那天正好是周日值班同学手机被打爆用户在微信里骂街。从那以后我们全面上了cert-manager它作为一个 Kubernetes 控制器自动向 Let’s Encrypt 申请证书、自动注入到 Secret、到期前自动续期全程无人值守。Ingress 里引用证书只要一行spec:tls:-hosts:-mall.example.comsecretName:mall-tls-secretrules:-host:mall.example.com证书的事就从每月一次惊魂变成了忘掉它存在。让机器管证书把人从到期焦虑里解放出来这才是云原生该有的样子。七、灰度与流量切分和前面讲的灰度发布一脉相承如果你看过我讲 Kong、APISIX 灰度的文章会发现 Ingress 层的灰度逻辑是一脉相承的——只是配置位置从网关面板搬到了 YAML 注解。Nginx Ingress 支持基于权重的金丝雀annotations:nginx.ingress.kubernetes.io/canary:truenginx.ingress.kubernetes.io/canary-weight:10这表示把 10% 的流量切到新版本。配合 CI/CD我们可以先放 10%观察监控再逐步 30%、50%、100%。灰度不是炫技是给线上的自己留一条退路。这和我在 Kong/APISIX 篇里强调的零风险上线是同一个灵魂。八、一个灵魂拷问限流、鉴权放 Ingress 还是放网关这是架构评审时经常被争论的问题。我的判断标准就两条集群边界通用的东西HTTPS 终止、基础限流、跨域 CORS、基础鉴权放 Ingress 层统一做避免每个服务重复造轮子。业务相关的精细治理按用户维度限流、复杂鉴权、协议转换、插件链放 API 网关层做那里有更丰富的插件生态和动态能力。一句话总结Ingress 是你的小区大门管进出和第一道安检API 网关是你的楼栋管家管每家每户的精细服务。职责分清各司其职。九、生产踩坑实录都是真金白银换来的坑 1path 末尾的/导致 404。path: /api/和path: /api在 Prefix 模式下行为不同配合 rewrite 时尤其容易踩。我们曾经因为一个斜杠排查了三个小时。建议团队统一规范对外路径一律不带末尾斜杠。坑 2正则路由的顺序陷阱。用pathType: ImplementationSpecific配正则时Controller 按配置顺序匹配把具体路由写前面、通配写后面否则通配比你先命中。坑 3大文件上传超时。默认proxy-body-size是 1M传个大附件直接 413。要在注解里放开nginx.ingress.kubernetes.io/proxy-body-size: 50m同时调整后端超时。坑 4Ingress Controller 成了新单点。很多人忘了 Controller 本身也要高可用。我们一开始只部署了一个副本结果一次节点故障全站入口直接挂掉。后来改成多副本 HPA 自动扩缩并把它单独调度到专用节点池才真正稳下来。坑 5注解拼写错误静默失效。Ingress 的注解写错了不会报错只是不生效。比如把canary-weight写成canary-weigh灰度就悄悄没生效你还在以为已经切了 10% 流量。建议把常用注解做成 Helm values 模板减少手抖。十、写在最后回头看Ingress 的本质不是一项多高深的技术而是一种**把路由这件事声明化、标准化、跟着集群走的工程思想**。它把我们从手工改 Nginx的泥潭里拉出来让流量入口也变成了可以版本管理、可以 Code Review、可以一键回滚的代码。从 NodePort 到 LoadBalancer 再到 Ingress从手工配置到 cert-manager 自愈从单副本到多副本 HPA——这一路踩的坑本质上都在回答同一个问题如何让流量从哪里来、到哪里去这件事既灵活又可靠。下一站我们可以聊聊 Helm 这个Kubernetes 的包管理器看看怎么把今天这些 Ingress、Service、Deployment 打包成一个可复用的应用安装包。关注我架构路上不迷路。—— 本文是《100 篇架构实战》系列第 88 篇前作可回看 Kong / APISIX 网关落地实战与灰度发布专题。

相关新闻

Linux系统启动流程与Systemd服务管理详解

Linux系统启动流程与Systemd服务管理详解

1. Linux启动流程全景解析 开机键按下后的30秒内,现代Linux系统要完成从硬件自检到用户登录的完整启动链条。这个看似简单的过程实际上经历了六个关键阶段: 1.1 固件初始化阶段 当电源接通瞬间,主板上固化的UEFI或传统BIOS固件率先接管控制…

2026/10/20 1:18:21 阅读更多 →
TMS320C5514 DSP电源、时钟与Bootloader配置实战指南

TMS320C5514 DSP电源、时钟与Bootloader配置实战指南

1. 项目概述与核心价值在嵌入式DSP系统的硬件设计里,电源、时钟和启动配置这三块,绝对是决定项目成败的基石。很多工程师,尤其是刚接触德州仪器(TI)C55x系列DSP的朋友,拿到芯片手册后,面对密密麻…

2026/10/18 12:57:59 阅读更多 →
AM389x嵌入式系统GPMC异步时序与HDMI PCB设计实战解析

AM389x嵌入式系统GPMC异步时序与HDMI PCB设计实战解析

1. 项目概述与核心挑战在基于TI AM389x系列处理器的嵌入式系统设计中,尤其是那些涉及复杂人机交互、数据采集或工业控制的场景,我们常常面临一个经典的两难问题:系统需要高速、可靠地访问外部大容量存储器(如NOR Flash用于存储启动…

2026/10/19 22:58:57 阅读更多 →

最新新闻

VC++ MFC围棋程序实战:双人对战与核心逻辑实现

VC++ MFC围棋程序实战:双人对战与核心逻辑实现

简介:这是一份基于VC/MFC编写的围棋对弈程序源码,面向有一定C基础、希望深入理解Windows图形界面与游戏逻辑的开发者,尤其适合想通过完整小项目巩固MFC框架的学习者。压缩包共24个文件,约36KB,包含7个h头文件与6个cpp源…

2026/10/21 2:43:59 阅读更多 →
VC++ MFC双人对决围棋程序实战:从落子提子到胜负计算

VC++ MFC双人对决围棋程序实战:从落子提子到胜负计算

简介:这是一份基于VC与MFC框架编写的双人对决围棋程序源码,面向正在学习Windows游戏编程、希望理解MFC文档视图架构与图形绘制流程的开发者。程序支持双人轮流落子,并可根据15、17寸液晶屏选择合适窗口尺寸,落子响应迅速&#xff…

2026/10/21 2:43:59 阅读更多 →
arping 命令详解:局域网 MAC 地址探测与 IP 冲突排查实战

arping 命令详解:局域网 MAC 地址探测与 IP 冲突排查实战

简介:这是一份面向网络管理员、运维工程师及网络编程学习者的 arping 工具源码资源包,聚焦以太网环境下基于 ARP 协议探测主机在线状态并获取其 MAC 地址这一典型场景。资源共 19 个文件,以 cpp 与 h 源文件为核心,涵盖 ARP 报文构…

2026/10/21 2:43:59 阅读更多 →
基于协同过滤的电影推荐系统:Django+MySQL毕业设计实战拆解

基于协同过滤的电影推荐系统:Django+MySQL毕业设计实战拆解

简介:这套基于协同过滤的电影推荐系统毕业设计源码,面向计算机相关专业学生与推荐系统初学者,完整实现了基于用户与基于物品两种推荐算法,涵盖相似度计算、评分预测与 Top-N 推荐等完整流程。项目基于 Django 2.2.1、Python 3.7 与…

2026/10/21 2:43:59 阅读更多 →
2011款iMac装Win10:绕过BootCamp蓝屏,手动更新显卡驱动实战

2011款iMac装Win10:绕过BootCamp蓝屏,手动更新显卡驱动实战

简介:这份资源面向仍在使用 iMac 27 2011 Mid 一体机、并在其上安装 Windows 10 的用户,尤其是遇到播放视频时偶发蓝屏、苦于 Boot Camp 自带驱动版本过旧的人群。资源提供的是从 AMD 官网获取的较新显卡驱动,安装后驱动日期显示为 2015/8/19…

2026/10/21 2:43:59 阅读更多 →
纯Java数据包处理实战:抓包解析过滤统计全链路

纯Java数据包处理实战:抓包解析过滤统计全链路

简介:这份资源面向具备一定Java与网络编程基础、希望研究高性能数据包处理的开发者,是一套基于Intel数据平面开发套件(DPDK)的Java快速数据包处理框架。它最初作为毕业设计项目开发,包含DPDKJava主框架及报告后重构的D…

2026/10/21 2:42:59 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →