AI-Gateway系列_kagateway-04-自定义资源

下图展示了kgateway自定义资源如何与 Kubernetes Gateway API 自定义资源进行交互,从而实现高级的路由、流量管理、安全性、弹性以及集成能力。

Kubernetes Gateway API resources

查看你在配置 gateway proxies 和为应用设置路由时会使用到的 Kubernetes Gateway API 资源。


Gateway与GatewayClass

Gateway自定义资源是一种网络抽象,定义了一个入口点(point of access),流量可以通过这个入口被转发到Kubernetes集群中的后端服务。Gateway定义你想打开的监听器(listeners),包括端口、协议,以及要监听的主机名(hostname)。你还可以指定如何处理传入的加密流量。例如,加密流量可以在 gateway处终结,或直接透传到集群中的后端。要启动一个Gateway并管理其生命周期,需要一个gateway controller。gateway controller由GatewayClass资源定义,它管理底层基础设施,以确保流量能正确路由到目标端点。当你安装kgateway时,会自动创建一个GatewayClass资源,并指向 kgateway controller。


HTTPRoute与TCPRoute

为了配置路由,Kubernetes Gateway API提供了多种路由资源,例如HTTPRoute和TCPRoute。

这些路由会附加到Gateway资源上,并定义如何匹配和转发传入流量到后端目标。

  • HTTPRoute: 最常用的路由资源,用于配置HTTP与HTTPS流量路由。
  • TCPRoute: 用于路由TCP请求的资源。

虽然Kubernetes Gateway API提供基本的请求匹配、重定向、重写和Header操作能力,但它缺少更复杂的流量管理、弹性和安全特性,例如数据转换、访问日志或路由委托等。你可以通过使用 kgateway的Policy自定义资源来扩展Kubernetes Gateway API的功能。Policy 可以让你把智能流量管理、弹性和安全策略应用到 HTTPRoute 或 Gateway 上。


Kubernetes Services

Kubernetes Service会在集群内部或外部暴露Pod,使得其他网络端点能够与它们通信。在Kubernetes Gateway API 的上下文中,Service 代表集群内一个你希望从集群外路由流量到达的应用。Service会在HTTPRoute资源中被引用,包括你要将流量发送到的端口。如果流量满足HTTPRoute中定义的匹配条件,Gateway就会把流量转发到HTTPRoute引用的 ervice。


ReferenceGrant

ReferenceGrant 允许 Kubernetes Gateway API 的资源(例如 HTTPRoute)引用其他命名空间中的资源。例如:

  • 你在namespace1中创建了一个 HTTPRoute
  • 但要路由的 Service 或 Backend 在 namespace2

那么你必须创建一个 ReferenceGrant,才能允许这些资源之间通信。


Kgateway resources

查看你在引导、配置和自定义gateway proxy时会使用到的kgateway资源,以及你可以利用的策略资源(policies)来增强 gateway 和路由的流量管理、弹性与安全能力。


GatewayExtensions

GatewayExtension是一种kgateway自定义资源,用作kgateway与外部服务之间的配置桥梁,这些外部服务用于扩展 Gateway 的能力。这些外部服务可能提供:

  • 身份认证(extAuth)
  • 限流(rateLimit)
  • 请求处理(extProc)

TrafficPolicy 随后可以引用某个 GatewayExtension,以便使用该外部服务执行对应的策略。


GatewayParameters

当你创建一个Gateway资源时,会使用默认的gateway proxy模板在集群中自动启动并引导一个 gateway proxy的Deployment和Service。此模板包含Envoy配置,用于将该gateway proxy部署绑定到你创建的Gateway资源。此外,GatewayParameters资源中的设置会用于进一步配置gateway proxy。


Policies

虽然Kubernetes Gateway API支持基本路由功能(如匹配、重定向、重写请求),但你可能希望在 API网关中使用更多能力,例如访问日志或数据转换。Policies可以让你把智能流量管理、弹性和安全策略应用到HTTPRoute或Gateway。

Kgateway使用以下自定义资源将策略附加到路由或gateway listeners:

  • DirectResponse: 对传入请求直接返回自定义的 HTTP 响应码和响应体
  • HTTPListenerPolicy: 将策略应用到所有 HTTP 和 HTTPS listeners
  • TrafficPolicy: 将策略附加到 HTTPRoute 资源中的路由上

Backends

对于集群内部的工作负载,你可以通过Kubernetes Service将流量路由给它们。但如果你有外部服务,例如:

  • 静态主机名
  • AWS Lambda函数

并希望路由流量给这些外部服务,该怎么办?你可以使用kgateway 的 Backend资源来实现。类似于 Kubernetes Service,你可以在HTTPRoute资源中引用Backend。

Leave a Reply