跳至内容

网关类

自 v0.5.0 起的标准通道

GatewayClass 资源是 GA,并且自 v0.5.0 起已成为标准通道的一部分。有关发布通道的更多信息,请参阅我们的 版本控制指南.

网关类 是基础设施提供商定义的集群范围资源。此资源代表可以实例化的网关类。

注意:网关类与 networking.IngressClass 资源 的功能相同。

kind: GatewayClass
metadata:
  name: cluster-gateway
spec:
  controllerName: "example.net/gateway-controller"

我们预计基础设施提供商将为用户创建一个或多个 GatewayClasses。它允许将 Gateways 的实现机制(例如控制器)与用户分离。例如,基础设施提供商可以创建两个名为 internetprivateGatewayClasses 来反映定义面向互联网的应用程序与私有内部应用程序的 Gateways

kind: GatewayClass
metadata:
  name: internet
  ...
---
kind: GatewayClass
metadata:
  name: private
  ...

这些类的用户将不需要知道 internetprivate 的实现方式。相反,用户只需要了解创建 Gateway 所用类的结果属性。

网关类参数

Gateway API 的提供者可能需要将参数传递给他们的控制器作为类定义的一部分。这是使用 GatewayClass.spec.parametersRef 字段完成的

# GatewayClass for Gateways that define Internet-facing applications.
kind: GatewayClass
metadata:
  name: internet
spec:
  controllerName: "example.net/gateway-controller"
  parametersRef:
    group: example.net/v1alpha1
    kind: Config
    name: internet-gateway-config
---
apiVersion: example.net/v1alpha1
kind: Config
metadata:
  name: internet-gateway-config
spec:
  ip-address-pool: internet-vips
  ...

鼓励使用自定义资源来处理 GatewayClass.spec.parametersRef,但实现可能在需要时诉诸于使用 ConfigMap。

网关类状态

GatewayClasses 必须由提供者进行验证,以确保配置的参数有效。类的有效性将通过 GatewayClass.status 向用户发出信号

kind: GatewayClass
...
status:
  conditions:
  - type: Accepted
    status: False
    ...

一个新的 GatewayClass 将从 Accepted 条件设置为 False 开始。此时,控制器尚未看到配置。控制器处理完配置后,该条件将设置为 True

kind: GatewayClass
...
status:
  conditions:
  - type: Accepted
    status: True
    ...

如果 GatewayClass.spec 中存在错误,则条件将不为空,并将包含有关错误的信息。

kind: GatewayClass
...
status:
  conditions:
  - type: Accepted
    status: False
    Reason: BadFooBar
    Message: "foobar" is an FooBar.

网关类控制器选择

GatewayClass.spec.controller 字段确定负责管理 GatewayClass 的控制器实现。该字段的格式是不透明的,特定于特定的控制器。由给定控制器字段选择的网关类取决于集群中各种控制器(s)如何解释此字段。

建议控制器作者/部署使用他们管理控制下的域/路径组合(例如,管理所有以 example.net 开头的 controller 的控制器是 example.net 域的所有者)来使他们的选择唯一,以避免冲突。

控制器版本控制可以通过将控制器的版本编码到路径部分来完成。一个示例方案可能是(类似于容器 URI)

example.net/gateway/v1   // Use version 1
example.net/gateway/v2.1 // Use version 2.1
example.net/gateway      // Use the default version