网关


本页面介绍了 Kubernetes Gateway API 的 Google Kubernetes Engine (GKE) 实现。如需了解如何使用 Gateway API,请参阅部署网关

Gateway API 是对 Ingress 等现有标准的改进,具有以下优势:

  • 面向角色:网关由与集群运营商、开发者和基础架构提供商组织角色相对应的 API 资源组成。这允许集群运营人员定义许多不同非协调开发者团队如何使用共享基础架构。

    下图展示了 Gateway API 类及其使用者:

    GKE 提供网关类。集群运营人员根据这些类创建网关资源。应用开发者创建绑定到网关资源的 HTTPRoute 资源。

  • 可移植:Gateway API 是一种开源标准,有很多实现方案。它使用灵活一致性的概念进行设计,可提升高度可移植的核心 API(如 Ingress),该 API 仍然非常灵活且可扩展,能够支持环境和实现的原生功能。这样可以使概念和核心资源在各实现和环境中保持一致,从而降低复杂性并提高用户熟悉度。

  • 富有表现力:Gateway API 资源可以为基于标头的匹配、流量加权和其他只能在 Ingress 中通过自定义注解实现的功能提供内置功能。

Gateway API 资源

Gateway API 包含以下资源类型:

  • GatewayClass:定义集群范围的资源以作为在集群中创建负载平衡器的模板。GKE 提供可在 GKE 集群中使用的 GatewacyClass。
  • 网关:定义负载平衡器侦听流量的位置和方式。集群运营人员会根据 GatewayClass 在其集群中创建网关。GKE 会创建负载平衡器,以实现网关资源中定义的配置。
  • HTTPRoute:定义用于将请求从网关路由到 Kubernetes 服务的特定于协议的规则。GKE 支持 HTTPRoute 以用于基于 HTTP(S) 的流量路由。应用开发者会创建 HTTPRoute 以使用网关公开其 HTTP 应用。

以下部分更详细地介绍了 Gateway API 资源。

GatewayClass

GatewayClass 是一种为 Kubernetes 集群中的 TCP/UDP(级别 4)负载平衡器和 HTTP(S)(级别 7)负载平衡器定义模板的资源。GKE 会提供 GatewayClass 作为集群范围的资源。集群运营人员会在其集群中创建网关时指定 GatewayClass。

不同的 GatewayClass 对应于不同的 Google Cloud 负载平衡器。根据 GatewayClass 创建网关时,系统会创建相应的负载平衡器来实现指定的配置。某些 GatewayClass 支持多集群负载平衡。

下表列出了 GKE 集群中可用的 GatewayClass 及其底层负载平衡器类型。如需详细了解 GatewayClass,请参阅 GatewayClass 功能和规范

类名称 说明
gke-l7-rilb 基于内部 HTTP(S) 负载平衡构建的区域内部 HTTP(S) 负载平衡器
gke-l7-gxlb 基于外部 HTTP(S) 负载平衡构建的全球外部 HTTP(S) 负载平衡器
gke-l7-rilb-mc 基于内部 HTTP(S) 负载平衡构建的多集群区域负载平衡器
gke-l7-gxlb-mc 基于外部 HTTP(S) 负载平衡构建的多集群全球负载平衡器

每个 GatewayClass 受到底层负载平衡器的限制。

网关

集群运营人员会创建网关来定义负载平衡器侦听流量的位置和方式。网关从其关联的 GatewayClass 获取其行为(即实现方式)。

网关规范包括网关的 GatewayClass、要侦听的端口和协议,以及可以绑定到网关的路由。网关会根据路由元数据选择路由;具体来说,就是路由资源的种类、命名空间和标签。

如需查看部署网关的示例,请参阅部署网关。如需查看部署多集群网关的示例,请参阅部署多集群网关

HTTPRoute

HTTPRoute 定义如何将网关接收的 HTTP 和 HTTPS 请求定向到 Service。应用开发者会创建 HTTPRoute 来通过网关公开其应用。

HTTPRoute 定义可以从哪些网关路由流量、要路由到哪些 Service,以及定义 HTTPRoute 匹配的流量的规则。网关和路由绑定是双向的,这意味着两个资源必须相互选择才能绑定。HTTPRoute 可以根据请求标头中的详细信息来匹配请求。

一个路由可以绑定到一个或多个网关,并且一个网关可以绑定到许多路由。

GKE 网关控制器

GKE 网关控制器是 Google 对用于 Cloud Load Balancing 的 Gateway API 的实现。与 GKE Ingress 控制器类似,网关控制器会监控 Gateway API 资源的 Kubernetes API,并协调 Cloud Load Balancing 资源,以实现网关资源指定的网络行为。

GKE 网关控制器有两种版本:

  • 区域:管理单集群网关。
  • 全球:管理多集群网关。

两个网关控制器都是 Google 托管的控制器,可监控 GKE 集群的 Kubernetes API。与 GKE Ingress 控制器不同,网关控制器不托管在 GKE 控制层面上,因此它们更具可扩缩性和可靠性。

Controller 区域网关控制器 全球网关控制器
管理者 Google Google
集群范围 单集群网关 多集群网关
部署位置 在其 GKE 集群所在的区域内按区域部署。 跨多个 Google Cloud 区域在全球范围内部署。
启用方式 默认在 GKE 中启用。 通过 Multi-cluster Ingress API 并注册到 Environ 启用。请参阅启用多集群网关
支持的 GatewayClass
  • gke-l7-rilb
  • gke-l7-gxlb
  • gke-l7-rilb-mc
  • gke-l7-gxlb-mc

您可以在 GKE 集群中同时使用多个网关控制器(包括非 Google 提供的控制器)。每个 GatewayClass 由一个且仅由一个网关控制器支持,从而能够同时使用单集群和多集群负载平衡。

Ingress 和网关的比较

网关和 Ingress 都是路由流量的开源标准。Gateway 借鉴了 Ingress 和服务网格生态系统的经验教训而设计。网关是 Ingress 的发展演变,具有相同的功能,由 Ingress 功能的超集提供。网关和 Ingress 可同时使用,不会发生冲突。但随着时间的推移,网关和路由资源将提供 Ingress 中不提供的更多功能,从而吸引用户在之前可能使用 Ingress 的地方开始使用网关。

Gateway API 标准目前处于 v1Alpha1 阶段,这意味着目前仅供实验和评估使用。在 Beta 版 Gateway API 发布之前计划了重大 API 更改。同样,GKE 网关控制器也处于预览版阶段中,仅用于实验。您的反馈对于 GKE 网关控制器的发展至关重要,并且将有助于我们推出正式版。如有任何反馈和疑问,请随时与 gke-gateway-feedback@google.com 联系。我们期待收到您的来信。

价格

通过网关控制器部署的所有 Compute Engine 资源都会根据 GKE 集群所在的项目计费。作为 GKE Standard 和 Autopilot 价格的一部分,无需额外付费即可获得区域网关控制器。您可以在预览版期间使用全球网关控制器,无需额外付费。如需详细了解 GKE 全球网关控制器价格,请参阅启用多集群网关

后续步骤