4. Gateway API 与 Ingress 对比:功能差异、表达能力、安全性、多团队协作、生态支持对比分析
Kubernetes 社区在 1.19 版本将 Ingress 资源标记为稳定(GA),但其设计局限在云原生网关快速演进的背景下日益凸显。Gateway API 作为下一代入口流量管理标准,在功能、表达能力、安全模型、多团队协作和生态支持五个维度上对 Ingress 进行了系统性升级。本章通过结构化对比,帮助架构师理解升级窗口的核心判断依据。
4.1 功能差异对比
Ingress 仅提供基础的 HTTP(S) 路由和 TLS 终止能力,而 Gateway API 将网关生命周期管理、流量拆分、跨命名空间路由等能力纳入标准 API。下表从 12 个关键功能维度进行对比:
| 功能维度 | Ingress (v1) | Gateway API (v1) |
|---|---|---|
| 协议支持 | HTTP/HTTPS 为主,gRPC/TCP 依赖注解 | HTTP、HTTPS、gRPC、TCP、UDP、TLS 原生支持 |
| 流量拆分 | 不支持,需借助第三方 CRD | HTTPRoute 原生支持权重、Header、QueryParam 匹配 |
| 跨命名空间路由 | 不支持,路由规则与后端服务必须在同一命名空间 | 支持跨命名空间引用,通过 ReferenceGrant 授权 |
| 网关生命周期 | 无标准 API,依赖控制器注解 | GatewayClass → Gateway → Route 三层模型,声明式管理 |
| 后端类型 | 仅 Service | Service、Pod、Fargate、外部服务(通过 BackendRef) |
| 请求镜像 | 不支持 | HTTPRoute 原生支持流量镜像 |
| 重定向/重写 | 部分实现依赖注解 | HTTPRouteFilter 原生支持路径重写、Host 重写、重定向 |
| 会话保持 | 不支持 | 通过 BackendLBPolicy 等策略 API 支持 |
| 健康检查 | 依赖后端 Service 实现 | Gateway API 策略可定义主动/被动健康检查 |
| 速率限制 | 不支持 | 通过 RateLimitPolicy 策略 API 支持 |
| 认证鉴权 | 依赖注解或 Sidecar | SecurityPolicy 原生支持 OIDC、JWT、OAuth2 |
| 可观测性 | 无标准指标 | 标准 Status 条件、Metrics 暴露、AccessLog 策略 |
4.2 表达能力对比
Gateway API 在表达能力上的核心提升体现在路由匹配规则、过滤器链和策略扩展三个方面。下图展示了两种 API 在路由规则定义上的表达能力差异:
Gateway API 的匹配规则支持多维组合(Host + Path + Method + Header + Query),而 Ingress 仅支持 Host + Path 的简单匹配。在过滤器方面,Gateway API 定义了标准化的 HTTPRouteFilter 链,支持请求/响应修改、重定向、镜像等操作,而 Ingress 需要依赖实现特定的注解。
- 匹配维度: Ingress 2 维 → Gateway API 5 维(Host/Path/Method/Header/Query)
- 匹配精度: Ingress 仅前缀匹配 → Gateway API 支持 Exact、Prefix、Regex
- 过滤器链: Ingress 无标准 → Gateway API 支持链式组合(重写+重定向+镜像+自定义)
- 后端引用: Ingress 仅 Service → Gateway API 支持 Service/Pod/外部服务/多权重后端
4.3 安全性对比
安全性是 Gateway API 相对于 Ingress 最显著的改进领域。Ingress 的安全配置分散在注解、TLS Secret 和外部工具中,而 Gateway API 通过策略 API 和细粒度授权模型实现了安全能力的标准化。
4.3.1 安全模型对比
| 安全维度 | Ingress 实现方式 | Gateway API 实现方式 |
|---|---|---|
| TLS 管理 | Secret 引用,不支持 SNI 多证书 | Gateway 监听器支持 SNI、TLS 版本、密码套件配置 |
| 认证鉴权 | 依赖注解(如 nginx.ingress.kubernetes.io/auth-url) | SecurityPolicy 原生支持 OIDC、JWT、OAuth2、BasicAuth |
| 跨命名空间安全 | 无控制,默认允许或拒绝 | ReferenceGrant 显式授权,最小权限原则 |
| 速率限制 | 依赖注解,实现不统一 | RateLimitPolicy 标准化配置,支持全局/路由级限制 |
| IP 白名单 | 依赖注解 | SecurityPolicy 原生支持 CIDR 白名单/黑名单 |
| CORS | 依赖注解 | HTTPRouteFilter 原生支持 CORS 配置 |
| 安全审计 | 无标准 | AccessLogPolicy 标准化日志格式和采样率 |
4.3.2 安全策略分层模型
Gateway API 的安全策略采用分层附加模型,允许不同角色在各自范围内定义安全规则:
nginx.ingress.kubernetes.io/auth-url)需要转换为对应的 SecurityPolicy 资源。建议先使用 Gateway API 的 BackendTLSPolicy 管理后端 TLS,再逐步迁移认证和速率限制策略。
4.4 多团队协作对比
多团队协作是 Gateway API 相对于 Ingress 最突出的设计优势。Ingress 的扁平化模型导致团队间权限边界模糊,而 Gateway API 通过角色分离和命名空间隔离实现了清晰的协作模型。
4.4.1 角色模型对比
| 角色 | Ingress 模型 | Gateway API 模型 |
|---|---|---|
| 基础设施团队 | 管理 Ingress Controller 部署,但无法限制路由创建 | 管理 GatewayClass 和 Gateway,控制监听器端口、TLS 证书 |
| 平台团队 | 无明确角色,通常通过 RBAC 限制 Ingress 创建 | 管理 Gateway 和 Namespace 级别的策略,定义路由准入规则 |
| 应用团队 | 直接创建 Ingress,可能覆盖其他团队的路由 | 仅能创建 HTTPRoute/TCPRoute,且必须引用已授权的 Gateway |
| 安全团队 | 无独立角色,安全配置分散在 Ingress 注解中 | 管理 SecurityPolicy,独立于路由资源,可全局审计 |
4.4.2 跨命名空间协作流程
Gateway API 通过 ReferenceGrant 机制实现安全的跨命名空间路由,解决了 Ingress 中跨命名空间引用无法标准化的问题:
- 基础设施团队 定义 GatewayClass 和 Gateway,控制监听器端口和 TLS 证书,不参与路由细节
- 平台团队 通过
ReferenceGrant控制哪些命名空间可以引用共享 Gateway - 应用团队 仅需关注 HTTPRoute 定义,无需关心网关基础设施
- 安全团队 通过 SecurityPolicy 独立管理安全策略,与路由解耦
4.5 生态支持对比
生态支持是技术选型的重要考量因素。Ingress 经过多年发展拥有广泛的实现,但 Gateway API 作为 CNCF 孵化项目,生态支持正在快速追赶并超越。
4.5.1 实现支持对比
| 实现 | Ingress 支持 | Gateway API 支持 | 备注 |
|---|---|---|---|
| nginx-ingress | ✅ 成熟稳定 | ✅ v1.0+ 实验性支持 | 社区版支持有限,企业版更完善 |
| Istio | ✅ 支持 | ✅ 原生支持,推荐使用 | Istio 1.16+ 默认使用 Gateway API |
| Contour | ✅ 支持 | ✅ 原生支持,早期采用者 | Contour 是 Gateway API 的主要贡献者 |
| Kong | ✅ 支持 | ✅ v2.0+ 支持 | Kong Gateway Operator 支持 |
| Traefik | ✅ 支持 | ✅ v2.5+ 实验性支持 | CRD 方式支持 |
| AWS ALB Ingress | ✅ 支持 | ⚠️ 部分支持 | AWS 提供 VPC Lattice 集成 |
| GKE Ingress | ✅ 支持 | ✅ GKE Gateway Controller | Google Cloud 原生支持 |
| Azure Application Gateway | ✅ 支持 | ⚠️ 预览阶段 | AGIC 逐步迁移 |
4.5.2 社区与标准化进展
Gateway API 的生态发展速度显著快于 Ingress 同期:
- CNCF 状态: Ingress 为 Kubernetes 内置资源,Gateway API 为 CNCF 孵化项目(SIG-NETWORK 管理)
- 版本迭代: Gateway API v1.0(2023年10月)已发布稳定版,v1.1 增加 TCPRoute/UDPRoute 稳定支持
- 贡献者规模: Gateway API 拥有 400+ 贡献者,来自 Google、Red Hat、Istio、Contour 等核心团队
- 扩展机制: Gateway API 通过 Policy Attachment 和 Custom Route 实现标准化扩展,Ingress 依赖非标准注解
- 工具链支持: kubectl、kustomize、Helm、ArgoCD 均已支持 Gateway API 资源
- 新项目: 优先选择 Gateway API 原生支持的服务网格(Istio)或 API 网关(Contour、Kong)
- 存量 Ingress: 评估现有注解使用量,制定分阶段迁移计划,优先迁移流量拆分和跨命名空间路由场景
- 云厂商: GKE 和 AWS 已提供成熟的 Gateway API 实现,Azure 和阿里云正在跟进
4.6 对比总结与升级决策矩阵
基于以上五个维度的对比分析,以下决策矩阵帮助架构师判断是否以及何时升级到 Gateway API:
| 评估维度 | 建议继续使用 Ingress | 建议升级到 Gateway API |
|---|---|---|
| 路由复杂度 | 仅需 host + path 简单路由 | 需要多维匹配、流量拆分、请求镜像 |
| 团队规模 | 单团队,无跨命名空间需求 | 多团队协作,需要角色分离和权限控制 |
| 安全需求 | 基础 TLS,无复杂认证 | OIDC/JWT 认证、速率限制、IP 白名单 |
| 协议需求 | 仅 HTTP/HTTPS | gRPC、TCP、UDP、TLS 多协议 |
| 云原生成熟度 | 传统部署,无服务网格 | 服务网格、GitOps、声明式基础设施 |
| 迁移成本 | 注解依赖少,路由规则简单 | 注解依赖多,需要重构安全策略 |