Gateway API 是 Kubernetes 社区定义的新一代流量路由标准,API 网关已支持该标准。本文介绍如何通过 API 网关开启 Gateway API 能力,并通过声明式的 Gateway 和 HTTPRoute 资源将集群内服务暴露给外部用户进行访问。
说明
【邀测·申请试用】:该功能目前处于邀测阶段,如需使用,请联系您的客户经理。
Gateway API 是由 Kubernetes SIG-Network 社区主导的下一代服务网络路由规范,为集群流量治理提供了标准化、可扩展且面向角色分离的声明式接口。与传统 Ingress API 相比,Gateway API 引入了更精细的资源层级模型,将基础设施管理者(GatewayClass)、集群运维人员(Gateway)和应用开发者(HTTPRoute)的职责清晰分离,同时原生支持多协议、多租户、流量权重、Header 匹配等高级路由能力。
API 网关已全面兼容 Kubernetes Gateway API 标准。您只需在容器集群中创建符合规范的 Gateway 和 HTTPRoute 等资源,API 网关即可自动完成配置同步与路由下发,实现从声明式定义到流量转发。API 网关当前支持的资源如下。
- 已创建容器服务(VKE)集群,版本在 v1.24 及以上。具体操作,请参见 创建集群。
- 在左侧导航栏 实例管理 下拉框中选择目标实例后,单击 容器集群接入。
- 在导入集群页面,选择需要导入的集群,在 Gateway API 同步 区域,根据需要配置 Gateway Class 和 命名空间,目前仅支持配置一种 Gateway Class 类型,然后单击 确定。
-
您需要先完成 VKE 集群和 kubectl 的连接后,通过 kubectl 客户端执行下述及后续操作。具体操作,请参见 使用 kubectl 连接集群。 执行以下命令,为您的容器集群安装 Gateway API CRD,若您的集群中已安装,请跳过该步骤。
说明
当前网关兼容的 Gateway API CRD 最高版本为 v1.4.0,上述命令以 Gateway API CRD 的 v.1.4.0 版本为示例,并非强制使用该版本。
- 创建nginx-demo.yaml文件,内容如下。
- 预期结果如下,STATUS状态显示为Running时表示应用正在运行中。
- 自定义 GatewayClass,创建gatewayclass.yaml文件。
- 创建gateway.yaml文件配置 Gateway 和路由,内容如下。
说明
- 当backendRefs指向 Inference Service 对应的后端时,控制器会按照当前 watch 逻辑将其翻译为 APIG 侧容器类型 Upstream。HTTPRoute 的权重、match 条件仍按 Gateway API 语义处理;数据面能力由 APIG Route 和容器类型 Upstream 共同承载。
- 执行以下命令,部署 Gateway 和路由规则。
- 等待约 2 分钟后,执行以下命令,确认 Gateway 状态。
- 预期结果如下,PROGRAMMED状态显示为True时表示 Gateway 已就绪。
- 在左侧导航栏 实例管理 下拉框中选择目标实例后,单击 路由列表,如果列表中包含在容器侧创建的 Gateway API 路由,说明路由已被正确监听。
- 在左侧导航栏 实例管理 下拉框中选择目标实例后,单击 实例概览。
- 执行以下命令访问应用,执行时需要替换获取的网关接入点地址。
通过设置后端多个服务的权重,可以将请求按比例分发到不同的服务,常用于灰度发布场景。
- 创建nginx.yaml文件,部署两个 nginx 应用。其中old-nginx服务返回字符串This is the old version of nginx,new-nginx服务返回字符串This is the new version of nginx。
- 创建httproute-weight.yaml文件。
说明
weight字段为相对权重值。上述配置中表示约 90% 的流量路由到old-nginx,约 10% 的流量路由到new-nginx。
- 预期结果如下,大部分返回This is the old version of nginx,少量返回This is the new version of nginx,比例接近 9:1。
通过 Header 匹配规则,可以将携带特定请求头的流量路由到灰度服务,未携带则路由到稳定版本。该方式常用于在不影响线上用户的前提下,对灰度版本进行验证。
- 在上述部署示例的基础上,为nginx-demo部署灰度版本服务。创建nginx-canary.yaml文件,其中new-canary服务返回字符串This is the new version of nginx。
- 执行以下命令,部署灰度版本应用nginx-canary。
- 创建httproute-canary.yaml文件,配置基于 Header 的灰度路由规则,该配置定义了两条路由规则,携带请求头env: canary的流量路由到灰度版本nginx-canary,其余流量路由到稳定版本nginx-demo。
- 执行以下命令,不携带 Header 时访问稳定版本,执行时需要替换步骤五中获取的网关接入点地址。
- 预期结果如下,表示成功访问nginx-demo稳定版本。
- 执行以下命令,携带env: canary请求头时访问灰度版本,执行时需要替换步骤五中获取的网关接入点地址。
- 预期结果如下,表示成功访问nginx-canary灰度版本。
场景三:基于 OpenAI 协议 Header 的路由选择与加权分流
在 AI 推理服务场景中,客户端通常会通过 OpenAI 兼容协议发起请求,并在 HTTP Header 中携带组织标识(如OpenAI-Organization)或项目标识(如OpenAI-Project)。通过 HTTPRoute 的matches.headers能力,可以对这些协议 Header 做路由选择;命中某个 Header 条件后,再在该 rule 内通过backendRefs.weight实现加权分流,常用于 AI 模型灰度发布场景。
本示例复用场景一中部署的old-nginx和new-nginx服务,演示如何根据 OpenAI 协议 Header 将流量路由到不同后端,并在命中规则内按权重分配流量。
- 创建httproute-openapi.yaml文件。
说明
- 第一条规则:当请求路径以/v1开头且携带Header OpenAI-Organization: org-a时,90% 的流量路由到old-nginx,10% 的流量路由到new-nginx,实现对特定组织的灰度发布。
- 第二条规则:当请求路径以/v1开头且携带Header OpenAI-Project: project-b时,全部流量路由到new-nginx,用于特定项目的全量切换。
- 执行以下命令,携带OpenAI-Organization: org-a Header 进行多次访问,验证组织维度的加权路由。
- 预期结果如下,大部分返回This is the old version of nginx,少量返回This is the new version of nginx,比例接近 9:1。
- 执行以下命令,携带OpenAI-Project: project-b Header 进行访问,验证项目维度的全量路由。
- 预期结果如下,由于该规则将全部流量路由到new-nginx,因此每次访问均返回新版本内容。。