5.7.10.2. 安全路由
安全路由指定路由的 TLS 终止,并可选择性地提供密钥和证书。
OpenShift Container Platform 中的 TLS 终止依赖于 SNI 来提供自定义证书。任何端口 443 上接收的非SNI 流量均使用 TLS 终止和默认证书处理(这可能与请求的主机名不匹配,从而导致验证错误)。
安全路由可以使用以下三种安全 TLS 终止类型中的任何一种:
边缘终止
使用边缘终止时,TLS 终止在将流量代理到目的地之前发生在路由器上。TLS 证书由路由器的前端提供,因此它们必须配置为路由,否则将 路由器的默认证书 用于 TLS 终止。
使用 Edge 终止的安全路由
apiVersion: v1 kind: Route metadata: name: route-edge-secured 1 spec: host: www.example.com to: kind: Service name: service-name 2 tls: termination: edge 3 key: |- 4 -----BEGIN PRIVATE KEY----- [...] -----END PRIVATE KEY----- certificate: |- 5 -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- caCertificate: |- 6 -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE-----
由于 TLS 在路由器终止,因此不会加密从路由器到端点的连接。
边缘终止的路由可以指定 insecureEdgeTerminationPolicy
,它允许禁用或重定向在不安全的方案(HTTP
)上的流量。insecureEdgeTerminationPolicy
允许的值有:无
或为空(代表禁用),允许
或重定向
。默认的 insecureEdgeTerminationPolicy
是禁用不安全方案中的流量。常见用例是允许通过安全方案提供内容,但通过不安全的方案提供资产(示例图像、样式表和 javascript)。
使用 Edge 终止的安全路由允许 HTTP 流量
apiVersion: v1 kind: Route metadata: name: route-edge-secured-allow-insecure 1 spec: host: www.example.com to: kind: Service name: service-name 2 tls: termination: edge 3 insecureEdgeTerminationPolicy: Allow 4 [ ... ]
使用 Edge 终止的安全路由将 HTTP 流量重定向到 HTTPS
apiVersion: v1 kind: Route metadata: name: route-edge-secured-redirect-insecure 1 spec: host: www.example.com to: kind: Service name: service-name 2 tls: termination: edge 3 insecureEdgeTerminationPolicy: Redirect 4 [ ... ]
passthrough 终止
如果 passthrough 终止,加密的流量会直接发送到目的地,而路由器不会提供 TLS 终止。因此不需要密钥或证书。
使用 Passthrough 终止的安全路由
apiVersion: v1 kind: Route metadata: name: route-passthrough-secured 1 spec: host: www.example.com to: kind: Service name: service-name 2 tls: termination: passthrough 3
目标 pod 负责为端点上的流量提供证书。这是目前唯一可以支持要求客户端证书的方法(也称为双向验证)。
passthrough 路由也可以具有 insecureEdgeTerminationPolicy
。唯一有效的值为 None
(或为空,代表禁用) 或重定向
。
再加密终止
再加密是边缘终止的一种变体,即路由器通过证书终止 TLS,然后再加密它与端点的连接,这可能有不同的证书。因此,连接的完整路径已被加密,即使在内部网络上。路由器使用健康检查来确定主机的真实性。
使用 Re-Encrypt 终止的安全路由
apiVersion: v1 kind: Route metadata: name: route-pt-secured 1 spec: host: www.example.com to: kind: Service name: service-name 2 tls: termination: reencrypt 3 key: [as in edge termination] certificate: [as in edge termination] caCertificate: [as in edge termination] destinationCACertificate: |- 4 -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE-----
如果 destinationCACertificate
字段留空,路由器会自动利用为服务用证书生成的证书颁发机构,并注入每个 pod 作为 /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
。这允许使用端到端加密的新路由,而无需为路由生成证书。这适用于自定义路由器或 F5 路由器,这可能不允许 destinationCACertificate
,除非管理员已允许它。
重新加密路由可以有一个 insecureEdgeTerminationPolicy
,其所有值都与 edge-terminated 路由相同。