1. Gateway API 概述

什么是 Gateway API

Gateway API 是 Kubernetes 社区在 2020 年启动的下一代入口流量管理规范,由 SIG-NETWORK 主导设计,旨在替代和超越传统的 Ingress API。它不是一个单一的 CRD,而是一组可组合的、面向角色的资源模型,核心资源包括:

  • GatewayClass — 定义网关的“类”,类似 StorageClass,描述由哪个控制器实现(如 Istio、Contour、Nginx Gateway Fabric)。
  • Gateway — 描述具体的网关实例,绑定监听端口、协议、TLS 配置,并关联到 GatewayClass。
  • HTTPRoute — 核心路由规则,定义 HTTP 请求的匹配条件(路径、Header、Query 参数)和后端转发目标。
  • ReferenceGrant — 跨命名空间授权机制,允许路由引用其他命名空间的后端服务。
关键认知:Gateway API 将“基础设施配置”与“应用路由配置”解耦。平台管理员管理 GatewayClass 和 Gateway,应用开发者只管理 HTTPRoute,职责清晰,权限可控。

与传统 Ingress 的区别

传统 Ingress API(networking.k8s.io/v1)自 Kubernetes 1.19 进入稳定版,但在生产实践中暴露出多个结构性缺陷。下表从六个维度对比两者的核心差异:

对比维度 传统 Ingress Gateway API
资源模型 单一资源,所有规则平铺 分层资源(GatewayClass → Gateway → Route),职责分离
角色划分 无角色概念,运维与开发共用同一资源 面向角色:平台管理员、集群管理员、应用开发者各司其职
协议支持 仅 HTTP/HTTPS,扩展需注解 原生支持 HTTP、HTTPS、TCP、UDP、gRPC、TLS 直通
跨命名空间 默认不支持,需注解或自定义方案 通过 ReferenceGrant 显式授权,安全可控
流量分割 无原生支持,依赖注解或第三方 CRD 原生支持权重路由、Header 匹配、镜像流量
扩展性 通过注解扩展,无类型安全 通过 Policy Attachment 机制,类型安全且可组合
迁移建议:如果当前集群使用 Nginx Ingress Controller 且路由规则简单,可继续使用 Ingress。若涉及多协议、跨命名空间、灰度发布或精细流量治理,应优先评估 Gateway API。

Gateway API 的核心优势

Gateway API 的设计哲学围绕 可组合性、角色分离 和 可移植性 展开,具体优势如下:

  1. 面向角色的资源模型 — 每个角色只操作自己职责范围内的资源,减少误操作风险。平台管理员定义 GatewayClass,集群管理员部署 Gateway,应用开发者编写 HTTPRoute。
  2. 原生多协议支持 — 不再局限于 HTTP/HTTPS,通过 Route 类型扩展支持 TCPRoute、UDPRoute、TLSRoute、GRPCRoute,覆盖南北向和东西向流量。
  3. 强类型与声明式 — 所有字段都是结构化 Schema,无需注解字符串拼凑,IDE 自动补全、CRD 校验、控制器准入控制均能提前拦截错误。
  4. 跨命名空间安全引用 — ReferenceGrant 提供显式授权模型,避免 Ingress 中“跨命名空间引用”的安全漏洞。
  5. 流量治理原生内置 — 权重路由、请求镜像、超时、重试、健康检查等能力直接定义在 Route 资源中,无需额外 CRD 或注解。
  6. 可移植性 — 规范由社区统一维护,不同实现(Istio、Contour、Nginx、Traefik)遵循同一资源模型,迁移成本大幅降低。
Gateway API 核心资源模型与角色关系 平台管理员 集群管理员 应用开发者 GatewayClass 定义网关实现类型 Gateway 监听端口、协议、TLS HTTPRoute 匹配规则 + 后端转发 核心设计原则 • 角色分离:每个角色只操作自己职责范围内的资源,减少误操作风险 • 可组合性:GatewayClass → Gateway → Route 分层组合,灵活扩展 • 跨命名空间安全:ReferenceGrant 显式授权,避免安全漏洞 • 可移植性:同一资源模型可在不同实现(Istio/Contour/Nginx)间迁移
注意:Gateway API 目前处于 GA 阶段(v1.0+),但不同控制器的实现成熟度存在差异。生产环境选型时,请确认目标控制器对 HTTPRoute、TLSRoute、ReferenceGrant 等资源的支持状态。