跳到内容

BackendTLSPolicy

自 v1.0.0 以来处于实验频道

BackendTLSPolicy 资源处于 Alpha 阶段,自 v1.0.0 以来一直是实验频道的部分。有关发布频道的更多信息,请参阅我们的 版本控制指南

BackendTLSPolicy 是一个网关 API 类型,用于指定从网关到通过服务 API 对象的后端 Pod/s 的连接的 TLS 配置。

背景

BackendTLSPolicy 特别解决 TLS 配置,以便将 HTTPS 从网关数据平面传递到后端。这被称为“后端 TLS 终止”,使网关能够知道如何连接到具有其自身证书的后端 Pod。

虽然为 直通边缘 终止配置 TLS 提供了其他 API 对象,但此 API 对象允许用户专门配置 后端 TLS 终止。有关网关 API 中 TLS 配置的更多信息,请参阅 TLS 配置

Image showing three TLS Termination Types

BackendTLSPolicy 是一个直接的 PolicyAttachment,没有默认值或覆盖,应用于访问后端的 Service,其中 BackendTLSPolicy 位于与应用它的 Service 相同的命名空间中。BackendTLSPolicy 和 Service 必须位于相同的命名空间中,以防止跨命名空间边界共享信任所涉及的复杂性。

所有指向引用的 Service 的网关 API 路由都应遵守配置的 BackendTLSPolicy。

规范

BackendTLSPolicy 的规范包括

  • TargetRefs - 定义策略的目标 API 对象。仅允许 Service。
  • Validation - 定义 TLS 的配置,包括主机名、CACertificateRefs 和 WellKnownCACertificates。
  • Hostname - 定义网关用于连接到后端的服务名称指示 (SNI)。
  • CACertificateRefs - 定义一个或多个对包含 PEM 编码的 TLS 证书的对象的引用,这些证书用于在网关和后端 Pod 之间建立 TLS 握手。可以指定 CACertficateRefs 或 WellKnownCACertificates,但不能同时指定两者。
  • WellKnownCACertificates - 指定是否可以在网关和后端 Pod 之间的 TLS 握手中使用系统 CA 证书。可以指定 CACertficateRefs 或 WellKnownCACertificates,但不能同时指定两者。

以下图表概述了对象定义和关系

flowchart LR
    backendTLSPolicy[["<b>backendTLSPolicy</b> <hr><align=left>BackendTLSPolicySpec: spec<br>PolicyStatus: status</align>"]]
    spec[["<b>spec</b><hr>PolicyTargetReferenceWithSectionName: targetRefs <br> BackendTLSPolicyValidation: tls"]]
    status[["<b>status</b><hr>[ ]PolicyAncestorStatus: ancestors"]]
    validation[["<b>tls</b><hr>LocalObjectReference: caCertificateRefs<br>wellKnownCACertificatesType: wellKnownCACertificates/<br>PreciseHostname: hostname"]]
    ancestorStatus[["<b>ancestors</b><hr>AncestorRef: parentReference<br>GatewayController: controllerName<br>[]Condition: conditions"]]
    targetRefs[[<b>targetRefs</b><hr>]]
    service["<b>service</>"]
    backendTLSPolicy -->spec
    backendTLSPolicy -->status
    spec -->targetRefs & validation
    status -->ancestorStatus
    targetRefs -->service
    note[<em>choose only one<hr> caCerticateRefs OR wellKnownCACertificates</em>]
    style note fill:#fff
    validation -.- note

以下说明了为服务配置 TLS 的 BackendTLSPolicy,该服务为后端提供服务

flowchart LR
    client(["client"])
    gateway["Gateway"]
    style gateway fill:#02f,color:#fff
    httproute["HTTP<BR>Route"]
    style httproute fill:#02f,color:#fff
    service["Service"]
    style service fill:#02f,color:#fff
    pod1["Pod"]
    style pod1 fill:#02f,color:#fff
    pod2["Pod"]
    style pod2 fill:#02f,color:#fff
    client -.->|HTTP <br> request| gateway
    gateway --> httproute
    httproute -.->|BackendTLSPolicy|service
    service --> pod1 & pod2

目标后端

BackendTLSPolicy 通过一个或多个指向 Service 的 TargetRefs 来定位后端 Pod(或一组 Pod)。此 TargetRef 是一个必需的对象引用,它通过名称、类型 (Service) 和可选的命名空间和组来指定一个 Service。TargetRefs 标识您的 HTTPRoute 需要 TLS 的 Service/s。

限制

  • 不允许跨命名空间证书引用。

BackendTLSPolicyValidation

BackendTLSPolicyValidation 是 BackendTLSPolicy 的规范,并定义 TLS 的配置,包括主机名(用于服务器名称指示)和证书。

主机名

Hostname 定义网关应用于连接到后端的服务名称指示 (SNI),并且必须与后端 Pod 提供的证书匹配。主机名是网络主机的完全限定域名,如 [RFC 3986][rfc-3986] 中所定义。请注意以下与 RFC 中定义的 URI 的“主机”部分的偏差

  • 不允许 IP 地址。

另请注意

限制

  • 不允许使用通配符主机名。

证书

BackendTLSPolicyValidation 必须包含某种证书引用,并包含两种方式来配置用于后端 TLS 的证书,即 CACertificateRefs 和 WellKnownCACertificates。每个 BackendTLSPolicyValidation 只能使用其中之一。

CACertficateRefs

CACertificateRefs 指向一个或多个 PEM 编码的 TLS 证书。

限制

  • 不允许跨命名空间证书引用。
WellKnownCACertificates

如果您在不需要特定 TLS 证书的环境中工作,并且您的网关 API 实现允许使用系统或默认证书,例如在开发环境中,您可以将 WellKnownCACertificates 设置为“System”以告诉网关使用一组受信任的 CA 证书。每个实现使用的系统证书可能有所不同。有关更多信息,请参阅您选择的实现的文档。

策略状态

Status 定义 BackendTLSPolicy 的观察到的状态,并且不可由用户配置。以与您对其他网关 API 对象的方式相同的方式检查状态,以验证操作是否正确。请注意,BackendTLSPolicy 中的状态使用 PolicyAncestorStatus,允许您知道哪个父引用集设置了该特定状态。