在 Kubernetes 的圈子里,关于“流量怎么进集群”这个话题,永远不缺新花样。
从最原始的 NodePort,到烧钱的 LoadBalancer,再到这两年被吹上天的 Gateway API,技术名词层出不穷。但如果你去翻翻各家大厂的生产环境,或者在 云栈社区 里潜水看看大家的实际部署,你会发现一个有趣的现象:
绝大多数跑在生产线上的 K8s 集群,依然老老实实地用着 Ingress-Nginx。
为什么这个“老家伙”这么能打?今天咱们不念文档,单纯从运维实战的角度,聊聊它的“真香”定律。
一、 它不是 Nginx,它是“活”的 Nginx
很多刚接触 K8s 的朋友容易有个误区,觉得 Ingress-Nginx 不就是把 Nginx 塞进 Docker 容器里吗?
完全不是一回事。
传统的 Nginx 是静态的,改个配置得 reload,动静很大。而 Ingress-Nginx 的核心逻辑在于 “动态感知” 。它就像一个这就好比给 Nginx 装了个“大脑”,它时刻盯着 K8s 的 API Server。
- 你新上了一个 Service?它知道了。
- Pod 扩容 IP 变了?它也知道了。
一旦检测到变化,它会利用 Go 模板引擎瞬间生成新的 nginx.conf。更绝的是,为了避免频繁 reload 导致连接断开(运维最怕的抖动),它大量使用了 Lua 脚本。
这意味着,像端点发现、证书动态加载这些高频操作,直接在内存里就通过 Lua 搞定了。这种架构设计,让它成为了 后端 & 架构 中处理高并发流量最稳健的一环。
二、 Annotations:一行配置解决大麻烦
在没有 Ingress 之前,想改个 Nginx 参数,你得去改 ConfigMap,甚至去改镜像。但在 Ingress-Nginx 里,Annotations(注解) 简直就是魔法棒。
举几个我们在 云栈社区 交流中最高频的“救命”场景:
- 后端路径不对齐? 开发给的接口是
/api/v1,但对外要暴露成 /v1?一行 rewrite-target 搞定,不用去扯皮。
- 被爬虫刷爆了? 紧急加上
limit-rps 做限流,或者用 ip-whitelist 封掉恶意 IP,立竿见影。
- 要上 WAF? 开启
modsecurity-snippet,虽然损耗点性能,但安全感拉满。
这种声明式的配置方式,让运维人员彻底从繁琐的配置文件中解脱出来,真正实现了“配置即代码”。
三、 出了问题,得以此为据
做运维的都懂,不出问题是运气,出了问题能快速定位才是本事。
Ingress-Nginx 在可观测性上做得非常扎实。它不需要你额外装什么插件,原生就吐出 /metrics 指标。
- QPS 突增? Prometheus 上一眼就能看到。
- 耗时变长? 它是卡在 SSL 握手,还是后端响应慢,指标里清清楚楚。
- 全链路追踪? 配合 Jaeger 或 Zipkin,一个请求从进来到出去,路径明明白白。
对于构建完善的 运维 / DevOps / SRE 监控体系来说,Ingress-Nginx 提供的这些数据就是最宝贵的“黑盒数据”。
写在最后
Gateway API 确实是未来,它的标准更统一,扩展性更强。但在当下,Ingress-Nginx 凭借着极其成熟的生态、几乎零成本的学习曲线,以及 Nginx 强大的内核性能,依然是 K8s 流量入口的首选。
技术没有银弹,适合业务、稳得住生产的,就是最好的。
你的集群还在用 Ingress-Nginx 吗?还是已经尝鲜了 Gateway API?欢迎在评论区聊聊你的踩坑经历。
配套资源
GitHub项目:kubernetes/ingress-nginx
官方文档:kubernetes.github.io/ingress-nginx
运维云原生课程:https://yunpan.plus/f/33
Go语言学习:https://yunpan.plus/f/27
欢迎关注【云栈运维云原生】,我们不聊虚的,只分享一线实战干货。
标签: #Ingress #Kubernetes #云原生 #DevOps #云栈社区 #Nginx #运维 #Gateway #API