Kubernetes Gateway API 深度解析:重塑云原生网络入口的“下一代网关标准”
一、导论:Kubernetes 网络入口的演进之路
1.1 从 Service 到 Ingress:网络入口管理的初步尝试
Kubernetes 的网络入口管理经历了从简单到复杂、从单一到多元的演进过程。这个演进的历史,本质上是对云原生应用日益复杂的流量管理需求不断回应的历史。
第一阶段:Service 原生暴露方式
在 Kubernetes 的早期阶段,将集群内部服务暴露给外部用户主要依靠两种原生的 Service 类型:
-
NodePort:通过在每个节点上打开一个特定端口来暴露服务。这种方式虽然简单直接,但随着集群规模的扩大,其弊端日益凸显——需要维护大量端口,多了一层 NAT 转发,高并发场景下性能明显下降。
-
LoadBalancer:为每个 Service 分配一个独立的云负载均衡器。这种方式在服务数量较少时尚可接受,但当微服务规模扩大到几十甚至上百个时,每个服务一个负载均衡器的成本和复杂度将变得难以承受。
第二阶段:Ingress 的诞生与标准化尝试
为了解决 Service 原生暴露方式的局限性,Kubernetes 社区在 2015 年引入了 Ingress API。Ingress 的核心创新在于引入了一个统一的入口网关概念——通过定义路由规则,将多个服务聚合在同一个外部访问入口之下,大大减少了对外部负载均衡器的需求。
Ingress 资源通过定义 host 和 path 匹配规则,将外部 HTTP/HTTPS 请求路由到集群内的不同 Service,同时支持 TLS 证书配置。这套抽象在当时无疑是革命性的——它第一次为 Kubernetes 提供了标准化的 L7(应用层)流量入口管理方案。
然而,随着微服务架构的普及和流量管理需求的复杂化,Ingress 的设计缺陷开始逐步暴露,为后来的 Gateway API 诞生埋下了伏笔。
1.2 Ingress 的“中年危机”:功能缺失与生态碎片化
Ingress API 自 2015 年进入 Kubernetes 以来,已经服务了社区近十年。然而随着云原生技术的飞速发展,这套 API 的设计局限性愈发明显。Kubernetes 社区已经对 Ingress API 进行了“封冻”,不再为其增加新的功能,转而将精力全部投入到 Gateway API 的开发上。
(1)表达能力有限:80% 的功能要靠注解实现
Ingress 规范本身只能覆盖实际需求的约 20%,剩余 80% 的功能需要依赖各个 Ingress Controller 自定义的 annotation 来实现。这意味着:
-
流量拆分(金丝雀发布)需要通过特定控制器的 annotation 配置
-
基于 Header 的路由无法通过标准 API 表达
-
URL 重写规则因控制器不同而千差万别
-
简单的重定向功能也需要非标准的方式实现
这种“规范不够,注解来凑”的模式导致了严重的生态碎片化问题。Nginx、Traefik、HAProxy、AWS ALB 等不同 Ingress Controller 各有一套自己的 annotation“方言”,同一种功能在不同控制器上的配置方式截然不同。
(2)协议支持单一:只懂 HTTP 的网关
Ingress 的设计初衷仅限于 HTTP/HTTPS 协议,对于现代云原生应用中日益普及的 TCP、UDP、gRPC 协议,Ingress 基本上无能为力。这导致:
-
gRPC 服务需要单独的工具和配置
-
TCP/UDP 工作负载只能通过 Service 的 LoadBalancer 类型独立暴露
-
团队被迫使用多种工具管理不同协议的流量入口,增加了运维复杂度
(3)责任边界模糊:所有权归属不清
在 Ingress 的世界里,一个 Ingress 资源同时包含了基础设施配置(负载均衡器地址、TLS 证书、监听端口)和应用层路由规则(host、path、后端服务)。这带来了一个尴尬的问题:谁才是 Ingress 资源的所有者?
-
基础设施团队负责设置负载均衡器和 TLS 证书
-
应用开发团队负责定义路由路径和后端服务
但两者共享同一个 Ingress 资源对象,导致平台团队和开发团队在同命名空间内互相影响,权限边界模糊,无法建立清晰的治理边界。
(4)跨命名空间路由缺失
Ingress 无法直接引用其他命名空间的 Service,这在多租户环境下是一个严重的限制。团队必须将所有需要暴露的服务部署在同一个命名空间,或者采用复杂的工作绕道方案。
1.3 Gateway API 的诞生背景与“根正苗红”的出身
Gateway API 由 Kubernetes SIG-NETWORK 社区主导开发,从诞生之初就承载着“下一代 Kubernetes 网络入口标准”的使命。它经历了从 Service API 到 Gateway API 的更名,在 Kubernetes 1.18 中作为 alpha 版本首次引入,在 1.26 中核心功能达到 GA(Generally Available),到 1.32 时已完全稳定。
Gateway API 的诞生背景可以概括为以下几个关键驱动力:
驱动力一:Ingress 的先天不足亟待解决
Ingress API 设计于云原生技术尚处于萌芽期的 2015 年,彼时微服务的规模远不如今日之庞大,流量管理的复杂性也远未显现。随着 Kubernetes 成为云原生基础设施的事实标准,Ingress API 的局限性已成为阻碍生产实践的重要瓶颈。Gateway API 正是在这样的背景下应运而生,旨在解决 Ingress 在表达能力、可扩展性和角色分离方面的系统性缺陷。
驱动力二:社区五年协作的智慧结晶
Gateway API 并非一日之功,而是凝聚了 Kubernetes SIG-NETWORK 社区长达五年的设计讨论、原型验证和迭代演进的成果。在此期间,社区广泛吸纳了 Istio、Envoy、Nginx、Traefik 等主流网关项目的实践经验,并邀请各大云厂商和开源项目深度参与设计,确保 API 的通用性和可移植性。
驱动力三:从“应用入口”到“服务网络”的理念升级
如果说 Ingress 关注的是“如何将外部流量引入集群”,那么 Gateway API 关注的则是“如何构建统一的、面向角色的服务网络”。Gateway API 不仅覆盖传统的南北向(North-South)流量(即集群外部到内部的入口流量),还将能力扩展到了东西向(East-West)流量(即集群内部服务间的通信),通过与服务网格的无缝集成,真正实现了网络入口管理的理念升级。
在 Kubernetes 官方文档中,Gateway API 被定义为“一组 API 类别,可提供动态基础设施制备和高级流量路由”。它通过可扩展的、角色导向的、协议感知的配置机制来提供网络服务,涵盖 L4(传输层)和 L7(应用层)路由的全场景需求。
二、Gateway API 核心架构与资源模型
2.1 面向角色的设计哲学
Gateway API 最核心的设计理念之一是 “面向角色”(Role-Oriented) 。这一理念与 Kubernetes 的团队组织架构高度吻合,通过将网络管理职责按照组织角色进行解耦,实现了平台运维与应用开发的安全边界分离。
Gateway API 定义了三个核心角色,每个角色拥有各自专属的资源类型和权限范围:
| 角色名称 | 管理资源 | 权限范围 | 职责说明 |
|---|---|---|---|
| 基础设施提供商(Infrastructure Provider) | GatewayClass | 集群范围 | 定义网关的“模板”或“类别”,如指定使用 Envoy、Nginx 或云厂商的网关控制器 |
| 集群操作员(Cluster Operator) | Gateway | 命名空间范围 | 实例化具体的网关实例,配置监听端口、TLS 证书、IP 地址等网络参数 |
| 应用程序开发人员(Application Developer) | HTTPRoute、GRPCRoute 等 | 命名空间范围 | 定义应用层的路由规则,如基于路径、Header、Host 的流量分发策略 |
权限控制机制的实现方式:所有角色权限均通过 Kubernetes RBAC 实现。GatewayClass 通常由 clusterrole 授予平台团队;Gateway 和 Route 的权限通过命名空间级 role 控制,确保开发人员仅能在其命名空间内操作;跨命名空间的资源引用则需要通过 ReferenceGrant 资源进行显式授权。
这种设计带来的核心价值在于:平台团队可以安全地将网关基础设施暴露给应用团队,而应用团队则可以在无需集群级权限的情况下自主管理自己的路由规则。这在 Ingress 的世界里是难以实现的——因为在 Ingress 中,修改路由规则通常意味着需要同时修改包含负载均衡器配置的同一个资源对象。
2.2 三大核心资源深度解析
Gateway API 的资源模型以三个核心资源类型为支柱,形成了清晰的分层结构:GatewayClass → Gateway → Route。
GatewayClass:网关的“模板”定义
GatewayClass 是一个集群范围的资源,它定义了一组具有相同配置和行为的网关类型。其角色类似于 Kubernetes 中的 StorageClass,但面向的是网络网关而非存储。
yaml
apiVersion: gateway.networking.k8s.io/v1 kind: GatewayClass metadata: name: example-class spec: controllerName: example.com/gateway-controller
GatewayClass 中最重要的字段是 spec.controllerName,它指明了管理此类 Gateway 的控制器的名称。一个实现了 Gateway API 的控制器会监听指定了特定 controllerName 的 GatewayClass,并据此创建和管理相应的网关实例。
在实际生产环境中,基础设施提供商通常会预置多种 GatewayClass,供集群操作员按需选择:
-
istio:基于 Istio 服务网格的网关 -
envoy-gateway:基于 Envoy Gateway 的独立网关 -
aws-alb:基于 AWS ALB 的云负载均衡器 -
nginx-gateway:基于 NGINX 的数据平面
Gateway:网关实例的定义
Gateway 是一个命名空间级别的资源,它描述了一个流量处理基础设施的具体实例,定义了网络端点(如 IP 地址、负载均衡器)、监听器配置(端口、协议、TLS 证书)以及允许挂载的路由类型。
yaml
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: external-gateway
namespace: infra
spec:
gatewayClassName: nginx
listeners:
- name: http
port: 80
protocol: HTTP
- name: https
port: 443
protocol: HTTPS
tls:
mode: Terminate
certificateRefs:
- name: wildcard-tls-cert
namespace: cert-manager
allowedRoutes:
namespaces:
from: Selector
selector:
matchLabels:
gateway-access: allowed
这个配置定义了:
-
该 Gateway 属于
nginx类型的 GatewayClass -
两个监听器分别监听 HTTP(80 端口)和 HTTPS(443 端口)
-
HTTPS 监听器配置了 TLS 证书,采用
Terminate(在网关侧终止)模式 -
仅允许带有
gateway-access: allowed标签的命名空间中的 Route 挂载到此 Gateway
值得注意的是,Gateway 对可以挂载到其上的 Route 具有过滤能力,这构成了一个双向信任模型——Gateway 可以选择信任哪些 Route,而 Route 可以选择挂载到哪个 Gateway。
HTTPRoute:应用层路由的核心
HTTPRoute 是 Gateway API 中使用频率最高的路由资源,它定义了 HTTP 请求如何从 Gateway 路由到后端的 Service。HTTPRoute 支持丰富的匹配条件(路径、Header、查询参数等)和过滤规则(请求重定向、重写、镜像等)。
yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: api-routes
namespace: my-app
spec:
parentRefs:
- name: external-gateway
namespace: infra
sectionName: https
hostnames:
- "api.example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /v2/users
backendRefs:
- name: users-service-v2
port: 8080
weight: 90
- name: users-service-v3
port: 8080
weight: 10
- matches:
- headers:
- type: Exact
name: X-Canary
value: enabled
backendRefs:
- name: canary-service
port: 8080
这个配置展示了 HTTPRoute 的几个关键能力:
-
通过
parentRefs声明挂载到external-gatewayGateway 的https监听器 -
支持多 hostname 匹配
-
支持基于路径的匹配(
/v2/users前缀) -
原生支持流量权重拆分(90% 到 v2,10% 到 v3)——这是 Ingress 中需要依赖 annotation 才能实现的功能
-
支持基于 Header 的精细化路由
2.3 路由类型体系:从 HTTP 到 gRPC 的全协议覆盖
Gateway API 不仅覆盖了 Ingress 支持的 HTTP/HTTPS 协议,还通过多种协议特定的 Route 资源实现了对 L4/L7 全协议的标准化支持。
HTTPRoute:HTTP/1.x、HTTP/2 和 WebSocket 流量的路由管理。支持基于 host、path、header、query 参数的匹配,以及流量拆分、请求重定向/重写、请求镜像等功能。
GRPCRoute:gRPC 流量的专用路由资源。与 HTTPRoute 类似,但增加了对 gRPC 特定属性的支持,如 service 和 method 级别的匹配。
TLSRoute:用于 SNI(Server Name Indication)匹配的非 HTTP TLS 流量的路由。适用于需要 TLS 加密但传输非 HTTP 协议(如数据库协议)的场景。
TCPRoute:L4 TCP 流量的路由管理。适用于非 HTTP 的工作负载,如数据库(MySQL、PostgreSQL)、消息队列(Redis、Kafka)等。
UDPRoute:UDP 流量的路由管理。适用于 DNS、游戏服务器、流媒体等 UDP 场景。
这种多协议的统一管理能力是 Gateway API 区别于 Ingress 的重要特征之一。团队不再需要为不同的协议维护不同的工具和配置方式,一切都通过统一的 Gateway API 资源模型进行声明式管理。
2.4 策略附件与可扩展机制
Gateway API 的可扩展性设计体现在其 策略附件(Policy Attachment) 机制上。通过这一机制,可以在 Gateway API 的各层资源上附加自定义策略,实现细粒度的功能配置。
策略附件的核心优势在于:
-
分层应用:支持全局级、网关级、路由级的多层策略,策略可以继承和覆盖
-
解耦配置:策略资源与核心路由资源分离,便于独立管理和版本控制
-
类型安全:策略本身是结构化的 Kubernetes 资源,支持 API 验证
典型的策略类型包括:
-
认证策略(SecurityPolicy):配置 OIDC、JWT 等认证机制
-
限流策略(RateLimitPolicy):配置基于请求频率的限流规则
-
熔断策略(CircuitBreakerPolicy):配置熔断和健康检查参数
-
超时/重试策略(TimeoutPolicy/RetryPolicy):配置请求超时和重试行为
此外,Gateway API 允许实现方通过 CRD(Custom Resource Definition)引入自定义扩展资源。例如,Envoy Gateway 引入了一系列扩展 CRD,将 Envoy Proxy 的高级功能(如高级限流、认证、流量整形)以 Kubernetes 原生的方式暴露给用户。
三、Gateway API vs Ingress:全方位的代际差异
3.1 能力对比总览:一个表格看清代际差异
Gateway API 与 Ingress 的差异是全方位的,从资源模型到表达能力再到扩展机制,两者存在根本性的设计理念差异。以下对比清晰地展示了两个 API 的代际鸿沟:
| 对比维度 | Ingress | Gateway API | 代际差异说明 |
|---|---|---|---|
| 协议支持 | 仅 HTTP/HTTPS | HTTP/HTTPS/TCP/UDP/TLS/gRPC | Gateway API 覆盖 L4/L7 全场景 |
| 路由匹配能力 | host + path | host + path + header + query param + method | Gateway API 支持多维度精细化路由 |
| 流量拆分 | 需要 controller 特定 annotation | 原生支持 backendRefs 中的 weight 字段 | Gateway API 标准化了金丝雀发布 |
| 请求重定向 | 需要 annotation | 原生 RequestRedirect filter | Gateway API 提供了声明式的请求修改能力 |
| 跨命名空间引用 | 不支持 | 通过 ReferenceGrant 实现 | Gateway API 实现了安全的跨命名空间访问 |
| 角色分离 | 无,单一资源混用 | GatewayClass → Gateway → Route 三层分离 | Gateway API 实现了权责清晰的组织边界 |
| 可扩展性 | 依赖 annotation 和第三方 CRD | 原生策略附件(Policy Attachment)机制 | Gateway API 提供标准化的扩展模式 |
| 类型安全 | 部分(annotation 无类型检查) | 完全类型安全(结构化 API 字段) | Gateway API 配置错误可在 apply 时提前发现 |
| 跨实现可移植性 | 差(annotation 各不相同) | 好(核心功能标准化) | Gateway API 配置可在不同实现间移植 |
最值得关注的差异在于角色分离:Ingress 将基础设施配置和应用层路由混杂在同一个资源对象中,导致所有权归属不清;而 Gateway API 将职责拆分为 GatewayClass(基础设施提供方)、Gateway(集群运维方)和 Route(应用开发方)三层,每层由对应的组织角色独立管理,实现了真正的职责解耦。
另一个关键的差异在于功能的原生支持:Gateway API 原生支持流量拆分、Header 路由等高级功能,这些在 Ingress 中必须依赖 controller 特定的 annotation 来实现。这意味着 Gateway API 的配置在不同实现之间更具可移植性,大大降低了供应商锁定的风险。
3.2 典型场景配置对比
场景一:HTTPS 强制重定向
Ingress(使用 Nginx Ingress Controller) 需要通过特定的 annotation 来实现:
yaml
metadata:
annotations:
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
Gateway API 直接在 HTTPRoute 的 filter 中声明式配置:
yaml
rules:
- filters:
- type: RequestRedirect
requestRedirect:
scheme: https
statusCode: 301
Gateway API 的方式更加标准化,不依赖于特定控制器的 annotation。
场景二:基于 Header 的路由
Ingress:通常需要依赖 controller 特定的 annotation 或 CRD,配置方式各不相同,难以跨控制器移植。
Gateway API:原生支持,直接在 HTTPRoute 的 matches 中定义:
yaml
rules:
- matches:
- headers:
- type: Exact
name: X-Canary
value: enabled
backendRefs:
- name: canary-service
port: 8080
场景三:跨命名空间路由
Ingress:无法直接引用其他命名空间的 Service,开发团队不得不将所有需要暴露的服务部署在同一个命名空间。
Gateway API:通过 ReferenceGrant 机制实现安全的跨命名空间引用。应用开发人员在其命名空间的 HTTPRoute 中引用其他命名空间的 Service 时,需要目标命名空间中存在 ReferenceGrant 资源显式授权该引用。
yaml
# 在目标命名空间中创建 ReferenceGrant 授权
apiVersion: gateway.networking.k8s.io/v1beta1
kind: ReferenceGrant
metadata:
name: allow-service-export
namespace: shared-services
spec:
from:
- group: gateway.networking.k8s.io
kind: HTTPRoute
namespace: my-app
to:
- group: ""
kind: Service
四、高级流量管理能力
Gateway API 提供了远比 Ingress 丰富和强大的流量管理能力。以下逐一剖析这些高级特性及其典型应用场景。
4.1 基于 Header 的精细化路由
在现代微服务架构中,仅靠 host 和 path 匹配往往无法满足复杂场景下的流量调度需求。Gateway API 原生支持基于 HTTP Header 的匹配,为 A/B 测试、多环境路由等场景提供了标准化的解决方案。
yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: header-routing
spec:
parentRefs:
- name: external-gateway
rules:
# 用户ID在特定区间的路由到测试版本
- matches:
- headers:
- type: RegularExpression
name: X-User-ID
value: "^[0-9]{3}$"
backendRefs:
- name: beta-service
port: 8080
# 带有特定请求头的请求路由到专用集群
- matches:
- headers:
- type: Exact
name: X-Tenant
value: premium
backendRefs:
- name: premium-service
port: 8080
# 默认路由
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: default-service
port: 8080
支持的 Header 匹配类型包括:Exact(精确匹配)、RegularExpression(正则表达式匹配)。这一能力使得 Gateway API 能够实现真正的“智能路由”,而非简单的路径转发。
4.2 流量拆分与金丝雀发布
流量拆分(Traffic Splitting)是现代云原生应用中保障发布安全的核心能力。在 Ingress 中,金丝雀发布通常需要依赖特定控制器的 annotation(如 Nginx 的 nginx.ingress.kubernetes.io/canary-weight)或独立的第三方 CRD。Gateway API 将其作为原生功能集成在 HTTPRoute 中。
yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: canary-route
spec:
parentRefs:
- name: production-gateway
rules:
- matches:
- path:
type: PathPrefix
value: /api
backendRefs:
- name: app-stable
port: 8080
weight: 90
- name: app-canary
port: 8080
weight: 10
这种声明式的流量拆分方式具有以下优势:
-
标准化:不受特定控制器的限制,配置可在不同实现间移植
-
可视化:权重配置一目了然,便于审查和审计
-
渐进式:可以通过逐步调整 weight 实现渐进式发布,降低风险
4.3 请求镜像与流量复制
请求镜像(Request Mirroring)是将生产流量复制一份发送到测试环境的能力,用于在不影响生产的情况下验证新版本的正确性。Gateway API v1.3.0 引入了基于百分比的请求镜像功能,允许用户指定将多大比例的请求镜像到另一个后端。
yaml
filters:
- type: RequestMirror
requestMirror:
backendRef:
name: test-service
port: 8080
percent: 10 # 镜像 10% 的请求
这一能力对于以下场景尤为实用:
-
新版本验证:在生产流量中复制一部分到新版本,验证功能正确性而不影响真实用户
-
性能测试:将生产请求复制到测试环境,进行真实的负载测试
-
故障排查:复制可疑请求到调试环境,实时分析问题
4.4 超时、重试与熔断策略
Gateway API 通过策略附件机制支持超时、重试和熔断等可靠性策略的配置。
请求超时配置:可以为路由级别的请求设置总体超时时间。
yaml
rules:
- matches:
- path:
type: PathPrefix
value: /api/slow
timeouts:
request: 30s
backendRefs:
- name: slow-service
port: 8080
重试策略:支持配置重试次数、退避时间和重试预算。
yaml
retry:
attempts: 3
backoff: "1s"
budget:
percentage: 20 # 最多 20% 的请求可以重试
重试预算功能在 v1.3.0 中引入,用于限制客户端在服务端点间的重试行为,防止级联故障。
4.5 CORS 配置与跨域请求管理
随着前端应用日益复杂,跨域资源共享(CORS)配置成为网关层常见需求。Gateway API v1.3.0 新增了 CORS 过滤器,简化了跨域配置。
yaml
filters:
- type: CORS
cors:
allowOrigins:
- "https://app.example.com"
- "https://admin.example.com"
allowMethods:
- "GET"
- "POST"
- "PUT"
- "DELETE"
allowHeaders:
- "Authorization"
- "Content-Type"
exposeHeaders:
- "X-Custom-Header"
maxAge: "86400s"
allowCredentials: true
这一原生支持避免了过去需要通过前端应用代码或反向代理层额外配置 CORS 的复杂方案,将跨域管理统一纳入基础设施即代码的范畴。
五、安全能力深度解析
安全性是生产级网关的核心考量。Gateway API 在安全能力的设计上充分考虑了现代云原生环境的安全需求,从 TLS 终止、mTLS 认证到跨命名空间访问控制,构建了多层次的安全防护体系。
5.1 TLS 终止与证书管理
Gateway 资源的 TLS 配置支持 Terminate(在网关侧终止 TLS)和 Passthrough(透传 TLS 到后端)两种模式。证书通过 certificateRefs 引用 Kubernetes Secret 中的 TLS 证书文件。
yaml
listeners:
- name: https
protocol: HTTPS
port: 443
tls:
mode: Terminate
certificateRefs:
- name: example-tls-secret
namespace: cert-manager
options:
"example.com/min-tls-version": "1.3"
在实际生产部署中,通常结合 cert-manager 实现证书的自动化签发和轮换,大幅降低证书管理的运维负担。
5.2 mTLS(双向 TLS)认证
mTLS 是零信任安全架构的核心组件之一。Gateway API 通过 FrontendTLS 配置支持在客户端与网关之间启用 mTLS 认证。在这种模式下,客户端必须提供由信任 CA 签发的有效客户端证书才能访问网关。
前端 mTLS(客户端 → 网关):配置在 Gateway 的 TLS 监听器上,要求客户端提供有效证书。
后端 mTLS(网关 → 后端服务):Gateway API 正在完善后端 mTLS 配置的能力,允许为网关配置客户端证书,用于与后端服务建立 mTLS 连接。这是 GEP-3155 中正在推进的重要特性。
在 Istio 等服务网格环境中,mTLS 通常被配置为网格内服务间通信的默认模式,Gateway API 与 Istio 的集成使得入口流量的 mTLS 策略可以与网格内的安全策略保持一致。
5.3 基于 OIDC 的身份认证与单点登录
Gateway API 的安全策略附件机制支持配置基于 OpenID Connect(OIDC)的身份认证。通过 SecurityPolicy 资源,可以配置 OIDC 提供商信息,实现在网关层的统一身份认证。
典型的 OIDC 认证流程包括:
-
客户端访问受保护资源
-
Gateway 检测到未认证的请求,重定向到 OIDC 提供商的登录页面
-
用户完成认证后,提供商返回授权码
-
Gateway 交换授权码获取 ID Token 和 Access Token
-
Gateway 将用户身份信息通过 Header 传递给后端服务
这一能力使得 Gateway API 不仅是一个流量路由工具,更是一个统一的安全入口层。
5.4 跨命名空间引用与 ReferenceGrant 机制
在多租户 Kubernetes 集群中,跨命名空间的资源引用是一个敏感的安全议题。Gateway API 引入了 ReferenceGrant 资源来解决这一问题。
ReferenceGrant 允许一个命名空间中的资源显式授权另一个命名空间中的资源进行引用。例如,应用团队可以在其命名空间中创建 HTTPRoute,引用基础设施命名空间中的 Gateway 和目标命名空间中的 Service。这种访问必须通过 ReferenceGrant 获得显式授权才能生效。
yaml
# 在目标命名空间(shared-services)中创建 ReferenceGrant
apiVersion: gateway.networking.k8s.io/v1beta1
kind: ReferenceGrant
metadata:
name: allow-httproute-reference
namespace: shared-services
spec:
from:
- group: gateway.networking.k8s.io
kind: HTTPRoute
namespace: app-team-a
to:
- group: ""
kind: Service
name: database-service
这一机制的设计理念是 “默认拒绝,显式授权” ,符合安全领域的最小权限原则,有效防止了跨命名空间的意外或恶意引用。
六、主流实现与生态集成
Gateway API 的繁荣生态是其成功的重要标志。作为一个标准化规范,Gateway API 得到了来自开源社区和云厂商的广泛支持,形成了丰富的实现生态。
6.1 主流实现概览
截至 2026 年,Gateway API 已经获得了几乎所有主流网关项目的支持:
| 实现名称 | 数据平面 | 核心特点 |
|---|---|---|
| Istio | Envoy | 服务网格原生集成,支持完整的 mTLS 和流量治理 |
| Envoy Gateway | Envoy Proxy | 独立网关方案,轻量级,完全遵循 Gateway API 规范 |
| NGINX Gateway Fabric | NGINX | 基于 NGINX 的高性能数据平面,配置灵活 |
| Traefik | Traefik | 100% 符合规范,从 2019 年起深度参与 Gateway API 设计 |
| Cilium | eBPF | 与 CNI 深度集成,零额外控制器部署开销 |
| Kong | NGINX + Lua | 功能丰富的 API 网关,支持丰富的插件生态 |
| Amazon Load Balancer Controller | AWS ALB/NLB | 云托管负载均衡器的 Gateway API 实现 |
| 阿里云 ASM | Envoy | 阿里云服务网格的 Gateway API 实现 |
Envoy Gateway 是 Gateway API 的参考实现,它提供了一个生产级的独立网关解决方案,通过扩展 CRD 暴露 Envoy Proxy 的高级功能,包括限流、认证、流量整形等。
NGINX Gateway Fabric 是 F5 提供的基于 NGINX 数据平面的 Gateway API 实现,其目标是为 Kubernetes 应用配置 HTTP 或 TCP/UDP 负载均衡器、反向代理或 API 网关。
Traefik 从 2019 年 Gateway API 立项之初就积极参与规范设计,并在 2020-2023 年间率先实现 alpha 版本,为规范提供了宝贵的早期反馈。Traefik 实现了 100% 的 Gateway API 一致性,并提供与最新 v1.4 规范的同日支持。
Cilium 的 Gateway 实现与 eBPF CNI 深度集成,在支持 Cilium CNI 的集群中可以实现零额外控制器部署,充分利用 eBPF 的高性能数据平面。
6.2 与服务网格的深度融合:GAMMA 计划
Gateway API 的野心远不止于入口流量管理。通过 GAMMA(Gateway API for Mesh Management and Administration) 计划,Gateway API 将能力延伸到了服务网格领域,统一管理南北向和东西向流量。
GAMMA 计划的核心目标是在最小化对 Gateway API 修改的前提下,定义如何将 Gateway API 用于配置服务网格。其设计原则包括:
-
保持 Gateway API 面向角色的性质
-
使现有的 Gateway API 资源能够在服务网格场景中复用
-
确保服务网格实现之间的一致性
在 GAMMA 框架下,HTTPRoute 可以直接附加到 Service 上,用于控制集群内的东西向(服务间)流量。这意味着一套 API 同时管理入口流量和网格内部流量,大幅降低了用户的学习成本和运维复杂度。
Gateway API 对服务网格的支持已在 v1.1 中正式毕业,进入标准发布渠道。实现了网格支持后,可以使用同样的 API 管理东西向服务间流量,基于 Gateway API 构建的策略也可以在网格中复用。
主流服务网格项目如 Istio、Linkerd 均已提供 Gateway API 的原生支持。在 Azure Kubernetes Service(AKS)和 Red Hat OpenShift 中,Gateway API 已经与 Istio 服务网格紧密集成,为用户提供了标准化的入口流量管理方案。
6.3 多集群流量路由
随着企业逐步将工作负载分布在多个 Kubernetes 集群中(例如多可用区部署、多云策略),多集群流量路由成为关键需求。Gateway API 通过与其他多集群方案(如 Submariner、MCS API)的集成,为多集群场景提供了标准化的流量管理接口。
Envoy Gateway 已经支持使用 ServiceImport 对象(来自 Multicluster Service API)作为 HTTPRoute 的 backendRef,实现跨集群的服务路由。
在多集群环境中,Gateway API 的资源模型提供了以下关键能力:
-
统一入口抽象:跨多个集群的 Gateway 资源提供统一的访问入口
-
跨集群路由:HTTPRoute 可以将流量路由到其他集群中的 Service
-
统一策略管理:安全策略、限流策略等可以在多集群范围内保持一致
6.4 AI 推理扩展:为大模型场景量身定制
随着生成式 AI 和大语言模型(LLM)的爆发式增长,AI 推理服务的流量管理成为新的挑战。Gateway API 通过推理扩展(Inference Extension) 为这一场景提供了标准化解决方案。
Gateway API 推理扩展基于现有的 Gateway API 进行构建,添加了特定于推理的路由能力,包括:
-
基于模型名称的路由:根据请求中的模型名称将流量路由到相应的推理服务
-
推理负载均衡:基于实时模型指标(如请求延迟、GPU 利用率)优化负载均衡
-
灰度发布策略:支持模型版本的渐进式发布和安全回滚
推理扩展引入了两个新的自定义资源:
-
InferencePool:声明和管理一组推理服务工作负载
-
InferenceModel:定义模型的元数据和路由策略
这一扩展无需企业自行拼凑定制解决方案或放弃现有的 Kubernetes 基础设施,而是提供了一种标准化、与供应商无关的智能 AI 流量管理方法。
6.5 可观测性建设:监控、日志与链路追踪
生产级的网关部署离不开完善的可观测性体系。Gateway API 本身是一个规范层面的抽象,具体的可观测性能力由各个实现来提供。然而,Gateway API 的资源模型为标准化可观测性建设提供了良好的基础。
典型的可观测性实践包括:
指标采集:Prometheus 可采集各个实现暴露的标准指标,包括请求总数、请求延迟分布、错误率、活跃连接数等。社区正在推进 Gateway API 层面的指标标准化的相关工作。
访问日志:各实现支持配置访问日志的输出格式和目标(stdout、文件、外部日志系统)。建议采用结构化日志(JSON 格式)以便于日志系统解析和查询。
分布式追踪:Gateway 作为流量入口,是分布式追踪的“根节点”。通过配置追踪上下文传播(如 W3C Trace Context),可以实现从网关到后端服务的全链路追踪。
在 Giant Swarm 等生产级平台实践中,团队已经在帮助客户将路由逻辑与 GitOps 工作流集成,确保路由配置可以被测试、自动化和安全地委托给应用团队。
七、生产环境实战与迁移指南
7.1 5 分钟快速部署指南
以下步骤演示如何在 Kubernetes 集群中快速部署 Gateway API 并进行基础验证。
前置条件:
-
Kubernetes 集群版本 ≥ 1.24
-
具有集群管理员权限
-
已安装 kubectl
步骤一:安装 Gateway API CRD
Gateway API 的 CRD 需要通过 Kubernetes 集群的 addon 机制进行安装:
bash
# 安装标准版本的 CRD(包含 GA 资源) kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/standard-install.yaml # 如需使用实验性特性,可额外安装 experimental-install.yaml kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/experimental-install.yaml
步骤二:安装 Gateway Controller
选择一种 Gateway 实现进行安装。以 Envoy Gateway 为例:
bash
helm install eg oci://docker.io/envoyproxy/gateway-helm --version v1.2.0 -n envoy-gateway-system --create-namespace
步骤三:创建 GatewayClass
yaml
apiVersion: gateway.networking.k8s.io/v1 kind: GatewayClass metadata: name: envoy spec: controllerName: gateway.envoyproxy.io/gatewayclass-controller
bash
kubectl apply -f gatewayclass.yaml
步骤四:创建 Gateway 实例
yaml
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: my-gateway
namespace: default
spec:
gatewayClassName: envoy
listeners:
- name: http
protocol: HTTP
port: 80
步骤五:创建 HTTPRoute 暴露服务
yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: my-route
namespace: default
spec:
parentRefs:
- name: my-gateway
hostnames:
- "app.example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: my-service
port: 8080
验证:获取 Gateway 的外部 IP 地址或主机名后,即可通过配置的 hostname 访问应用。
7.2 从 Ingress-NGINX 迁移的背景与时机
2025 年 11 月,Kubernetes 网络和安全响应委员会官方宣布:Ingress-NGINX 项目将退役,维护期将持续至 2026 年 3 月。2026 年 3 月后,该项目将不再有进一步的发布、缺陷修复或安全更新。
这一公告对整个 Kubernetes 生态产生了深远影响。Ingress-NGINX 是 Kubernetes 生态中使用最广泛的 Ingress Controller 之一,许多 Kubernetes 发行版将其作为默认的 Ingress Controller。
需要明确的是:Ingress-NGINX 作为一个 Ingress Controller 的退役,并不代表 Ingress API 的废弃。Ingress API 是已经进入 GA 的稳定 API,Kubernetes 社区并不会将其移除。然而,这一事件释放了一个明确的信号:社区的重心已经全面转向 Gateway API。
对于仍在生产环境中使用 Ingress-NGINX 的组织,有两种主要方案可供选择:
-
迁移到其他 Ingress Controller(继续使用 Ingress API)
-
只需替换 annotation,迁移难度较低
-
适合短期快速迁移
-
但依然受限于 Ingress API 固有的表达能力限制
-
-
转向使用 Gateway API(推荐)
-
迁移难度相对高一些,但更贴合未来技术发展方向
-
获得更丰富的流量管理能力和更好的可移植性
-
Kubernetes 官方建议的迁移时机是“尽早规划、稳步实施”,以避免在 2026 年 3 月截止日期临近时陷入被动应对的困境。
7.3 基于 ingress2gateway 的七步迁移路径
社区提供了 ingress2gateway 工具来辅助从 Ingress 到 Gateway API 的迁移。以下是一个七步迁移路径:
步骤一:评估现有配置
盘点所有使用 Ingress-NGINX 的命名空间和 Ingress 资源,识别使用的 annotation 类型及其对应的功能。可以使用 kubectl get ingress --all-namespaces 获取清单。
步骤二:安装目标 Gateway Controller
根据需求选择合适的 Gateway 实现(如 Envoy Gateway、AWS Load Balancer Controller、Cilium Gateway 等),并在集群中部署。
步骤三:配置 GatewayClass 和 Gateway
创建 GatewayClass 定义控制器类型,然后创建 Gateway 实例,配置监听端口和 TLS 证书等基础设施参数。
步骤四:使用 ingress2gateway 转换配置
bash
# 导出现有 Ingress 配置并转换为 Gateway API 格式 kubectl get ingress -A -o yaml > all-ingress.yaml ingress2gateway --input all-ingress.yaml --output gateway-resources.yaml
步骤五:审查和调整转换结果
ingress2gateway 工具可以处理大部分常见的 Ingress annotation 转换,但某些 controller 特定 annotation 需要手动调整。建议对比转换前后的配置,确保逻辑正确。
步骤六:验证新配置
在测试环境中部署转换后的 Gateway API 配置,使用 curl 或类似工具验证路由行为的正确性。
步骤七:DNS 切换和流量割接
通过 DNS 加权路由实现零停机迁移,逐步将流量从旧 Ingress 切换到新 Gateway,完成后清理旧的 Ingress 资源。
7.4 典型迁移场景配置示例
以下展示几个典型场景的 Ingress 到 Gateway API 的迁移示例。
场景一:基础 HTTP 转发
Ingress 配置:
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: basic-ingress
spec:
rules:
- host: api.example.com
http:
paths:
- path: /users
pathType: Prefix
backend:
service:
name: users-service
port:
number: 8080
Gateway API 等效配置:
yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: basic-route
spec:
parentRefs:
- name: shared-gateway
hostnames:
- "api.example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /users
backendRefs:
- name: users-service
port: 8080
场景二:金丝雀发布(流量拆分)
在 Ingress 中,金丝雀发布需要特定 controller 的 annotation(如 Nginx 的 nginx.ingress.kubernetes.io/canary 相关 annotation)。在 Gateway API 中,直接使用 backendRefs 的 weight 字段即可实现。
yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: canary-route
spec:
rules:
- backendRefs:
- name: app-stable
port: 8080
weight: 90
- name: app-canary
port: 8080
weight: 10
场景三:URL 重写
Ingress 中 URL 重写依赖 controller 特定 annotation(如 Nginx 的 rewrite-target)。Gateway API 通过 URLRewrite filter 实现标准化的重写配置:
yaml
filters:
- type: URLRewrite
urlRewrite:
path:
type: ReplacePrefixMatch
replacePrefixMatch: /
7.5 零停机迁移策略
从 Ingress-NGINX 到 Gateway API 的零停机迁移可以通过以下策略实现:
策略一:并行运行 + DNS 加权路由
-
在新命名空间或新集群部署 Gateway API 配置
-
通过 DNS 加权路由(如 AWS Route 53 的 Weighted Records)将一小部分流量(例如 5%)指向新 Gateway
-
监控错误率和性能指标
-
逐步增加新 Gateway 的权重
-
确认稳定后,将所有流量切换到新 Gateway
策略二:Header 注入式路由
-
在负载均衡器层配置基于特定 Header 的路由规则
-
通过配置管理工具逐步为请求注入
X-Routing: gateway-apiHeader -
使用 Header 匹配将带有该 Header 的请求路由到新 Gateway
-
逐步增加注入 Header 的请求比例
这两种策略的核心原则是渐进式切换 + 快速回滚能力,确保在任何异常发生时可以立即切回原有配置,将对生产业务的影响降到最低。
八、版本演进与未来展望
8.1 Gateway API 版本演进历史
Gateway API 的演进历程清晰地反映了其逐步成熟的过程:
| 版本 | Kubernetes 版本 | 关键里程碑 |
|---|---|---|
| v1alpha1 | 1.18 | 首次引入 Gateway API 概念 |
| v1alpha2 | 1.19-1.20 | 资源模型逐步完善 |
| v1beta1 | 1.21-1.25 | API 进入 beta 阶段,稳定性提升 |
| v1.0 / v1 | 1.26 | 核心资源(GatewayClass、Gateway、HTTPRoute)达到 GA |
| v1.1 | 1.27-1.28 | 服务网格支持(GAMMA)正式毕业 |
| v1.2 | 1.29-1.30 | 扩展功能逐步稳定 |
| v1.3 | 1.31-1.32 | 引入请求镜像、CORS 过滤、重试预算等高级特性 |
在 Kubernetes 1.32 中,Gateway API 已经达到完全稳定,Kubernetes 社区将其定位为网络流量管理的标准接口。
8.2 v1.2 / v1.3 新特性解读
v1.3 版本的核心新特性:
-
基于百分比的请求镜像:允许将指定百分比的请求镜像到另一个后端,对测试和监控场景极为实用
-
CORS 过滤器:原生支持跨域资源共享配置,简化前端应用部署
-
重试预算控制:限制客户端在服务端点间的重试行为,防止级联故障,最多允许 20% 的请求触发重试
v1.2 版本的核心新特性:
-
GRPCRoute 正式毕业:gRPC 专用路由达到 GA 级别
-
BackendTLSPolicy 引入:支持为后端连接配置 TLS 策略
-
ReferenceGrant 完善:跨命名空间引用机制更加成熟
8.3 未来路线图与趋势展望
展望 Gateway API 的未来发展,以下几个趋势值得关注:
趋势一:Gateway API 成为 Kubernetes 网络的事实标准
随着 Ingress-NGINX 在 2026 年 3 月退役,以及各大云厂商和开源项目全面拥抱 Gateway API,Gateway API 正在迅速成为 Kubernetes 网络流量管理的统一标准。根据目前的生态发展态势,预计未来 2-3 年内,Gateway API 将完全取代 Ingress 成为 Kubernetes 网络入口的默认选择。
趋势二:与服务网格的深度融合
GAMMA 计划将持续深化 Gateway API 与服务网格的集成。未来,同一套 Gateway API 配置将能够同时管理南北向和东西向流量,真正实现“一次学习、处处可用”的目标。服务网格的复杂配置将逐渐被 Gateway API 的简洁抽象所取代。
趋势三:AI 工作负载的特殊优化
随着生成式 AI 的普及,Gateway API 推理扩展将得到持续增强。未来的版本可能会引入更多 AI 感知的路由特性,如基于模型准确率的动态路由、基于 GPU 利用率的负载均衡、模型版本的 A/B 测试等。
趋势四:可观测性标准化
社区正在推动 Gateway API 层面的可观测性标准化工作,未来版本可能会定义标准的指标、日志和追踪的 API 规范,使得在不同实现之间获得一致的可观测性体验。
趋势五:多集群能力的标准化
随着企业跨集群部署的普及,Gateway API 的多集群能力将逐步标准化。ServiceImport/ServiceExport 模式与 Gateway API 的深度集成将是重要的发展方向。
九、总结与建议
9.1 核心优势总结
经过以上的系统分析,Kubernetes Gateway API 的核心优势可以归结为以下四点:
第一,面向角色的资源模型。 Gateway API 通过 GatewayClass、Gateway、HTTPRoute 三层资源抽象,清晰划分了基础设施提供方、集群运维方和应用开发方的职责边界,实现了真正的权限分离和团队协作解耦。
第二,丰富的协议支持与表达能力。 相比 Ingress 仅支持 HTTP/HTTPS 的限制,Gateway API 原生支持 HTTP、HTTPS、TCP、UDP、TLS、gRPC 等多种协议,并提供了基于 Header、查询参数、流量权重等高级路由能力。
第三,标准化的可扩展性。 Gateway API 的策略附件机制和 CRD 扩展能力,使得用户可以以标准化的方式为网关附加认证、限流、熔断等高级功能,避免了 Ingress 时代 annotation 满天飞的碎片化问题。
第四,蓬勃发展的生态系统。 Istio、Envoy、NGINX、Traefik、Cilium、各大云厂商等主流实现均已全面支持 Gateway API,同时 GAMMA 计划和推理扩展正在将 Gateway API 的适用范围扩展到服务网格和 AI 推理等新兴领域。
9.2 采用建议与决策指南
基于对 Gateway API 的深入分析,我们为不同阶段的组织提供以下采用建议:
对新项目的建议:如果正在启动新的 Kubernetes 项目或新建集群,强烈建议直接采用 Gateway API 作为网络入口管理方案。传统 Ingress 已进入功能封冻状态,而 Gateway API 代表着 Kubernetes 网络的未来方向。即使短期内使用较简单的配置,Gateway API 的清晰资源模型和标准化配置也为未来的扩展留下了充足的空间。
对现有 Ingress 用户的建议:对于已经大规模使用 Ingress 的组织,建议分阶段、有规划地进行迁移,而非急于一次性完成。具体的迁移路线图建议为:
-
阶段一(评估与准备) :盘点现有 Ingress 配置的复杂度,识别关键路由规则和使用的 annotation,评估目标 Gateway 实现的适配程度
-
阶段二(非生产环境验证) :在测试或预发环境中部署 Gateway API,验证迁移方案的可行性
-
阶段三(渐进式生产迁移) :采用 DNS 加权路由或 Header 注入等零停机策略,逐步将流量切换到 Gateway API
-
阶段四(清理与标准化) :确认新 Gateway 配置稳定运行后,清理旧的 Ingress 资源,将配置规范纳入 GitOps 工作流
对云平台用户的建议:如果使用云厂商的托管 Kubernetes 服务(如 EKS、AKS、GKE),建议优先使用云厂商提供的 Gateway API 实现。这些实现通常与云平台的负载均衡器、证书管理、安全策略等服务深度集成,可以最大化发挥 Gateway API 的云原生优势。
对服务网格用户的建议:如果已经在使用 Istio 或 Linkerd 等服务网格,Gateway API 提供了统一管理入口流量和网格内部流量的标准化方案。通过 GAMMA 计划,可以逐步从传统的 Istio Gateway 迁移到 Gateway API,实现南北向和东西向配置的统一。
对 AI 平台构建者的建议:如果正在构建基于 Kubernetes 的大语言模型推理平台,Gateway API 推理扩展值得重点关注。它为 AI 推理服务提供了标准化的流量管理方案,避免了在多个模型和版本之间维护复杂路由逻辑的运维负担。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)