Ingress选型:7种选型对比+Istio+Gateway API

一、背景:

你正在用ingress-nginx,突然发现Kubernetes社区宣布它2026年3月要退役了。

好了别慌。我干了10年运维,从最初用Nginx手写配置,到现在天天跟各种Ingress Controller和Istio 打交道,踩过的坑估计能写本书。这篇文档不是官方手册的复制粘贴——我会直接把选型对比、部署方案、Istio集成思路以及线上真实踩过的坑都给你讲清楚。

读完本文,你将能:

  • 搞清楚7种主流Ingress Controller的核心差异和适用场景
  • 零基础完成一套生产级别的Ingress Controller部署
  • 掌握Gateway API的迁移路径和最佳实践
  • 理解Istio如何在Ingress/Gateway层发挥作用

(我用的版本:K8s v1.30+,ingress-nginx v1.10+,Istio 1.24+,后续再细说版本兼容性的坑。)

 

二、Ingress Controller到底是什么?

先说句实在话:Ingress本身只是个API对象,它定义的是一套路由规则,但自己压根不干活。真正干活的是Ingress Controller——它跑在集群 里,监听Ingress(或Gateway API)资源的变化,然后动态配置底层的反向代理(如Nginx、Envoy、HAProxy等),把流量正确转发到后端Service。

前置条件(缺一不可,别再问为啥不生效了):

  • Kubernetes集群版本≥1.19
  • 集群内至少部署了一个Ingress Controller
  • 有Cluster-admin权限(部署时用得到)
  • 网络环境允许Service Type=LoadBalancer或NodePort暴露

 

三、主流Ingress Controller选型对比(7款)

好,这是我日常被问最多的问题:“到底选哪个?”。说实话,没有绝对的好坏,关键在于你的场景。

我先上一张对比表,后面再逐个拆:

Controller 核心引擎 协议支持(L4/L7) 灰度能力 Dashboard 学习曲线 Istio融合度
ingress-nginx(社区版) Nginx L4+L7 ✅原生支持(权重/Header/Cookie)
NGINX Inc(商业版) Nginx Plus L4+L7 ✅更完善(JWT/主动健康检查)
Traefik Traefik L4+L7 ✅原生支持(权重/Header)
HAProxy HAProxy L4+L7
Envoy Gateway Envoy L4+L7 ✅Header匹配/权重切分 极高
Istio Ingress Gateway Envoy L4+L7 ✅(通过VirtualService直接支持) 通过Kiali等组件提供 完整集成
Kong OpenResty/Nginx+Lua L4+L7 ✅权重/Header/Cookie ✅(收费版) 中(通过插件)

3.1 ingress-nginx——行业事实标准

ingress-nginx有两个版本:

  • 社区版(kubernetes/ingress-nginx)
  • 商业版,是nginx公司开发的产品(nginxinc/kubernetes-ingress)

社区版本(kubernetes/ingress-nginx)最流行、最成熟、最不用太动脑的选项,覆盖了90%的使用场景,大多数团队都在用,免费。

商业版有JWT验证、主动健康检查等额外功能,但多数场景不需要。

优点

  • 生态极大,几乎所有K8s相关问题都有人踩过
  • 基于Annotation配置,简单粗暴,上手快
  • 与K8s服务发现无缝集成
  • 支持直接扩展Lua脚本(高级用户可用)
  • 免费版本覆盖几乎所有生产需求

缺点

  • Annotation堆砌导致YAML文件越来越长
  • 配置重载时必须重启或reload Nginx(虽然官方努力解决)
  • 某些特殊场景性能偏弱(参见HAProxy官方性能测试报告,明确显示HAProxy在相同QPS下CPU资源消耗更低)
  • 最关键的,也是最重要的一点——Kubernetes SIG Network已于2025年11月宣布ingress-nginx将于2026年3月正式退役。建议新项目直接考虑Gateway API生态,存量项目尽早规划迁移。

3.2 Traefik——云原生自动发现

如果你追求“配置越少越好”,那Traefik是个好选择。它最大的亮点是自动服务发现——CRD或者甚至K8s Service Annotations就能配上路由,不用写Ingress也行。

我推荐这些场景用它:

  • 微服务数量爆炸式增长(几百甚至上千,手写Ingress配置不现实)
  • 团队想用社区化仪表版快速发现问题
  • 给无状态、持续交付频率极高的业务做路由

但它有个明显缺点:默认配置性能偏弱。官方或第三方基准测试显示,在高并发场景下,Traefik的QPS只有HAProxy 或类似控制器的约一半或更少,CPU占用还偏高。

3.3 HAProxy——性能神器

性能、连接数、延迟三方面都极其强悍。根据HAProxy官方发布的基准测试(用5个流量注入Pod、50个并发负载发生器全面测试),HAProxy Kuberentes Ingress Controller在RPS(每秒请求数)、延迟和HTTP错误率三个维度排第一。尤其惊人的是,它达到42000 RPS时,用户态CPU使用率竟然比竞品更优。

最佳场景:

  • 极度追求性能的中间层(如API网关高并发接入层)
  • 长连接负载(WebSocket、gRPC流式通信)
  • 要求SLI延迟p99极低(游戏、实时同步类业务)

缺点:社区文档相对少,配置有点复杂,不像ingress-nginx随便搜出几百篇教程。同时它的扩展机制更多依赖HAProxy本身的Lua或SPOE转发控制器,对K8s原生功能支持(如用户定义CRD)相对保守。

3.4 Envoy Gateway 和Istio Ingress Gateway

这两个本质内核一样——都是Envoy(L7代理之王)。Gateway API的兴起让这两个方案逐渐成为大厂主力选择,尤其在服务网格或云原生高级流量治理层面。

Envoy Gateway:纯粹把Gateway API+K8s标准做得很好,不附带服务网格特性,专注南北向流量入口的Gateway功能,如果你需要纯净、不额外引入网格层的高性能Gateway,它很合适。但1.0版本之后其Operator模式必须自建CRD管理,功能相对单一。

Istio Ingress Gateway:实质是用Istio控制面管理Envoy数据面,提供Gateway流量入口功能。强大的流量镜像、故障注入、请求超时重试、丰富的权重和基于Header的动态路由,这些都是Istio的强项。

但Istio上Gateway得想明白两件事:

  1. Istio本身是服务网格系统,启用Ingress Gateway一般会顺带注入sidecar,资源消耗确实偏高;
  2. 配置相对复杂,需要学习Gateway、VirtualService、DestinationRule等几个概念才能用好。

个人观点:新项目如果要用Gateway API+Envoy,建议直接上Istio Ingress Gateway,因为未来Istio 1.24+会完全拥抱Gateway API方向,它的社区和商用支持更好。

3.5 Kong——API管理最强

假如你需要完善的API策略、开发者门户、多种认证插件甚至自定义Lua插件时,Kong是最佳选择。Kong底层基于Nginx+OpenResty,所以性能和扩展性都很好。

适用场景

  • 需要API Key、OAuth、JWT、ACL、请求转换等多层认证场景
  • API产品化(需审计日志、流量控制、开发 Portal)
  • 多团队租户隔离管理

 

四、生产环境部署与配置(以Nginx为例)

安装——Helm方式(强烈推荐)

我一般用Helm来管理,方便升级维护:

# 添加ingress-nginx官方仓库
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
 
# 创建命名空间(如果还没建)
kubectl create namespace ingress-nginx
 
# 安装/升级(假设v1.11.3,建议查最新稳定版本)
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --set controller.replicaCount=2 \
  --set controller.nodeSelector."kubernetes\.io/os"=linux \
  --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \
  --set controller.service.type=NodePort

五、Gateway API:下一代流量管理标准

我已经不止一次遇到用户问:“ingress-nginx退役了,我们该用什么?”

首先是2025年11月11日,Kubernetes官方正式宣布ingress-nginx(社区版)将于2026年3月正式退役。这意味着不会再有任何新功能、安全补丁或bug修复,长期依赖这条路有问题。

那怎么办?Kubernetes官方给出的明确答案就是 Gateway API——ingress的下一代继任者,解决了ingress的灵活性、协作性和可移植性三大致命缺点。

5.1 Gateway API vs Ingress:核心差异

维度 Ingress API (老) Gateway API (新)
资源模型 单一Ingress对象 GatewayClass + Gateway + Route(角色分离)
协议支持 HTTP/HTTPS(L7) HTTP/HTTPS + gRPC + TLS + TCP + UDP(L4+L7)
高级路由 依赖控制器特有Annotations 标准API字段(Header匹配、流量切分、请求镜像)
关注点分离 路由和基础设施配置混在一起 基础设施运维、集群管理员、应用开发三层清晰隔离
可移植性 低(Annotations不同) 中等至高(核心规范一致)

Gateway API的核心设计思想是角色分离:基础设施供应商定义GatewayClass,集群管理员配置Gateway,应用开发者创建HTTPRoute。

一句话总结:之前一个人管所有,现在各管各的,乱不了。

5.2 Gateway API实现方案选型

截至2026年8月,主流Gateway API实现包括:

实现方案 引擎 Istio集成 生产就绪度 适合场景
NGINX Gateway Fabric NGINX 通过独立部署集成 GA ✅ 想继续用Nginx但拥抱Gateway API
Envoy Gateway Envoy 通过独立部署集成 GA ✅ 高性能、纯Gateway需求
Istio Envoy 原生集成(GAMMA倡议) GA ✅ 服务网格+Gateway一体化
Cilium Envoy 原生集成 GA ✅ 网络+安全+可观测全栈
Kong OpenResty 通过插件支持 GA ✅ API管理需求

个人强烈建议:新项目直接在Gateway API上构建,不用再回头看旧Ingress。具体实现选型参考上面的对比。

六、Istio集成:从Ingress到服务网格

很多用户在Ingress和Istio之间纠结。我直接说结论:

  • Ingress:只处理集群边缘的南北向HTTP路由,简单配置就行。
  • Istio Ingress Gateway:不仅做南北向入口,还与Istio网格深度结合,实现细粒度流量管理(金丝雀发布、故障注入、请求重试、全链路可观测等),南向内部服务也能统一治理。

官方文档说得也很清楚:即使不安装Istio,你也可以用独立Ingress Controller。但如果想让Istio接收外部流量,就必须启用Istio自己的Ingress Gateway,作为外部流量的南北代理。

6.1 Istio + Gateway API

在Istio 1.24+版本中,社区已全面拥抱Kubernetes Gateway API,不再推荐使用旧的Istio Gateway+VirtualService API来处理集群入口流量(但存量兼容)。

迁移到Gateway API后,用HTTPRoute代替VirtualService:

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: my-http-route
spec:
  parentRefs:      # 上游指向Istio Gateway资源
  - name: my-gateway
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /v1
    backendRefs:
    - name: my-service-v1
      port: 8080
  - matches:
    - path:
        type: PathPrefix
        value: /v2
    backendRefs:
    - name: my-service-v2
      port: 8080

七、总结

好了,这篇文档从Ingress Controller选型讲到Gateway API趋势,从Istio集成讲到了灰度发布和避坑指南,我自认已经把最核心的东西梳理清楚了。

核心回顾

  • Ingress Controller不只是一个Ingress资源,它才是真正的流量入口执行者。选型时别只看流行度,要考虑性能、运维成本、云原生符合度和社区活跃度。
  • ingress-nginx即将退役,Gateway API是明确未来方向。新项目直接上Gateway API,存量项目及早规划迁移。
  • Istio Ingress Gateway在服务网格环境下优势巨大——统一治理南北+东西流量、原生多云可观测、超强灰度策略。
  • 灰度发布的最佳实践:借助Ingress Controller自身的canary机制,用很短的变更流程就完成平滑上线,极大降低发布风险。
  • 排查常规三板斧:查Ingress Events、查Controller Pods日志、看最终生成的配置(如nginx.conf) ,80%问题都能解决。

个人强烈建议:中小团队继续用ingress-nginx完成退役前的过渡并准备Gateway API迁移,中等规模以上的企业直接上Istio Ingress Gateway配合Gateway API,这是最省心的长期方案。