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 的典型流量链与角色分离关系:

Gateway API 核心资源与流量链 Gateway listeners: 80, 443 gatewayClassName: istio HTTPRoute parentRefs: gateway rules: match + backend Service selector: app=myapp ports: 8080 基础设施管理员 应用开发者 / 服务所有者 应用开发者 流量链说明 客户端 → Gateway(监听端口)→ HTTPRoute(路由规则)→ Service(后端负载)→ Pod 角色分离:基础设施管理员只管理 Gateway,应用开发者只管理 HTTPRoute 和 Service

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 的灰度路由模型:

Gateway API 灰度路由模型(权重 + Header) 客户端请求 Gateway HTTPRoute: 稳定版 (weight: 90) HTTPRoute: 灰度版 (weight: 10) Service: myapp-stable Service: myapp-canary Header: X-Canary: true 可强制灰度