跳到主内容
快讯直播
AI智模界
AI 词典

Ingress:规则归它,干活靠控制器

Ingress 是 Kubernetes 里的一份“七层路由说明书”:用声明式 YAML 描述“哪个域名、哪条路径的 HTTP/HTTPS 请求,应该转发到集群内的哪个 Service”。重点是,它只是一份说明书,本身不具备任何流量转发能力。

打个比方。写字楼前台墙上贴着一张分机表:找财务拨 801,找人事拨 802。这张表就是 Ingress。真正把电话接过去的是机房里那台交换机,也就是 Ingress Controller。表贴得再漂亮,交换机没通电,电话照样打不通;交换机在跑,但没人往表上写新分机,新部门也接不进来。

工作机制是这样的:Ingress Controller 是跑在集群里的一个真实进程(常见实现有 Nginx Ingress Controller、Traefik、HAProxy,各家云厂商也都有自己的版本),它持续监听 API Server 上 Ingress 对象的变化,把规则翻译成自己认识的配置(比如重新生成 nginx.conf 再热加载),然后由这个进程实际承接外部流量、做 TLS 终止和转发。

IngressClass 解决的是“谁来管”的问题。一个集群里可能同时装着好几个控制器,IngressClass 就是给说明书盖章的部门名:Ingress 通过 spec.ingressClassName 声明自己归哪个控制器处理。如果没写,集群也没有标记默认 Class,这条规则就没人认领。

对象是什么干活吗
Ingress七层路由规则的声明不干活,只描述意图
Ingress Controller真正的代理与负载均衡进程干活,读规则并执行
Service集群内一组 Pod 的稳定访问入口(四层)是 Ingress 的转发目标
IngressClass标记规则归属哪个控制器分配任务

对从业者的实际意义,可以归结为一句话:规则写了不生效,先查控制器,再查 IngressClass。具体顺序是:kubectl get ingress 看 ADDRESS 一栏是否为空,kubectl describe 看 Events 有没有报错;确认控制器 Pod 是否在运行、日志里有没有异常;确认 ingressClassName 写没写、拼没拼错、集群里有没有默认 Class;最后确认后端 Service 名称和端口对得上。

还有一个容易忽略的地方:Ingress 的很多高级能力靠注解(annotations)实现,而注解是各控制器自己定义的,换一个控制器往往要重写一遍。如果业务需要更细的灰度切流、TCP/UDP 路由,可以评估一下 Gateway API。具体字段和支持范围以官方文档为准。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。