3. Gateway API 概述:起源、核心资源与传统 Ingress 对比
在云原生网关演进中,Kubernetes 社区逐步意识到 Ingress v1 在表达能力、多团队协作、协议扩展和流量治理方面的局限性。Gateway API(原 Service API)应运而生,旨在提供一种角色化、可扩展、面向服务网格的新一代网关标准。本章从起源、核心资源模型和与传统 Ingress 的差异三个维度展开。
3.1 Gateway API 的起源与设计目标
Gateway API 由 SIG-Network 于 2020 年发起,v1beta1 在 2022 年发布,v1(GA)于 2023 年正式发布。其核心设计目标包括:
- 角色分离:将基础设施管理员、集群管理员、应用开发者的职责解耦,通过不同资源对象控制各自关注的部分。
- 跨 namespace 路由:支持 Gateway 与 HTTPRoute 分属不同 namespace,实现南北向流量的集中管控与分布式声明。
- 协议扩展:原生支持 HTTP、HTTPS、gRPC、TCP、TLS 等协议,并通过 Route 资源族(HTTPRoute、TCPRoute、TLSRoute、UDPRoute)实现协议级路由。
- 后端网格感知:与 Service Mesh(如 Istio、Linkerd)深度集成,支持权重、Header、镜像等高级流量治理。
关键里程碑:Gateway API v1 在 Kubernetes 1.27 中进入 GA,标志着其生产就绪。目前主流 Ingress Controller(如 Istio、Traefik、Kong、Nginx Gateway Fabric)均已支持。
3.2 核心资源模型
Gateway API 定义了三个核心资源,形成“Gateway → HTTPRoute → Service”的流量链:
| 资源名称 | 角色 | 核心字段 | 典型职责 |
|---|---|---|---|
| Gateway | 基础设施管理员 | listeners(端口、协议、TLS)、gatewayClassName | 定义监听端点、证书、网络策略 |
| HTTPRoute | 应用开发者 / 服务所有者 | parentRefs(关联 Gateway)、rules(匹配条件、后端权重、过滤器) | 声明路由规则、灰度、重定向、Header 修改 |
| Service | 应用开发者 | selector、ports、type | 后端 Pod 负载均衡与网络抽象 |
以下 SVG 展示了 Gateway API 的典型流量链与角色分离关系:
3.3 与传统 Ingress 的对比
Ingress v1 在简单场景下够用,但在多团队、多协议、灰度发布等场景中暴露出明显短板。下表从 8 个关键维度进行对比:
| 对比维度 | Ingress v1 | Gateway API |
|---|---|---|
| 角色模型 | 单一资源,无角色分离 | Gateway / Route / Service 三层角色分离 |
| 协议支持 | 仅 HTTP/HTTPS(标准) | HTTP、HTTPS、gRPC、TCP、TLS、UDP |
| 跨 namespace 路由 | 不支持(需 Ingress Controller 扩展) | 原生支持,Gateway 与 Route 可跨 namespace |
| 流量治理 | 仅权重(annotation 方式) | 权重、Header 匹配、镜像、重定向、过滤器链 |
| 灰度发布 | 需自定义 annotation,无标准 | HTTPRoute 原生支持权重 + Header 灰度 |
| TLS 配置 | Secret 绑定到 Ingress | Gateway 统一管理 TLS,Route 可引用 |
| 扩展性 | 依赖 annotation,无标准扩展点 | Policy Attachment、BackendTLSPolicy 等扩展机制 |
| 服务网格集成 | 弱(需额外 CRD) | 强(与 Istio、Linkerd 原生对齐) |
迁移建议:对于新建集群或灰度发布需求强烈的项目,建议直接采用 Gateway API。对于存量 Ingress,可通过 Gateway API 的
ConversionWebhook 或 Ingress 兼容模式逐步迁移。
3.4 Gateway API 的灰度发布能力预览
作为本课程的核心场景,Gateway API 在灰度验证方面提供了标准化的声明式能力:
- 权重路由:在 HTTPRoute 的
rules.backendRefs中直接设置weight字段,无需 annotation。 - Header 匹配:通过
matches.headers实现基于用户标识、版本号、区域等条件的灰度。 - 过滤器链:支持
RequestHeaderModifier、ResponseHeaderModifier、URLRewrite等,实现灰度过程中的流量染色。 - 回滚护栏:结合
status条件和Admission Webhook,可在灰度流量异常时自动阻断或回退。
以下 SVG 展示了 Gateway API 中基于权重 + Header 的灰度路由模型: