第 16 章 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
-
16.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 |
| ||
|
| RouteSpec 描述了路由公开的主机名或路径、任何安全信息,以及到路由指向的四个后端(服务)。根据分配给每个后端的权重在后端间分布请求。当使用 roundrobin 调度进入每个后端的请求部分时,后端权重会除以所有后端权重的总和。当后端有多个端点时,后端结束的请求会在端点之间循环分布。权重介于 0 到 256 之间,默认为 100。权重 0 会导致请求到后端。如果所有权重都为零,则路由将被视为没有后端并返回标准 503 响应。
|
|
| RouteStatus 提供有关路由状态的相关信息,包括确认哪个路由器。 |
16.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 子域惯例。 |
|
| 路由器监视的路径,将流量路由到该服务的流量。选填 |
|
| RoutePort 定义从路由器到服务端点中的端点的端口映射。 |
|
| 子域是在入口控制器的域(作为子域)中请求的 DNS 子域。如果设置 host,则忽略此字段。入口控制器可能会选择忽略这个建议的名称,在这种情况下,控制器会在 status.ingress 数组中报告分配的名称,或拒绝接受该路由。如果设置了这个值,且服务器不支持此字段,主机则会自动填充。否则主机将留空。该字段可能有多个以点分开的部分,但并非所有入口控制器都遵守请求。创建后无法更改此字段,但具有更新路由/自定义主机权限的用户除外。
示例:子域 |
|
| TLSConfig 定义用于保护路由并提供终止的配置 |
|
| RouteTargetReference 指定解析为端点的目标。只允许 'Service' kind。使用"weight"字段加重其他字段。 |
|
| 用于路由的通配符策略。目前只允许 'Subdomain' 或 'None'。 |
16.1.2. .spec.alternateBackends
- 描述
- alternateBackends 允许最多 3 个额外的后端分配给路由。只允许 Service kind,它将默认为 Service。使用 RouteTargetReference 对象中的 weight 字段指定相对的首选项。
- 类型
-
array
16.1.3. .spec.alternateBackends[]
- 描述
- RouteTargetReference 指定解析为端点的目标。只允许 'Service' kind。使用"weight"字段加重其他字段。
- 类型
-
object
- 必填
-
kind
-
name
-
属性 | 类型 | 描述 |
---|---|---|
|
| 路由引用的目标种类。目前,只允许 'Service' |
|
| 要引用的服务/目标的名称,如服务的名称 |
|
| weight 作为 0 到 256 之间的整数,默认 100 指定针对其他目标引用对象的目标相对权重。0 会阻止请求进入此后端。 |
16.1.4. .spec.port
- 描述
- RoutePort 定义从路由器到服务端点中的端点的端口映射。
- 类型
-
object
- 必填
-
targetPort
-
属性 | 类型 | 描述 |
---|---|---|
| 此路由所指向的服务选择的 pod 上的目标端口。如果这是字符串,它会在目标端点端口列表中作为命名的端口进行查找。必填 |
16.1.5. .spec.tls
- 描述
- TLSConfig 定义用于保护路由并提供终止的配置
- 类型
-
object
- 必填
-
termination
-
属性 | 类型 | 描述 |
---|---|---|
|
| caCertificate 提供证书颁发机构证书内容 |
|
| 证书提供证书内容。这应该是单一服务证书,而不是证书链。不要包括 CA 证书。 |
|
| destinationCACertificate 提供最终目的地的 ca 证书的内容。使用重新加密终止时,应提供此文件,以便让路由器将它用于安全连接上的健康检查。如果没有指定此字段,路由器可能会提供自己的目标 CA,并使用短服务名称(service.namespace.svc)执行主机名验证,它允许基础架构生成的证书自动验证。 |
|
| insecureEdgeTerminationPolicy 表示路由不安全连接所需的行为。虽然每个路由器可能会对要公开的端口做出自己的决定,但通常这是端口 80。 * Allow - 流量发送到不安全端口(默认)上的服务器,在不安全的端口上不允许禁用 - 不允许流量。* Redirect - 客户端被重定向到安全端口。 |
|
| 密钥提供密钥文件内容 |
|
| termination 表示终止类型。 * edge - TLS 终止由路由器完成,http 用于与后端通信(默认)= 透传 - 在不提供 TLS 终止的路由器时直接发送到目的地,TLS 终止由路由器完成,https 用于与后端通信 |
16.1.6. .spec.to
- 描述
- RouteTargetReference 指定解析为端点的目标。只允许 'Service' kind。使用"weight"字段加重其他字段。
- 类型
-
object
- 必填
-
kind
-
name
-
属性 | 类型 | 描述 |
---|---|---|
|
| 路由引用的目标种类。目前,只允许 'Service' |
|
| 要引用的服务/目标的名称,如服务的名称 |
|
| weight 作为 0 到 256 之间的整数,默认 100 指定针对其他目标引用对象的目标相对权重。0 会阻止请求进入此后端。 |
16.1.7. .status
- 描述
- RouteStatus 提供有关路由状态的相关信息,包括确认哪个路由器。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
|
Ingress 描述了可公开路由的位置。ingress 点列表可能包含重复的主机或 RouterName 值。路由在就绪后被视为 |
|
| RouteIngress 包含有关公开路由的位置的信息。 |
16.1.8. .status.ingress
- 描述
-
Ingress 描述了可公开路由的位置。ingress 点列表可能包含重复的主机或 RouterName 值。路由在就绪后被视为
Ready
- 类型
-
array
16.1.9. .status.ingress[]
- 描述
- RouteIngress 包含有关公开路由的位置的信息。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| 条件是路由的状态,可能为空。 |
|
| RouteIngressCondition 包含特定路由器上此路由的当前条件的详情。 |
|
| host 是公开路由的主机字符串;需要这个值 |
|
| CanonicalHostname 是路由器的外部主机名,可用作为此路由请求的主机的 CNAME。这个值是可选的,可能不会在所有情况下设置。 |
|
| 名称是路由器选择以标识自身的名称;需要这个值 |
|
| 通配符策略是允许公开此路由的通配符策略。 |
16.1.10. .status.ingress[].conditions
- 描述
- 条件是路由的状态,可能为空。
- 类型
-
array
16.1.11. .status.ingress[].conditions[]
- 描述
- RouteIngressCondition 包含特定路由器上此路由的当前条件的详情。
- 类型
-
object
- 必填
-
type
-
status
-
属性 | 类型 | 描述 |
---|---|---|
| 当条件最后转换时的 RFC 3339 日期和时间 | |
|
| 人类可读的消息,指示最后一次转换的详细信息。 |
|
| (简洁) 条件最后一次转换的原因,通常是机器和人类可读的常量。 |
|
| status 是条件的状态。可以是 True, False, Unknown。 |
|
| type 是条件的类型。目前只有 Admited。 |