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 配置。
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
,允许您知道哪个父引用集设置了该特定状态。