Gateway API 是 Ingress API 的继任者。然而,它不包括 Ingress 资源(最接近的对应是 HTTPRoute)。因此,需要从现有的 Ingress 资源一次性转换到相应的 Gateway API 资源。

本指南将帮助你进行转换,内容包括:

  • 说明为什么你可能想切换到 Gateway API。
  • 描述 Ingress API 和 Gateway API 之间的主要区别。
  • 将 Ingress 特性映射到 Gateway API 特性。
  • 展示一个从 Ingress 资源转换到 Gateway API 资源的示例。
  • 提及 ingress2gateway 用于自动转换。

同时,本指南不涉及实时迁移的准备工作,也不解释如何转换 Ingress 控制器的一些特定实现功能。此外,由于 Ingress API 仅涵盖 HTTP/HTTPS 流量,本指南不涵盖 Gateway API 对其他协议的支持。

切换到 Gateway API 的理由

Ingress API 是 Kubernetes 配置外部 HTTP/HTTPS 负载均衡的标准方式,广泛被 Kubernetes 用户采用,并得到众多实现(Ingress 控制器)的支持。但是,Ingress API 存在几个局限性:

  • 功能有限。Ingress API 仅支持 HTTP 流量的 TLS 终止和简单的基于内容的请求路由。
  • 依赖注解进行扩展。注解的扩展方法导致可移植性有限,因为每个实现都有自己支持的扩展,这些扩展可能不适用于其他实现。
  • 权限模型不足。对于具有共享负载均衡基础设施的多团队集群,Ingress API 并不适用。

Gateway API 解决了这些局限性。

Ingress API 与 Gateway API 的主要区别

两者之间有三个主要区别:

  • 角色差异
  • 可用功能
  • 扩展性方法

角色

Ingress API 最初只有一个资源种类 Ingress,因此只有一个用户角色。Gateway API 包括四个明确的角色:应用开发者、应用管理员、集群运营和基础设施提供商。这允许你通过分担用户角色的责任来突破自助服务模型。

可用功能

Ingress API 仅提供基本功能:基于主机头和请求 URI 的 HTTP 流量的 TLS 终止和基于内容的路由。Gateway API 不仅支持所有 Ingress 资源的功能,还支持许多过去只有通过 Ingress 注解才可用的功能,因此比 Ingress API 更具可移植性。

扩展方法

Gateway API 的扩展点包括:

  • 外部引用
  • 自定义实现
  • 策略

这些扩展点不包括 Gateway API 资源上的注解,这种做法在 API 的实现中被强烈反对。

将 Ingress API 功能映射到 Gateway API 功能

主要区域包括:

  • 入口点
  • TLS 终止
  • 路由规则

每个 Ingress 资源都有两个隐含的入口点,分别用于 HTTP 和 HTTPS 流量。在 Gateway API 中,入口点必须在 Gateway 资源中明确定义。例如,如果你希望数据平面在端口 80 上处理 HTTP 流量,你需要为该流量定义一个 监听器

实施特定的 Ingress 功能(注解)

Ingress 注解配置实施特定的功能。因此,将它们转换为 Gateway API 取决于 Ingress 控制器和 Gateway 实现。一些通过注解支持的功能现在是 Gateway API(HTTPRoute)的一部分,主要包括:

  • 请求重定向(包括 TLS 重定向)
  • 请求/响应操作
  • 流量分割
  • 基于头、查询参数或方法的路由

如何从 Ingress 转换到 Gateway API

从 Ingress 迁移到 Gateway API 的过程如下图所示。

image
从 Ingress 迁移到 Gateway API 的步骤

下面是对图中步骤的说明:

  • 步骤 1:定义 Gateway:创建一个 Gateway 资源,并配置对应的 GatewayClass(‘prod’)。定义两个监听器:HTTP 在 80 端口,HTTPS 在 443 端口。HTTPS 监听器还包括了 TLS 终止设置,使用名为 ’example-com’ 的 Secret。
  • 步骤 2:定义 HTTPRoutes:根据 Ingress 资源的定义,将路由拆分成两个 HTTPRoutes,分别对应 ‘foo.example.com’ 和 ‘bar.example.com’ 的主机名。这些 HTTPRoutes 附加到 HTTPS 监听器。
  • 步骤 3:配置 TLS 重定向:创建一个新的 HTTPRoute 用于处理 HTTP 到 HTTPS 的重定向,这一设置原先通过 Ingress 注解来配置。

自动转换 Ingresses

Ingress to Gateway 项目帮助将 Ingress 资源转换为 Gateway API 资源,特别是 HTTPRoutes。转换结果应始终经过测试和验证。

参考

最后更新于 2024/10/08