第 22 章 Route [route.openshift.io/v1]
- 描述
通过路由,开发人员可以通过 HTTP (S)了解负载平衡和代理层通过公共 DNS 条目公开服务。路由可以进一步指定 TLS 选项和证书,或者指定路由器也应该接受 HTTP 和 HTTPS 流量的公共 CNAME。管理员通常将其路由器配置为在集群防火墙外可见,还可在服务内容上添加额外的安全性、缓存或流量控制。路由器通常直接与服务端点通信。
创建路由后,可能不会更改
host
字段。通常,路由器在解析冲突时使用带有给定主机的最旧的路由。路由器受到额外的自定义,可以通过 annotations 字段支持其他控制。
由于管理员可以配置多个路由器,因此路由状态字段用于向客户端返回每个路由器下路由的名称和状态的信息。如果客户端选择重复的名称,例如,则使用路由状态条件来指示无法选择路由。
要在路由上启用 HTTP/2 ALPN,它需要自定义(非通配符)证书。这可防止客户端的连接并发,特别是 Web 浏览器。由于连接重新使用的风险,我们不支持使用默认证书的 HTTP/2 ALPN。没有其自身自定义证书的路由在前端或后端上都不会是启用了 HTTP/2 ALPN 的路由。
兼容性级别 1:在主发行版本中至少提供 12 个月或 3 个次版本(以更长的时间为准)。
- 类型
-
object
- 必填
-
spec
-
22.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 |
| metadata 是标准对象的元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata | |
|
| RouteSpec 描述了路由公开的主机名或路径、任何安全信息,以及到路由指向的四个后端(服务)。根据分配给每个后端的权重在后端间分布请求。当使用 roundrobin 调度进入每个后端的请求部分时,后端权重会除以所有后端权重的总和。当后端有多个端点时,后端结束的请求会在端点之间循环分布。权重介于 0 到 256 之间,默认为 100。权重 0 会导致请求到后端。如果所有权重都为零,则路由将被视为没有后端并返回标准 503 响应。
|
|
| RouteStatus 提供有关路由状态的相关信息,包括确认哪个路由器。 |
22.1.1. .spec
- 描述
RouteSpec 描述了路由公开的主机名或路径、任何安全信息,以及到路由指向的四个后端(服务)。根据分配给每个后端的权重在后端间分布请求。当使用 roundrobin 调度进入每个后端的请求部分时,后端权重会除以所有后端权重的总和。当后端有多个端点时,后端结束的请求会在端点之间循环分布。权重介于 0 到 256 之间,默认为 100。权重 0 会导致请求到后端。如果所有权重都为零,则路由将被视为没有后端并返回标准 503 响应。
tls
字段是可选的,允许路由的特定证书或行为。路由器通常在通配符域中配置默认证书,以在没有显式证书的情况下终止路由,但自定义主机名通常必须选择 passthrough (通过 TLS Server-Name- Indication 字段向后端发送流量)或提供证书。- 类型
-
object
- 必填
-
至
-
属性 | 类型 | 描述 |
---|---|---|
|
| alternateBackends 允许最多 3 个额外的后端分配给路由。只允许 Service kind,它将默认为 Service。使用 RouteTargetReference 对象中的 weight 字段指定相对的首选项。 |
|
| RouteTargetReference 指定解析为端点的目标。只允许 'Service' kind。使用"weight"字段加重其他字段。 |
|
| 主机是一个指向该服务的别名/DNS。可选。如果没有指定路由名称,则通常会自动选择。必须遵循 DNS952 子域惯例。 |
|
| RouteHTTPHeaders 为 HTTP 标头定义策略。 |
|
| 路由器监视的路径,将流量路由到该服务的流量。选填 |
|
| RoutePort 定义从路由器到服务端点中的端点的端口映射。 |
|
| 子域是在入口控制器的域(作为子域)中请求的 DNS 子域。如果设置 host,则忽略此字段。入口控制器可能会选择忽略这个建议的名称,在这种情况下,控制器会在 status.ingress 数组中报告分配的名称,或拒绝接受该路由。如果设置了这个值,且服务器不支持此字段,主机则会自动填充。否则主机将留空。该字段可能有多个以点分开的部分,但并非所有入口控制器都遵守请求。创建后无法更改此字段,但具有更新路由/自定义主机权限的用户除外。
示例:子域 |
|
| TLSConfig 定义用于保护路由并提供终止的配置 |
|
| RouteTargetReference 指定解析为端点的目标。只允许 'Service' kind。使用"weight"字段加重其他字段。 |
|
| 用于路由的通配符策略。目前只允许 'Subdomain' 或 'None'。 |
22.1.2. .spec.alternateBackends
- 描述
- alternateBackends 允许最多 3 个额外的后端分配给路由。只允许 Service kind,它将默认为 Service。使用 RouteTargetReference 对象中的 weight 字段指定相对的首选项。
- 类型
-
array
22.1.3. .spec.alternateBackends[]
- 描述
- RouteTargetReference 指定解析为端点的目标。只允许 'Service' kind。使用"weight"字段加重其他字段。
- 类型
-
object
- 必填
-
kind
-
name
-
属性 | 类型 | 描述 |
---|---|---|
|
| 路由引用的目标种类。目前,只允许 'Service' |
|
| 要引用的服务/目标的名称,如服务的名称 |
|
| weight 作为 0 到 256 之间的整数,默认 100 指定针对其他目标引用对象的目标相对权重。0 会阻止请求进入此后端。 |
22.1.4. .spec.httpHeaders
- 描述
- RouteHTTPHeaders 为 HTTP 标头定义策略。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| RouteHTTPHeaderActions 定义 HTTP 请求和响应标头的操作配置。 |
22.1.5. .spec.httpHeaders.actions
- 描述
- RouteHTTPHeaderActions 定义 HTTP 请求和响应标头的操作配置。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
|
request 是要修改的 HTTP 请求标头列表。目前,操作可以定义为 |
|
| RouteHTTPHeader 指定设置或删除 HTTP 标头的配置。 |
|
|
response 是要修改的 HTTP 响应标头列表。目前,操作可以定义为 |
|
| RouteHTTPHeader 指定设置或删除 HTTP 标头的配置。 |
22.1.6. .spec.httpHeaders.actions.request
- 描述
-
request 是要修改的 HTTP 请求标头列表。目前,操作可以定义为
Set
或Delete
标头值。此处定义的操作将修改通过路由发出的所有请求的请求标头。这些操作应用于集群内定义的特定路由,例如通过路由进行的连接。目前,操作可以定义为Set
或Delete
标头值。路由操作将在请求标头的 IngressController 操作后执行。操作按此列表中定义的序列应用。可以配置最多 20 个请求标头操作。您可以使用此字段指定在将连接从客户端转发到应用程序时应设置或删除的 HTTP 请求标头。允许的示例获取器为 "req.hdr" 和 "ssl_c_der"。允许的转换器是 "lower" 和 "base64"。标头值示例:"%[req.hdr (X-target),lower]", "%{+Q}[ssl_c_der,base64]"。使用此 API 直接通过 Route 资源应用的任何请求标头配置都会覆盖通过 IngressController 或路由注解上 spec.httpHeaders.actions 应用的名称相同的标头配置。注: 如果您的路由使用 TLS 透传,则无法使用此字段。 - 类型
-
数组
22.1.7. .spec.httpHeaders.actions.request[]
- 描述
- RouteHTTPHeader 指定设置或删除 HTTP 标头的配置。
- 类型
-
object
- 必填
-
名称
-
action
-
属性 | 类型 | 描述 |
---|---|---|
|
| RouteHTTPHeaderActionUnion 指定对 HTTP 标头执行的操作。 |
|
| name 指定要对其执行操作的标头名称。其值必须是 RFC 2616 第 4.2 部分中定义的有效 HTTP 标头名称。名称只能包含字母数字字符及以下特殊字符 "-!这个问题$%&'*+.^_'"。以下标头名称会被保留,可能无法通过此 API 修改: Strict-Transport-Security、Proxy、Cookie、Set-Cookie。它长度不得超过 255 个字符。标头名称必须是唯一的。 |
22.1.8. .spec.httpHeaders.actions.request[].action
- 描述
- RouteHTTPHeaderActionUnion 指定对 HTTP 标头执行的操作。
- 类型
-
object
- 必填
-
type
-
属性 | 类型 | 描述 |
---|---|---|
|
| RouteSetHTTPHeader 指定在 HTTP 标头上需要设置什么值。 |
|
| type 定义要在标头中应用的操作类型。可能的值有 Set 或 Delete。设置允许您设置 HTTP 请求和响应标头。通过删除,您可以删除 HTTP 请求和响应标头。 |
22.1.9. .spec.httpHeaders.actions.request[].action.set
- 描述
- RouteSetHTTPHeader 指定在 HTTP 标头上需要设置什么值。
- 类型
-
object
- 必填
-
value
-
属性 | 类型 | 描述 |
---|---|---|
|
| value 指定标头值。可以添加动态值。该值将解释为 http://cbonte.github.io/haproxy-dconv/2.6/configuration.html#8.2.6 中定义的 HAProxy 格式字符串,并可能使用 HAProxy 的 %[] 语法,否则必须是 https://datatracker.ietf.org/doc/html/rfc7230#section-3.2 中定义的有效 HTTP 标头值。此字段的值长度不得超过 16384 个字符。请注意,在相互隔离动态值后,所有 net 添加标头的总大小不能超过 IngressController 上的 spec.tuningOptions.headerBufferMaxRewriteBytes 的值。 |
22.1.10. .spec.httpHeaders.actions.response
- 描述
-
response 是要修改的 HTTP 响应标头列表。目前,操作可以定义为
Set
或Delete
标头值。此处定义的操作将修改通过路由发出的所有请求的响应标头。这些操作应用于集群内定义的特定路由,例如通过路由进行的连接。路由操作将在响应标头的 IngressController 操作之前执行。操作按此列表中定义的序列应用。可以配置最多 20 个响应标头操作。您可以使用此字段指定在将应用程序中的响应转发到客户端时应设置或删除的 HTTP 响应标头。允许的示例 fetchers 是 "res.hdr" 和 "ssl_c_der"。允许的转换器是 "lower" 和 "base64"。示例标题值:"%[res.hdr (X-target),lower]", "%{+Q}[ssl_c_der,base64]"。注: 如果您的路由使用 TLS 透传,则无法使用此字段。 - 类型
-
数组
22.1.11. .spec.httpHeaders.actions.response[]
- 描述
- RouteHTTPHeader 指定设置或删除 HTTP 标头的配置。
- 类型
-
object
- 必填
-
名称
-
action
-
属性 | 类型 | 描述 |
---|---|---|
|
| RouteHTTPHeaderActionUnion 指定对 HTTP 标头执行的操作。 |
|
| name 指定要对其执行操作的标头名称。其值必须是 RFC 2616 第 4.2 部分中定义的有效 HTTP 标头名称。名称只能包含字母数字字符及以下特殊字符 "-!这个问题$%&'*+.^_'"。以下标头名称会被保留,可能无法通过此 API 修改: Strict-Transport-Security、Proxy、Cookie、Set-Cookie。它长度不得超过 255 个字符。标头名称必须是唯一的。 |
22.1.12. .spec.httpHeaders.actions.response[].action
- 描述
- RouteHTTPHeaderActionUnion 指定对 HTTP 标头执行的操作。
- 类型
-
object
- 必填
-
type
-
属性 | 类型 | 描述 |
---|---|---|
|
| RouteSetHTTPHeader 指定在 HTTP 标头上需要设置什么值。 |
|
| type 定义要在标头中应用的操作类型。可能的值有 Set 或 Delete。设置允许您设置 HTTP 请求和响应标头。通过删除,您可以删除 HTTP 请求和响应标头。 |
22.1.13. .spec.httpHeaders.actions.response[].action.set
- 描述
- RouteSetHTTPHeader 指定在 HTTP 标头上需要设置什么值。
- 类型
-
object
- 必填
-
value
-
属性 | 类型 | 描述 |
---|---|---|
|
| value 指定标头值。可以添加动态值。该值将解释为 http://cbonte.github.io/haproxy-dconv/2.6/configuration.html#8.2.6 中定义的 HAProxy 格式字符串,并可能使用 HAProxy 的 %[] 语法,否则必须是 https://datatracker.ietf.org/doc/html/rfc7230#section-3.2 中定义的有效 HTTP 标头值。此字段的值长度不得超过 16384 个字符。请注意,在相互隔离动态值后,所有 net 添加标头的总大小不能超过 IngressController 上的 spec.tuningOptions.headerBufferMaxRewriteBytes 的值。 |
22.1.14. .spec.port
- 描述
- RoutePort 定义从路由器到服务端点中的端点的端口映射。
- 类型
-
object
- 必填
-
targetPort
-
属性 | 类型 | 描述 |
---|---|---|
| 此路由所指向的服务选择的 pod 上的目标端口。如果这是字符串,它会在目标端点端口列表中作为命名的端口进行查找。必填 |
22.1.15. .spec.tls
- 描述
- TLSConfig 定义用于保护路由并提供终止的配置
- 类型
-
object
- 必填
-
termination
-
属性 | 类型 | 描述 |
---|---|---|
|
| caCertificate 提供证书颁发机构证书内容 |
|
| 证书提供证书内容。这应该是单一服务证书,而不是证书链。不要包括 CA 证书。 |
|
| destinationCACertificate 提供最终目的地的 ca 证书的内容。使用重新加密终止时,应提供此文件,以便让路由器将它用于安全连接上的健康检查。如果没有指定此字段,路由器可能会提供自己的目标 CA,并使用短服务名称(service.namespace.svc)执行主机名验证,它允许基础架构生成的证书自动验证。 |
|
| LocalObjectReference 包含足够信息,供您在同一命名空间中找到引用的对象。 |
|
| insecureEdgeTerminationPolicy 表示路由不安全连接所需的行为。虽然每个路由器可能会对要公开的端口做出自己的决定,但通常这是端口 80。 如果路由没有指定 insecureEdgeTerminationPolicy,则默认行为是 "None"。 * allow - 流量发送到不安全端口中的服务器(仅限边缘/重新加密终止)。 * None - 在不安全的端口(默认)上不允许流量。 * Redirect - 客户端被重定向到安全端口。 |
|
| 密钥提供密钥文件内容 |
|
| termination 表示终止类型。 * edge - TLS 终止由路由器完成,http 用于与后端通信(默认)= 透传 - 在不提供 TLS 终止的路由器时直接发送到目的地,TLS 终止由路由器完成,https 用于与后端通信 注:passthrough 终止与 httpHeader 操作不兼容 |
22.1.16. .spec.tls.externalCertificate
- 描述
- LocalObjectReference 包含足够信息,供您在同一命名空间中找到引用的对象。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| 引用的名称。更多信息: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names |
22.1.17. .spec.to
- 描述
- RouteTargetReference 指定解析为端点的目标。只允许 'Service' kind。使用"weight"字段加重其他字段。
- 类型
-
object
- 必填
-
kind
-
name
-
属性 | 类型 | 描述 |
---|---|---|
|
| 路由引用的目标种类。目前,只允许 'Service' |
|
| 要引用的服务/目标的名称,如服务的名称 |
|
| weight 作为 0 到 256 之间的整数,默认 100 指定针对其他目标引用对象的目标相对权重。0 会阻止请求进入此后端。 |
22.1.18. .status
- 描述
- RouteStatus 提供有关路由状态的相关信息,包括确认哪个路由器。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
|
Ingress 描述了可公开路由的位置。ingress 点列表可能包含重复的主机或 RouterName 值。路由在就绪后被视为 |
|
| RouteIngress 包含有关公开路由的位置的信息。 |
22.1.19. .status.ingress
- 描述
-
Ingress 描述了可公开路由的位置。ingress 点列表可能包含重复的主机或 RouterName 值。路由在就绪后被视为
Ready
- 类型
-
array
22.1.20. .status.ingress[]
- 描述
- RouteIngress 包含有关公开路由的位置的信息。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| 条件是路由的状态,可能为空。 |
|
| RouteIngressCondition 包含特定路由器上此路由的当前条件的详情。 |
|
| host 是公开路由的主机字符串;需要这个值 |
|
| CanonicalHostname 是路由器的外部主机名,可用作为此路由请求的主机的 CNAME。这个值是可选的,可能不会在所有情况下设置。 |
|
| 名称是路由器选择以标识自身的名称;需要这个值 |
|
| 通配符策略是允许公开此路由的通配符策略。 |
22.1.21. .status.ingress[].conditions
- 描述
- 条件是路由的状态,可能为空。
- 类型
-
array
22.1.22. .status.ingress[].conditions[]
- 描述
- RouteIngressCondition 包含特定路由器上此路由的当前条件的详情。
- 类型
-
object
- 必填
-
type
-
status
-
属性 | 类型 | 描述 |
---|---|---|
| 当条件最后转换时的 RFC 3339 日期和时间 | |
|
| 人类可读的消息,指示最后一次转换的详细信息。 |
|
| (简洁) 条件最后一次转换的原因,通常是机器和人类可读的常量。 |
|
| status 是条件的状态。可以是 True, False, Unknown。 |
|
| type 是条件的类型。目前只有 Admitted 或 UnservableInFutureVersions。 |