搜索

5.7.10.2. 安全路由

download PDF

安全路由指定路由的 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-----

1 2
对象的名称,长度限于 63 个字符。
3
termination 字段是边缘终止的边缘
4
key 字段是 PEM 格式密钥文件的内容。
5
certificate 字段是 PEM 格式证书文件的内容。
6
可能需要一个可选的 CA 证书来建立用于验证的证书链。

由于 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
    [ ... ]

1 2
对象的名称,长度限于 63 个字符。
3
termination 字段是边缘终止的边缘
4
允许在不安全的方案 HTTP 发送的请求的不安全策略。

使用 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
    [ ... ]

1 2
对象的名称,长度限于 63 个字符。
3
termination 字段是边缘终止的边缘
4
将不安全方案 HTTP 发送的请求重定向到安全方案 HTTPS 的不安全策略。

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

1 2
对象的名称,长度限于 63 个字符。
3
termination 字段设置为 passthrough。不需要其他加密字段。

目标 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-----

1 2
对象的名称,长度限于 63 个字符。
3
termination 字段设置为 reencrypt。其他字段如边缘终止中所示。
4
re-encryption. destinationCACertificate 指定一个 CA 证书来验证端点证书,保护从路由器到目标 Pod 的连接。如果服务使用服务签名证书,或者管理员为路由器指定默认 CA 证书,且服务有由该 CA 签名的证书,则可以省略此字段。

如果 destinationCACertificate 字段留空,路由器会自动利用为服务用证书生成的证书颁发机构,并注入每个 pod 作为 /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt。这允许使用端到端加密的新路由,而无需为路由生成证书。这适用于自定义路由器或 F5 路由器,这可能不允许 destinationCACertificate,除非管理员已允许它。

注意

重新加密路由可以有一个 insecureEdgeTerminationPolicy,其所有值都与 edge-terminated 路由相同。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.