Ingress负载均衡机制是什么?如何配置Ingress
- 前端开发
- 2026-08-11
- 6
Ingress是Kubernetes集群的流量门卫,它把外部HTTP/HTTPS请求按规则转发给内部Service,真正负责转发决策的负载均衡机制由Ingress Controller实现。很多人把Ingress和Service混为一谈,其实Ingress只是一套规则声明,就像贴在门上的快递分拣表,而Controller才是那个弯腰干活的快递员。
Ingress负载均衡机制是什么,它和Service有啥区别
Ingress工作原理:从请求到Pod的完整链路
一次完整的Ingress访问流程长这样:
- 外部请求先打到Ingress Controller的监听端口,通常是宿主机的80或443
- Controller读取Ingress资源的规则,比如域名是api.example.com,路径是/v1
- 根据规则匹配到对应的Service
- Service再通过Endpoints列表把请求转发到具体的Pod
整个过程中,Ingress扮演的是“路由表”角色,Controller负责“查表并转发”,业内专家指出,这种设计把四层负载和七层路由拆开,让集群入口管理变得灵活不少。
一个最简的Ingress资源长这样:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress spec: rules: host: api.example.com http: paths: path: /v1 pathType: Prefix backend: service: name: api-service port: number: 8080
Ingress和Service的区别:一个管转发,一个管发现

| 对比项 | Service | Ingress |
|---|---|---|
| 层级 | 四层(TCP/UDP) | 七层(HTTP/HTTPS) |
| 核心能力 | Pod发现与负载均衡 | 域名/路径路由规则 |
| 暴露方式 | ClusterIP、NodePort、LoadBalancer | 依赖Controller落地 |
| 规则管理 | 无路由规则概念 | 支持路径、域名、TLS、注解 |
| 典型场景 | 集群内部服务间调用 | 对外提供HTTP服务 |
行业共识认为,Service解决的是“访问谁”的问题,Ingress解决的是“按什么规则访问”的问题,用大白话说,Service是小区里的楼栋号,Ingress是小区门口的访客登记表,上面写着“找张三去3栋,找李四去5栋”。
为什么有了Service还需要Ingress
NodePort虽然能暴露服务,但每个Service都要占用一个宿主机端口,服务一多端口就乱成一锅粥,LoadBalancer类型的Service在自建集群里又贵又麻烦,Ingress用一个入口收敛所有HTTP流量,还能免费给你TLS终止、URL重写、灰度发布这些能力,这是它存在的最大价值。
生产环境Ingress Controller怎么选:Nginx与Traefik对比
主流Controller现状
Kubernetes生态里的Controller不少,但生产环境最常见的主要是这几个:
- ingress-nginx:目前社区最活跃,基于Nginx引擎,文档全,踩坑经验多
- Traefik:云原生亲儿子,动态配置能力强,自带Dashboard,和微服务配合默契
- HAProxy Ingress:性能取向,主打高并发四层和七层
- 云厂商自带Ingress:阿里云、西西安全都提供托管版,免运维但灵活性略低
Nginx与Traefik选型对比

| 对比项 | ingress-nginx | Traefik |
|---|---|---|
| 配置方式 | 注解为主,支持ConfigMap | 动态配置,CRD + 文件多种 |
| 性能表现 | 稳定性强,高并发表现好 | 略逊于Nginx,但够用 |
| 学习曲线 | 需要熟悉Nginx语义 | 配置简单,上手快 |
| 灰度发布 | 支持Canary注解 | 原生支持,路由规则更细腻 |
| Dashboard | 依赖Grafana等外部监控 | 自带Web UI |
| 社区生态 | 使用者众,问题方案多 | 社区活跃,但踩坑案例少 |
生产环境怎么选?如果你们团队对Nginx熟悉,业务以标准HTTP为主,直接上ingress-nginx,它是目前最稳的选择,如果你们是微服务架构,服务拆分细,路由规则变化频繁,Traefik的动态配置能力能让发布流程省不少事。
自建还是用云托管
云托管的Ingress胜在省心,升级、高可用、监控都帮你做了,但规则透传和定制能力受限,自建Ingress则要自己扛高可用和性能调优,多数情况下,中小团队建议用云托管,等规模大了再考虑自建。
国内云厂商Ingress费用贵不贵,配置要点有哪些
费用构成:别只看Ingress本身
国内环境里,阿里云、西西安全、华为云都提供Ingress托管方案,费用大头通常不在Ingress本身,而在背后的负载均衡SLB实例和流量。
- 阿里云ACK的Ingress默认基于SLB,收费按SLB实例费 + 公网流量费
- 西西安全TKE的Ingress基于CLB,计费方式类似,按量计费为主
- 自建ingress-nginx则只需支付ECS服务器费用,流量按云厂商出方向单价算
据云厂商公开计费说明,托管Ingress的费用差异不大,真正拉开成本的是流量和实例规格,如果集群规模不大,用自建的ingress-nginx加一台2核4G的节点就能跑得很稳,成本远低于想象。

配置要点:注解、证书和健康检查
国内云厂商的Ingress,配置核心全在注解里,举几个高频场景:
- HTTPS证书管理:阿里云支持自动关联SSL证书服务,西西安全支持Secret方式挂载证书
- 连接空闲超时
:默认超时时间较短,长连接场景需要调大keep-alive超时注解
- 后端健康检查:云托管Ingress默认带健康检查,但自定义路径要用注解标注
- 给Ingress Controller单独打节点标签,用nodeSelector调度到专用节点,避免业务应用挤占CPU
- 开启Controller的多副本扩展,至少2个副本做高可用,分散在不同可用区
- 配置监控告警,盯住Controller的请求延迟、错误率、Pod重启次数,别等用户反馈才发现挂了
生产环境必做的三件事
常见Ingress故障排查(Q&A)
问:Ingress返回503 Service Unavailable,怎么排查?
先看后端Pod是不是Running,再检查对应的Service能不能通,用kubectl get endpoints看有没有地址,如果Endpoints为空,说明Service的selector没匹配到Pod,最后看ingress-nginx的日志,确认它把请求转发到了哪个上游。
问:生产环境ingress和LoadBalancer Service可以配合使用吗?
可以,而且很常见,云厂商的Ingress本身就是SLB或CLB接入到Controller,前面是四层负载,后面是七层路由,这种架构下,SLB负责扛流量,Ingress负责精细转发,配合起来能覆盖大规模流量场景。
问:高并发场景下,Ingress会成为性能瓶颈吗?
任何入口层都会成为潜在瓶颈,假设你的业务峰值每秒上万请求,单副本ingress-nginx通常能扛住,但保险起见建议把副本数扩展到3个以上,并开启Pod反亲和让副本分布在不同节点,同时调大worker_processes和worker_connections,减少TLS握手开销,用长连接复用,Ingress的瓶颈大多不在软件本身,而在你没给它做资源规划。
Ingress不是银弹,但它是Kubernetes对外暴露HTTP服务的标准姿势,把Controller选型、配置规范和故障排查这三件事做扎实,你的集群入口就能稳如老狗。