第 15 章 Gateway [gateway.networking.k8s.io/v1]
- 描述
- gateway 通过将 Listeners 绑定到一组 IP 地址来代表服务流量处理基础架构的实例。
- 类型
-
object
- 必填
-
spec
-
15.1. 规格 复制链接链接已复制到粘贴板!
属性 | 类型 | 描述 |
---|---|---|
|
| APIVersion 定义对象的这个表示法的版本化的 schema。服务器应该将识别的模式转换为最新的内部值,并可拒绝未识别的值。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
|
| kind 是一个字符串值,代表此对象所代表的 REST 资源。服务器可以从客户端向其提交请求的端点推断。无法更新。采用驼峰拼写法 (CamelCase)。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
| 标准对象元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata | |
|
| spec 定义网关的所需状态。 |
|
| Status 定义网关的当前状态。 |
15.1.1. .spec 复制链接链接已复制到粘贴板!
- 描述
- spec 定义网关的所需状态。
- 类型
-
object
- 必填
-
gatewayClassName
-
监听器
-
属性 | 类型 | 描述 |
---|---|---|
|
| 为此网关请求的地址。这是可选的,行为取决于实现。如果在 spec 中设置值并且请求的地址无效或不可用,实施必须指示在 GatewayStatus.Addresses 中的关联条目中指明这一点。 Addresses 字段表示在网关"外面"地址的请求,此网关绑定的流量将使用。这可以是外部负载均衡器或其他网络基础架构的 IP 地址或主机名,或者流量将发送到的一些其他地址。 如果没有指定地址,实施 MAY 以特定于实施的方式调度网关,分配适当的地址集合。 实现 MUST 将所有 Listeners 绑定到分配给网关的每个网关Address,并在 GatewayStatus.Addresses 中添加对应的条目。 支持:扩展 |
|
| GatewayAddress 描述了可绑定到网关的地址。 |
|
| 用于此网关的 GatewayClassName。这是 GatewayClass 资源的名称。 |
|
| 基础架构定义了有关此网关实例的基础架构级属性。 支持:扩展 |
|
| 与此网关关联的监听器.侦听器定义在这个网关地址上绑定的逻辑端点。至少指定一个 Listener 必须指定。 不同的 Listeners 一组 Listeners (例如在单个网关中)中的每个 Listener 都有所不同,其中流量流需要能够完全分配给一个侦听器。(本节使用 "Listeners" 而不是 "Listeners in a single Gateway",因为实现 MAY 合并配置从多个网关合并到单个数据平面,在这种情况下也会应用这些规则。 实际上,这意味着集合中的每个监听程序都必须具有 Port, Protocol, 和 if the protocol, Hostname 的唯一组合。 一些端口、协议和 TLS 设置组合被视为核心支持,且实施必须根据它们支持的对象支持: HTTPRoute 1.HTTPRoute,端口:80,协议:HTTP 2.HTTPRoute, Port: 443, Protocol: HTTPS, TLS Mode: Terminate, TLS keypair provided TLSRoute 1.TLSRoute, Port: 443, Protocol: TLS, TLS Mode: Passthrough "distinct" Listeners 具有以下属性: 该实施可以将入站请求与单个不同的 Listener 匹配。 当多个 Listeners 共享字段的值(例如,具有相同 Port 值的两个 Listeners)时,实现只能使用其他 Listener 字段将请求与其中一个 Listeners 匹配。 当多个监听器对于 Protocol 字段的值相同时,每个带有匹配协议值的 Listeners 值都需要为其他字段有不同的值。 Listener 的 MUST 不同字段集合因协议而异。以下规则定义了哪些字段需要被认为 Listeners 的规则与当前在 Gateway API spec 中定义的每个协议不同。 所有共享协议值都必须使用 不同的值 的监听程序集对于 至少其中一个 字段是不同的: * HTTP, HTTPS, TLS: Port, Hostname * TCP, UDP: Port 调用 的一个重要 规则涉及在实施时发生:
* 支持 TCP 协议 Listeners,以及 HTTP、HTTPS 或 TLS 协议 Listeners,而 * 会看到与 TCP 协议相同的 在这种情况下,所有与 TCP Listener 共享端口的 Listeners 并不不同,因此不接受它。 如果实现不支持 TCP 协议 Listeners,则不会应用前面的规则,并且不接受 TCP Listeners SHOULD。
请注意, # 监听程序只通过主机名不同 当 Listeners 只根据主机名不同时,入站请求主机名需要与最具体的特定主机名值匹配,以选择正确的 Listener 及其相关路由集合。
在通配符匹配前,需要处理完全匹配,在回退(空主机名值)匹配前,会处理通配符匹配。例如:
此外,如果有多个通配符条目,必须在较少的特定通配符条目之前处理更具体的通配符条目。例如: 这里的精确定义是通配符字符右侧的点数越高,优先级越高。
通配符字符会将任意数量的字符和 点 与左侧匹配,因此 处理不一致的 Listeners 如果一组 Listeners 包含不不同的 Listeners,则这些 Listeners 为冲突,并且实施 MUST 将 Listener 状态中的 " Conflicted " 条件设置为 "True"。 对于本文档的目的,单词 "indistinct" 和 "conflicted" 被视为等效的内容。 实现 MAY 只有在只接受不包含冲突的 Listeners 的部分 Listener 集时,才选择接受带有某些冲突的 Listeners 的网关。 具体来说,实施 MAY 接受部分 Listener 设置,具体取决于以下规则: * 实施必须选择一个有冲突的 Listener 作为主办者。不接受 ALL indistinct Listeners 进行处理。* 至少有一个不同的 Listener 必须存在,否则网关有效地包含 Listeners,且必须拒绝整个处理。 当网关包含冲突的 Listenered Listeners 是否接受网关时,在网关状态上设置 "ListenersNotValid" 条件。该条件 SHOULD 明确表示消息中哪些 Listeners 被冲突,哪些被接受。另外,这些监听器 SHOULD 的 Listener 状态表示哪些 Listeners 被冲突且没有接受。 常规 Listener 行为 请注意,对于所有不同的 Listener,请求 SHOULD 匹配最多一个 Listener。例如,如果为 "foo.example.com" 和 "*.example.com" 定义 Listeners,则对 "foo.example.com" SHOULD 的请求只使用附加到 "foo.example.com" Listener 的路由。
这个概念被称为 "Listener Isolation",它是网关 API 的扩展功能。不支持 Listener 隔离功能的实现有明确记录,但必须声明支持
支持 Listener 隔离 SHOULD 声明对扩展 兼容 Listeners 如果出现以下情况,网关的 Listeners 被视为 兼容 : 1.它们与众不同。2.该实施可以满足所有所分配的地址上可用的地址要求。 扩展支持中的兼容组合因实施而异。与一个实现兼容的组合可能与另一个实现不兼容。 例如,一个不能在同一地址上提供 TCP 和 UDP 侦听器的实现,或者无法混合 HTTPS 和通用 TLS 侦听同一端口,也不会考虑兼容这些情况,即使它们不同。 如果所有网关中的所有 Listeners 都兼容,则实施 MAY 将单独的网关合并到一组地址上。 在以后的发行版本中,MinItems=1 要求被丢弃。 支持:Core |
|
| 侦听器传播网关接受网络连接的逻辑端点的概念。 |
15.1.2. .spec.addresses 复制链接链接已复制到粘贴板!
- 描述
为此网关请求的地址。这是可选的,行为取决于实现。如果在 spec 中设置值并且请求的地址无效或不可用,实施必须指示在 GatewayStatus.Addresses 中的关联条目中指明这一点。
Addresses 字段表示在网关"外面"地址的请求,此网关绑定的流量将使用。这可以是外部负载均衡器或其他网络基础架构的 IP 地址或主机名,或者流量将发送到的一些其他地址。
如果没有指定地址,实施 MAY 以特定于实施的方式调度网关,分配适当的地址集合。
实现 MUST 将所有 Listeners 绑定到分配给网关的每个网关Address,并在 GatewayStatus.Addresses 中添加对应的条目。
支持:扩展
- 类型
-
array
15.1.3. .spec.addresses[] 复制链接链接已复制到粘贴板!
- 描述
- GatewayAddress 描述了可绑定到网关的地址。
- 类型
-
object
- 必填
-
value
-
属性 | 类型 | 描述 |
---|---|---|
|
| 地址的类型。 |
|
| 地址值。值的有效性取决于控制器的类型和支持。
示例:1.2. |
15.1.4. .spec.infrastructure 复制链接链接已复制到粘贴板!
- 描述
基础架构定义了有关此网关实例的基础架构级属性。
支持:扩展
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| 将 SHOULD 应用到响应此网关创建的任何资源的注解。
对于创建其他 Kubernetes 对象的实现,这应该是对资源的 实施可能会选择添加其他特定于实施的注解,因为它们认为适合。 支持:扩展 |
|
| SHOULD 应用于响应此网关创建的任何资源的标签。
对于创建其他 Kubernetes 对象的实现,这应该是资源上的 实施可能会选择添加其他特定于实施的标签,因为它们认为适合。 如果实现将这些标签映射到 Pod,或者在标签更改时重新创建任何其他资源,则 SHOULD 会明确警告文档中此行为。 支持:扩展 |
|
| ParametersRef 是对包含与网关对应的配置参数的资源的引用。如果控制器不需要任何其他配置,则这是可选的。
这与 GatewayClass 的 parameter
网关的 GatewayClass 可以提供自己的 如果无法找到引用,请参阅不支持的类型,或者当该资源中的数据格式时,网关 SHOULD 将被拒绝,并将 "Accepted" 状态条件设置为 "False",以及 "InvalidParameters" 原因。 支持:特定于实施 |
15.1.5. .spec.infrastructure.parametersRef 复制链接链接已复制到粘贴板!
- 描述
ParametersRef 是对包含与网关对应的配置参数的资源的引用。如果控制器不需要任何其他配置,则这是可选的。
这与 GatewayClass 的 parameter
Ref 的参数
相同,但基于每个Gateway网关的 GatewayClass 可以提供自己的
参数Ref
。当两者都被指定时,合并行为是特定于实现的。通常建议 GatewayClass 提供可由网关覆盖的默认值。如果无法找到引用,请参阅不支持的类型,或者当该资源中的数据格式时,网关 SHOULD 将被拒绝,并将 "Accepted" 状态条件设置为 "False",以及 "InvalidParameters" 原因。
支持:特定于实施
- 类型
-
object
- 必填
-
group
-
kind
-
name
-
属性 | 类型 | 描述 |
---|---|---|
|
| 组是引用的组。 |
|
| kind 是引用的类型。 |
|
| name 是引用的名称。 |
15.1.6. .spec.listeners 复制链接链接已复制到粘贴板!
- 描述
与此网关关联的监听器.侦听器定义在这个网关地址上绑定的逻辑端点。至少指定一个 Listener 必须指定。
BarbicanP different Listeners
一组 Listeners (例如在单个网关中)中的每个 Listener 都有所不同,其中流量流需要能够完全分配给一个侦听器。(本节使用 "Listeners" 而不是 "Listeners in a single Gateway",因为实现 MAY 合并配置从多个网关合并到单个数据平面,在这种情况下也会应用这些规则。
实际上,这意味着集合中的每个监听程序都必须具有 Port, Protocol, 和 if the protocol, Hostname 的唯一组合。
一些端口、协议和 TLS 设置组合被视为核心支持,且实施必须根据它们支持的对象支持:
HTTPRoute
- HTTPRoute, Port: 80, Protocol: HTTP
- HTTPRoute, Port: 443, Protocol: HTTPS, TLS Mode: Terminate, TLS keypair provided
TLSRoute
- TLSRoute, Port: 443, Protocol: TLS, TLS Mode: Passthrough
"distinct" Listeners 具有以下属性:
该实施可以将入站请求与单个不同的 Listener 匹配。
当多个 Listeners 共享字段的值(例如,具有相同 Port 值的两个 Listeners)时,实现只能使用其他 Listener 字段将请求与其中一个 Listeners 匹配。
当多个监听器对于 Protocol 字段的值相同时,每个带有匹配协议值的 Listeners 值都需要为其他字段有不同的值。
Listener 的 MUST 不同字段集合因协议而异。以下规则定义了哪些字段需要被认为 Listeners 的规则与当前在 Gateway API spec 中定义的每个协议不同。
所有共享协议值都必须使用 不同的值 的监听程序集对于 至少其中一个 字段是不同的:
- HTTP, HTTPS, TLS: Port, Hostname
- TCP, UDP: 端口
调用 的一个重要 规则涉及在实施时发生:
- 支持 TCP 协议 Listeners 以及 HTTP、HTTPS 或 TLS 协议 Listeners 以及
-
请参阅 HTTP、HTTPS 或者 TLS 协议,
其端口
与 TCP 协议相同。
在这种情况下,所有与 TCP Listener 共享端口的 Listeners 并不不同,因此不接受它。
如果实现不支持 TCP 协议 Listeners,则不会应用前面的规则,并且不接受 TCP Listeners SHOULD。
请注意,
tls
字段不用于确定监听器是否是不同的,因为 仅在 TLS 配置上有所不同的 Listeners 仍会在所有情况下都冲突。# 监听程序只通过主机名不同
当 Listeners 只根据主机名不同时,入站请求主机名需要与最具体的特定主机名值匹配,以选择正确的 Listener 及其相关路由集合。
在通配符匹配前,需要处理完全匹配,在回退(空主机名值)匹配前,会处理通配符匹配。例如:
"foo.example.com"
优先于"*.example.com"
,而"\*.example.com"
优先于""
。此外,如果有多个通配符条目,必须在较少的特定通配符条目之前处理更具体的通配符条目。例如:
"*.foo.example.com"
优先于"\*.example.com
"。这里的精确定义是通配符字符右侧的点数越高,优先级越高。
通配符字符会将任意数量的字符和 点 与左侧匹配,因此
"\*.example.com"
将同时与"foo.bar.example.com"
和"bar.example.com"
匹配。BarbicanP processing indistinct Listeners
如果一组 Listeners 包含不不同的 Listeners,则这些 Listeners 为冲突,并且实施 MUST 将 Listener 状态中的 " Conflicted " 条件设置为 "True"。
对于本文档的目的,单词 "indistinct" 和 "conflicted" 被视为等效的内容。
实现 MAY 只有在只接受不包含冲突的 Listeners 的部分 Listener 集时,才选择接受带有某些冲突的 Listeners 的网关。
具体来说,实施 MAY 接受部分 Listener 设置,具体取决于以下规则:
- 该实施不能选一个冲突的 Listener 作为优胜者。不接受 ALL indistinct Listeners 进行处理。
- 至少存在一个不同的 Listener 必须存在,否则网关有效地包含 Listeners,且必须拒绝整个处理。
当网关包含冲突的 Listenered Listeners 是否接受网关时,在网关状态上设置 "ListenersNotValid" 条件。该条件 SHOULD 明确表示消息中哪些 Listeners 被冲突,哪些被接受。另外,这些监听器 SHOULD 的 Listener 状态表示哪些 Listeners 被冲突且没有接受。
swig 常规 Listener 行为
请注意,对于所有不同的 Listener,请求 SHOULD 匹配最多一个 Listener。例如,如果为 "foo.example.com" 和 ".example.com" 定义了 Listeners,则对 "foo.example.com" SHOULD 的请求只使用附加到 "foo.example.com" Listener 的路由。
这个概念被称为 "Listener Isolation",它是网关 API 的扩展功能。不支持 Listener 隔离功能的实现有明确记录,但必须声明支持
GatewayHTTPListenerIsolation
功能。支持 Listener 隔离 SHOULD 声明对扩展
网关HTTPListener
隔离功能的 实现,并传递相关的一致性测试。swig 兼容 Listeners
如果出现以下情况,网关的 Listeners 被视为 兼容 :
- 它们与众不同。
- 该实施可以满足所有所分配的地址上可用的地址要求。
扩展支持中的兼容组合因实施而异。与一个实现兼容的组合可能与另一个实现不兼容。
例如,一个不能在同一地址上提供 TCP 和 UDP 侦听器的实现,或者无法混合 HTTPS 和通用 TLS 侦听同一端口,也不会考虑兼容这些情况,即使它们不同。
如果所有网关中的所有 Listeners 都兼容,则实施 MAY 将单独的网关合并到一组地址上。
在以后的发行版本中,MinItems=1 要求被丢弃。
支持:Core
- 类型
-
数组
15.1.7. .spec.listeners[] 复制链接链接已复制到粘贴板!
- 描述
- 侦听器传播网关接受网络连接的逻辑端点的概念。
- 类型
-
object
- 必填
-
name
-
port
-
protocol
-
属性 | 类型 | 描述 |
---|---|---|
|
| allowedRoutes 定义 MAY 附加到 Listener 和存在这些 Route 资源的可信命名空间的路由类型。 虽然客户端请求可能与多个路由规则匹配,但只有一条规则最终可能会收到请求。匹配优先级必须按以下条件顺序决定: * 根据 Route 类型定义的最具体匹配。* 基于创建时间戳的最旧的路由。例如,创建时间戳为 "2020-09-08 01:02:03" 的路由优先于创建时间戳为 "2020-09-08 01:02:04"。* 如果其它内容都等同,则路由应以字母顺序(命名空间/名称)首先显示。例如,foo/bar 优先于 foo/baz。 应实施附加到此 Listener 的 Route 中的所有有效规则。可以忽略无效的 Route 规则(有时意味着完整的路由)。如果 Route 规则从 valid 转换为无效,则应该丢弃对该 Route 规则的支持以确保一致性。例如,即使 Route 规则指定的过滤器无效,该路由中的其余规则应该仍然被支持。 支持:Core |
|
| hostname 指定与定义此概念的协议类型匹配的虚拟主机名。如果未指定,则所有主机名都匹配。对于不需要基于主机名的匹配的协议,会忽略此字段。 实现必须针对以下每个协议正确应用主机名匹配: * TLS:Listener Hostname 必须与 SNI 匹配。* HTTP: Listener Hostname 必须与请求的 Host 标头匹配。* HTTPS:Listener Hostname SHOULD 与 SNI 和 Host 标头匹配。请注意,这不需要 SNI 和 Host 标头相同。下面更详细地描述了这种情况的语义。 为确保安全性,RFC-6066 的第 11.1 节强调了依赖 SNI 主机名匹配的服务器实施,也会验证应用程序协议中的主机名。 RFC-7540 章节 9.1.2 提供了通过响应 HTTP 421 Misdirected Request status 代码来拒绝重复使用连接的机制。这表示原始服务器已拒绝请求,因为它似乎被错误直接。 要检测错误直接的请求,Gateways SHOULD 与在同一端口和协议上的所有 SNI 主机名中配置的请求授权匹配: * 如果另一个 Listener 具有完全匹配或更具体的通配符条目,则网关 SHOULD 会返回 421。* 如果当前 Listener (在 ClientHello 期间由 SNI 匹配)与 Host: * 不匹配,如果另一个 Listener 与主机匹配,则网关 SHOULD 返回 421。* 如果没有其他 Listener 匹配主机,则网关必须返回一个 404。
对于 HTTPRoute 和 TLSRoute 资源,有与
带有通配符标签(MyPlaybooks)前缀的主机名被解释为后缀匹配。 支持:Core |
|
| name 是 Listener 的名称。此名称必须在网关内唯一。 支持:Core |
|
| port 是网络端口。多个监听器可能会使用相同的端口,受 Listener 兼容性规则。 支持:Core |
|
| protocol 指定此监听器希望接收的网络协议。 支持:Core |
|
| TLS 是 Listener 的 TLS 配置。如果 Protocol 字段是 "HTTPS" 或 "TLS",则需要此字段。如果 Protocol 字段是 "HTTP", "TCP", 或 "UDP",则设置此字段无效。 GatewayTLSConfig 中定义的 SNI 与 GatewayTLSConfig 中定义的证书根据此监听程序的 Hostname 字段定义。 GatewayClass MUST 对任何 TLS 握手使用与所有可用证书匹配的最长 SNI。 支持:Core |
15.1.8. .spec.listeners[].allowedRoutes 复制链接链接已复制到粘贴板!
- 描述
allowedRoutes 定义 MAY 附加到 Listener 和存在这些 Route 资源的可信命名空间的路由类型。
虽然客户端请求可能与多个路由规则匹配,但只有一条规则最终可能会收到请求。匹配优先级必须按以下条件顺序决定:
- 最具体的匹配,如 Route 类型所定义。
- 基于创建时间戳的最旧的路由。例如,创建时间戳为 "2020-09-08 01:02:03" 的路由优先于创建时间戳为 "2020-09-08 01:02:04"。
- 如果其余内容都等效,则路由以字母顺序(命名空间/名称)首先显示。例如,foo/bar 优先于 foo/baz。
应实施附加到此 Listener 的 Route 中的所有有效规则。可以忽略无效的 Route 规则(有时意味着完整的路由)。如果 Route 规则从 valid 转换为无效,则应该丢弃对该 Route 规则的支持以确保一致性。例如,即使 Route 规则指定的过滤器无效,该路由中的其余规则应该仍然被支持。
支持:Core
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| kind 指定允许绑定到此网关 Listener 的组和路由类型。如果未指定或为空,则使用 Listener 协议决定选择的路由类型。 RouteGroupKind MUST 与 Listener 协议 字段中指定的应用程序协议兼容的路由类型对应。如果实现不支持或识别此资源类型,则必须将这个 Listener 的 "ResolvedRefs" 条件设置为 False,原因为 "InvalidRouteKinds"。 支持:Core |
|
| RouteGroupKind 表示组和 Route 资源的类型。 |
|
| 命名空间表示可以从哪个路由附加到此 Listener 的命名空间。默认情况下,这仅限于此网关的命名空间。 支持:Core |
15.1.9. .spec.listeners[].allowedRoutes.kinds 复制链接链接已复制到粘贴板!
- 描述
kind 指定允许绑定到此网关 Listener 的组和路由类型。如果未指定或为空,则使用 Listener 协议决定选择的路由类型。
RouteGroupKind MUST 与 Listener 协议 字段中指定的应用程序协议兼容的路由类型对应。如果实现不支持或识别此资源类型,则必须将这个 Listener 的 "ResolvedRefs" 条件设置为 False,原因为 "InvalidRouteKinds"。
支持:Core
- 类型
-
数组
15.1.10. .spec.listeners[].allowedRoutes.kinds[] 复制链接链接已复制到粘贴板!
- 描述
- RouteGroupKind 表示组和 Route 资源的类型。
- 类型
-
object
- 必填
-
kind
-
属性 | 类型 | 描述 |
---|---|---|
|
| group 是 Route 的组。 |
|
| kind 是 Route 的种类。 |
15.1.11. .spec.listeners[].allowedRoutes.namespaces 复制链接链接已复制到粘贴板!
- 描述
命名空间表示可以从哪个路由附加到此 Listener 的命名空间。默认情况下,这仅限于此网关的命名空间。
支持:Core
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| from 表示为这个网关选择 Routes 的位置。可能的值有: :此网关都可以使用所有命名空间中的 all: 路由。* selector: 由选择器选择的命名空间中的路由可以被此网关使用。* 相同:只有同一命名空间中的路由可以被这个网关使用。 支持:Core |
|
| 当 From 设置为 "Selector" 时,必须指定选择器。在这种情况下,只有与这个 Selector 匹配的命名空间中的 Routes 才会被这个网关选择。对于"From"的其他值,会忽略此字段。 支持:Core |
- 描述
当 From 设置为 "Selector" 时,必须指定选择器。在这种情况下,只有与这个 Selector 匹配的命名空间中的 Routes 才会被这个网关选择。对于"From"的其他值,会忽略此字段。
支持:Core
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| matchExpressions 是标签选择器要求列表。要求的逻辑关系是 AND。 |
|
| 标签选择器要求是一个选择器,其中包含与键和值相关的值、键和值。 |
|
| matchLabels 是 {key,value} 对的映射。MatchLabels 映射中的单个 {key,value} 等同于 matchExpressions 的一个元素,其 key 字段是 "key",运算符是 "In",值数组仅包含 "value"。要求的逻辑关系是 AND。 |
- 描述
- matchExpressions 是标签选择器要求列表。要求的逻辑关系是 AND。
- 类型
-
数组
- 描述
- 标签选择器要求是一个选择器,其中包含与键和值相关的值、键和值。
- 类型
-
object
- 必填
-
key
-
operator
-
属性 | 类型 | 描述 |
---|---|---|
|
| key 是选择器应用到的标签键。 |
|
| 运算符代表一个键与一组值的关系。有效的运算符是 In、NotIn、Exists 和 DoesNotExist。 |
|
| 值是字符串值的数组。如果运算符是 In 或 NotIn,则值数组必须是非空的。如果运算符是 Exists 或 DoesNotExist,则值数组必须为空。这个数组会在策略性合并补丁中被替换。 |
15.1.15. .spec.listeners[].tls 复制链接链接已复制到粘贴板!
- 描述
TLS 是 Listener 的 TLS 配置。如果 Protocol 字段是 "HTTPS" 或 "TLS",则需要此字段。如果 Protocol 字段是 "HTTP", "TCP", 或 "UDP",则设置此字段无效。
GatewayTLSConfig 中定义的 SNI 与 GatewayTLSConfig 中定义的证书根据此监听程序的 Hostname 字段定义。
GatewayClass MUST 对任何 TLS 握手使用与所有可用证书匹配的最长 SNI。
支持:Core
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| CertificateRefs 包含一系列对包含 TLS 证书和私钥的 Kubernetes 对象的引用。这些证书用于为与关联监听程序的主机名匹配的请求建立 TLS 握手。 对 Kubernetes Secret 的单个 CertificateRef 具有 "Core" 支持。实现 MAY 选择支持将多个证书附加到 Listener,但此行为是特定于实现的。 对不同命名空间中的资源的引用是无效的 UNLESS,目标命名空间中有一个参考Grant,允许附加证书。如果 ReferenceGrant 不允许此引用,则此监听器的 "ResolvedRefs" 条件必须为 False,原因为 "RefNotPermitted"。 当模式被设置为 "Terminate" (默认),且是可选的时,需要至少有一个元素。 CertificateRefs 可以引用标准 Kubernetes 资源,如 Secret 或特定于实现的自定义资源。 Support: Core - 对类型为 kubernetes.io/tls 的 Kubernetes Secret 的单一引用 支持:特定于实施的(而不是一个参考或其他资源类型) |
|
| SecretObjectReference 识别一个 API 对象,包括其命名空间,默认为 Secret。 API 对象必须在集群中有效;集群中必须注册 Group 和 Kind,以便此引用有效。 对具有无效 Group 和 Kind 的对象的引用无效,且必须由实施被拒绝,并在包含对象上设置适当的 Conditions。 |
|
| mode 定义客户端启动的 TLS 会话的 TLS 行为。有两种可能模式: - 终止:下游客户端和网关之间的 TLS 会话在网关终止。此模式需要以某种方式指定证书,如填充 certificateRefs 字段。- Passthrough:TLS 会话不会由网关终止。这意味着网关无法解码 TLS 流,但 TLS 协议的 ClientHello 消息除外。这个模式中会忽略 certificateRefs 字段。 支持:Core |
|
| 选项是键/值对列表,用于为每个实现启用扩展 TLS 配置。例如,配置最小 TLS 版本或支持的密码套件。
API 将定义一组通用密钥 MAY。为了避免任何模糊的实现特定实施定义,需要使用域前缀名称,如 支持:特定于实施 |
15.1.16. .spec.listeners[].tls.certificateRefs 复制链接链接已复制到粘贴板!
- 描述
CertificateRefs 包含一系列对包含 TLS 证书和私钥的 Kubernetes 对象的引用。这些证书用于为与关联监听程序的主机名匹配的请求建立 TLS 握手。
对 Kubernetes Secret 的单个 CertificateRef 具有 "Core" 支持。实现 MAY 选择支持将多个证书附加到 Listener,但此行为是特定于实现的。
对不同命名空间中的资源的引用是无效的 UNLESS,目标命名空间中有一个参考Grant,允许附加证书。如果 ReferenceGrant 不允许此引用,则此监听器的 "ResolvedRefs" 条件必须为 False,原因为 "RefNotPermitted"。
当模式被设置为 "Terminate" (默认),且是可选的时,需要至少有一个元素。
CertificateRefs 可以引用标准 Kubernetes 资源,如 Secret 或特定于实现的自定义资源。
Support: Core - 对类型为 kubernetes.io/tls 的 Kubernetes Secret 的单一引用
支持:特定于实施的(而不是一个参考或其他资源类型)
- 类型
-
数组
15.1.17. .spec.listeners[].tls.certificateRefs[] 复制链接链接已复制到粘贴板!
- 描述
SecretObjectReference 识别一个 API 对象,包括其命名空间,默认为 Secret。
API 对象必须在集群中有效;集群中必须注册 Group 和 Kind,以便此引用有效。
对具有无效 Group 和 Kind 的对象的引用无效,且必须由实施被拒绝,并在包含对象上设置适当的 Conditions。
- 类型
-
object
- 必填
-
name
-
属性 | 类型 | 描述 |
---|---|---|
|
| 组是引用的组。例如:"gateway.networking.k8s.io"。如果未指定或空字符串时,核心 API 组将被推断出来。 |
|
| kind 是引用的类型。例如 "Secret"。 |
|
| name 是引用的名称。 |
|
| namespace 是引用对象的命名空间。如果未指定,本地命名空间将被推断出来。 请注意,当指定与本地命名空间不同的命名空间时,引用命名空间中需要一个 ReferenceGrant 对象,以允许该命名空间的所有者接受引用。详情请查看 ReferenceGrant 文档。 支持:Core |
15.1.18. .status 复制链接链接已复制到粘贴板!
- 描述
- Status 定义网关的当前状态。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| addresses 列出已绑定到网关的网络地址。 这个列表可能与某些条件下 spec 中提供的地址不同: * 没有指定地址,所有地址都会被动态分配为指定地址的组合,并分配动态地址的 * 一个指定的地址不可用(例如已在使用中) |
|
| GatewayStatusAddress 描述了绑定到网关的网络地址。 |
|
| 条件描述了网关的当前条件。
实现应该更喜欢使用 已知条件类型是: * "accepted" * "Programmed" * "Ready" |
|
| condition 包含此 API 资源当前状态的一个方面的详细信息。 |
|
| 监听器为 Spec 中定义的每个唯一监听程序端口提供状态。 |
|
| ListenerStatus 是与 Listener 关联的状态。 |
15.1.19. .status.addresses 复制链接链接已复制到粘贴板!
- 描述
addresses 列出已绑定到网关的网络地址。
这个列表可能与某些条件下 spec 中提供的地址不同:
- 未指定地址,将动态分配所有地址
- 分配指定和动态地址的组合
- 指定的地址不可用(例如已在使用中)
- 类型
-
array
15.1.20. .status.addresses[] 复制链接链接已复制到粘贴板!
- 描述
- GatewayStatusAddress 描述了绑定到网关的网络地址。
- 类型
-
object
- 必填
-
value
-
属性 | 类型 | 描述 |
---|---|---|
|
| 地址的类型。 |
|
| 地址值。值的有效性取决于控制器的类型和支持。
示例:1.2. |
15.1.21. .status.conditions 复制链接链接已复制到粘贴板!
- 描述
条件描述了网关的当前条件。
实现应该更喜欢使用
GatewayConditionType
和GatewayConditionReason
常量来表达网关条件,以便操作员和工具可以聚合到通用 vocabulary 来描述网关状态。已知条件类型是:
- "accepted"
- "programmed"
- "ready"
- 类型
-
array
15.1.22. .status.conditions[] 复制链接链接已复制到粘贴板!
- 描述
- condition 包含此 API 资源当前状态的一个方面的详细信息。
- 类型
-
object
- 必填
-
lastTransitionTime
-
message
-
reason
-
status
-
type
-
属性 | 类型 | 描述 |
---|---|---|
|
| lastTransitionTime 是条件从一个状态转换到另一个状态最后一次的时间。这应该是底层条件变化的时间。如果为未知,则使用 API 字段更改的时间是可以接受的。 |
|
| Message 是人类可读的消息,指示有关转换的详细信息。这可能是一个空字符串。 |
|
| observedGeneration 代表 .metadata.generation,这是条件设置所基于的条件。例如,如果 .metadata.generation 目前为 12,但 .status.conditions[x].observedGeneration 是 9,则代表条件与实例的当前状态已不匹配。 |
|
| reason 包含程序标识符,指示条件最后一次转换的原因。特定条件类型的制作者可能会定义预期的值和此字段的含义,以及这些值是否被视为有保证的 API。该值应该是 CamelCase 字符串。此字段可能不是空的。 |
|
| 条件的状态,True, False, Unknown 之一。 |
|
| CamelCase 或 foo.example.com/CamelCase 中的条件类型。 |
15.1.23. .status.listeners 复制链接链接已复制到粘贴板!
- 描述
- 监听器为 Spec 中定义的每个唯一监听程序端口提供状态。
- 类型
-
数组
15.1.24. .status.listeners[] 复制链接链接已复制到粘贴板!
- 描述
- ListenerStatus 是与 Listener 关联的状态。
- 类型
-
object
- 必填
-
attachedRoutes
-
conditions
-
name
-
supportedKinds
-
属性 | 类型 | 描述 |
---|---|---|
|
| AttachedRoutes 代表已成功附加到此 Listener 的路由总数。 成功将路由附加到 Listener 只会基于相应 Listener 和 Route 的 ParentRefs 字段上的 AllowedRoutes 字段的组合。当一个 Route 被 Listener 的 AllowedRoutes 字段选择,并且 Route 有一个有效的 ParentRef 选择整个网关资源,或一个特定的 Listener 作为父资源(可在各种 Route 类型 ParentRefs 字段的文档中找到它)。监听器或 Route 状态不会影响成功附加,即对于带有 condition Accepted: false 和 MUST 计数的 Listeners 设置 AttachedRoutes 字段数。 此字段使用包括对 Route 附加进行故障排除,并测量对 Listener 的更改的影响。 |
|
| 条件描述了此侦听器的当前条件。 |
|
| condition 包含此 API 资源当前状态的一个方面的详细信息。 |
|
| name 是此状态对应的 Listener 的名称。 |
|
| SupportedKinds 是指示此监听程序支持的 Kinds 的列表。这必须代表支持该 Listener 配置的实施。 如果在不支持的 Spec 中指定类型,它们必须不会出现在此列表中,并且实施必须将 "ResolvedRefs" 条件设置为 "False",并带有 "InvalidRouteKinds" 原因。如果同时指定了有效和无效的 Route 类型,实现必须引用指定的有效 Route 类型。 |
|
| RouteGroupKind 表示组和 Route 资源的类型。 |
15.1.25. .status.listeners[].conditions 复制链接链接已复制到粘贴板!
- 描述
- 条件描述了此侦听器的当前条件。
- 类型
-
数组
15.1.26. .status.listeners[].conditions[] 复制链接链接已复制到粘贴板!
- 描述
- condition 包含此 API 资源当前状态的一个方面的详细信息。
- 类型
-
object
- 必填
-
lastTransitionTime
-
message
-
reason
-
status
-
type
-
属性 | 类型 | 描述 |
---|---|---|
|
| lastTransitionTime 是条件从一个状态转换到另一个状态最后一次的时间。这应该是底层条件变化的时间。如果为未知,则使用 API 字段更改的时间是可以接受的。 |
|
| Message 是人类可读的消息,指示有关转换的详细信息。这可能是一个空字符串。 |
|
| observedGeneration 代表 .metadata.generation,这是条件设置所基于的条件。例如,如果 .metadata.generation 目前为 12,但 .status.conditions[x].observedGeneration 是 9,则代表条件与实例的当前状态已不匹配。 |
|
| reason 包含程序标识符,指示条件最后一次转换的原因。特定条件类型的制作者可能会定义预期的值和此字段的含义,以及这些值是否被视为有保证的 API。该值应该是 CamelCase 字符串。此字段可能不是空的。 |
|
| 条件的状态,True, False, Unknown 之一。 |
|
| CamelCase 或 foo.example.com/CamelCase 中的条件类型。 |
15.1.27. .status.listeners[].supportedKinds 复制链接链接已复制到粘贴板!
- 描述
SupportedKinds 是指示此监听程序支持的 Kinds 的列表。这必须代表支持该 Listener 配置的实施。
如果在不支持的 Spec 中指定类型,它们必须不会出现在此列表中,并且实施必须将 "ResolvedRefs" 条件设置为 "False",并带有 "InvalidRouteKinds" 原因。如果同时指定了有效和无效的 Route 类型,实现必须引用指定的有效 Route 类型。
- 类型
-
数组
15.1.28. .status.listeners[].supportedKinds[] 复制链接链接已复制到粘贴板!
- 描述
- RouteGroupKind 表示组和 Route 资源的类型。
- 类型
-
object
- 必填
-
kind
-
属性 | 类型 | 描述 |
---|---|---|
|
| group 是 Route 的组。 |
|
| kind 是 Route 的种类。 |