尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

揭开 K8s 流量大管家的面纱:彻底搞懂 nginx-ingress-controller!

揭开 K8s 流量大管家的面纱:彻底搞懂 nginx-ingress-controller! 揭开 K8s 流量大管家的面纱彻底搞懂 nginx-ingress-controller容器服务ACK-集群列表-集群名称/ID-工作负载-无状态(Deployment)-全部命名空间-nginx 大家好如果你在使用 Kubernetes比如阿里云 ACK当你在控制台的kube-system命名空间里闲逛时大概率会撞见一个名为nginx-ingress-controller的工作负载就像题图显示的那样 。它通常静静地运行在那里状态是Running。它究竟是干什么的为什么我们需要它今天我们就来剥丝抽茧一探究竟️‍♂️⚠️ 首先纠正一个常见误区它是谁装的很多人在kube-system系统命名空间看到它会误以为这是 Kubernetes 或云厂商“强塞”给你的底层默认组件就像 CoreDNS 一样。其实不然严格来说它是我们主动“聘请”来的‍♂️在阿里云 ACK 中nginx-ingress-controller是一个可选的核心组件Add-on。它是怎么来的通常是集群管理员在创建集群时主动勾选安装或者后期在“组件管理”中手动一键安装的。之所以放在kube-system下是为了将这种“基础设施级”的网络组件与普通的业务代码隔离开来方便统一管理。 架构选型拓展实际上在如今的公有云环境中Nginx 已经不是唯一的选择了。比如阿里云现在也提供了完全托管、性能更强悍的ALB Ingress直接驱动云端负载均衡器免去了在集群跑 Nginx Pod 的运维成本。那为什么还要用 Nginx因为开源的力量Nginx Ingress 拥有极其成熟的生态支持海量的自定义配置Annotation甚至能嵌入 Lua 脚本。对于需要极高定制化路由策略的硬核技术团队来说它依然是不可替代的“流量利器”⚔️ 一个生动的比喻公司总前台搞清楚了它的身世我们来看看它是干嘛的。把你的Kubernetes 集群想象成一栋超级豪华的写字楼Pod容器组 里面的员工‍真正在干活的程序。Service服务 楼里的部门️比如订单部、用户部把员工组合在一起。现在外部的客户互联网用户 想要来拜访这栋楼里的某个部门访问你的后端 API。如果没有 Ingress客户得知道每一个部门的具体分机号NodePort或者给每一个部门单独配一个专线电话LoadBalancer这不仅超级费钱 而且难以管理。有了 Ingress Controller相当于在写字楼一楼大厅设立了一个总前台兼安保中心‍♂️‍♀️。nginx-ingress-controller就是这个总前台客户只需要统一走到前台对前台说“我要去api.xxx.com”或者“我要去/login”。前台小本本上记着规则核对之后直接把客户精准地领到对应的部门去。️ 核心概念解析Ingress vs Ingress Controller要真正掌握它必须分清两个长得很像的词1. Ingress规则/配置单Ingress 在 K8s 里只是一份 YAML 格式的**“路由规则表”**。它里面写着“访问a.com- 送到 A 服务。”“访问b.com/app- 送到 B 服务。”注意Ingress 本身是个死物它只是规则自己是不干活的。2. ⚙️ Ingress Controller执行者/前台本人规则需要有人来执行这个人就是Ingress Controller在你的截图里这就是使用大名鼎鼎的Nginx作为核心引擎来实现的控制器。它的日常工作流是这样的 死盯 K8s API它时刻监视着集群里有没有人创建、修改或删除了 Ingress 规则。动态写配置一旦发现新规则它会立刻将 K8s 里的 YAML 规则自动翻译成 Nginx 能够读懂的nginx.conf配置文件。✍️热重载转发自动 Reload Nginx 进程生效然后开始接收外部的 HTTP/HTTPS 请求并将其转发给后端的 Pod。✨ 它的核心必杀技为什么它能在 K8s 流量网关中占据半壁江山因为它拥有以下强大能力 统一流量入口节约成本整个集群只需要为这个 Controller 暴露一个公网入口绑定一个云厂商的 SLB。所有流量先进来再分发极大节省了公网 IP 和负载均衡器的开销 强大的七层路由完美支持基于域名 (Domain)和路径 (Path)的精确/正则路由分发。 HTTPS/SSL 证书卸载业务代码无需关心证书配置。只需把证书挂载到 Controller 上外部访问是加密的 HTTPS内部转发是轻量的 HTTP安全又高效。️⚖️ 高阶流量治理通过简单的 Annotation 注解就能轻松实现灰度发布金丝雀发布、流量限流Rate Limiting、跨域配置CORS、重定向等高级玩法。️ 结合截图再看一眼细节再次审视你提供的截图我们可以印证几个关键点 镜像组成截图中显示其镜像包含了nginx-ingress-controller。其实它内部就是 Nginx 进程加上一个 Go 写的控制器代码两者协同工作。 副本数 (Replicas)1/1截图显示当前只有 1 个 Pod 在运行。 生产环境小贴士作为整个集群的唯一入口为了防止“前台”单点故障导致整栋楼失联在真正的生产环境Prod中强烈建议将其扩容Scale到2 个或以上的 Pod并配合反亲和性调度到不同的节点上实现高可用。 总结总而言之nginx-ingress-controller就是你根据业务需求主动为 K8s 集群配置的“大门”和“交通指挥官”。它巧妙地融合了 Nginx 强悍的反向代理性能与 Kubernetes 的自动化机制让你能够优雅、高效地将微服务暴露给全世界。下次在控制台看到它相信你已经对它的底细了如指掌啦你在 K8s 网络配置中踩过哪些坑平时更倾向于用 Nginx Ingress 还是云厂商的 ALB Ingress 呢欢迎在评论区留言交流
返回列表