×

使用传输加密功能,您可以通过使用 *传输层安全协议* (TLS) 在安全且加密的 HTTPS 连接上传输数据和事件。

用于 Eventing 的 OpenShift Serverless 传输加密仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且功能可能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围

transport-encryption 功能标志是一个 enum 配置,用于定义可寻址资源(如 Broker、Channel 和 Sink)如何接受事件。它控制可寻址资源是否必须根据所选设置通过 HTTP 或 HTTPS 接受事件。

transport-encryption 的可能值如下所示

描述

disabled

  • 可寻址资源可以接受到 HTTPS 端点的事件。

  • 生产者可以向 HTTPS 端点发送事件。

permissive

  • 可寻址资源必须同时接受 HTTP 和 HTTPS 端点的事件。

  • 可寻址资源必须同时宣传 HTTP 和 HTTPS 端点。

  • 如果可用,生产者必须向 HTTPS 端点发送事件。

strict

  • 可寻址资源不得接受非 HTTPS 端点的事件。

  • 可寻址资源只能宣传 HTTPS 端点。

为 Eventing 创建 SelfSigned ClusterIssuer 资源

ClusterIssuers 是 Kubernetes 资源,代表可以生成签名证书(通过遵守证书签名请求)的证书颁发机构 (CA)。所有 cert-manager 证书都需要一个处于就绪状态的引用颁发者才能尝试处理请求。更多详细信息,请参阅 颁发者

为简便起见,此过程使用SelfSigned 颁发者作为根证书颁发机构。有关SelfSigned 颁发者含义和限制的更多详细信息,请参阅 SelfSigned 颁发者。如果您使用的是自定义公钥基础设施 (PKI),则必须对其进行配置,使其私有签名的 CA 证书可在整个集群中识别。有关 cert-manager 的更多详细信息,请参阅 证书颁发机构 (CA)。您可以使用任何其他可用于集群本地服务的颁发者。

先决条件
  • 您在 OpenShift Container Platform 上具有集群管理员权限,或者您在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。

  • 您已安装 OpenShift Serverless 运算符。

  • 您已为 Red Hat OpenShift 安装 cert-manager 运算符。

  • 您已安装 OpenShift (oc) CLI。

步骤
  1. 按如下所示创建SelfSigned ClusterIssuer 资源

    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: knative-eventing-selfsigned-issuer
    spec:
      selfSigned: {}
  2. 通过运行以下命令应用ClusterIssuer 资源

    $ oc apply -f <filename>
  3. 按如下所示使用SelfSigned ClusterIssuer 资源创建根证书

    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: knative-eventing-selfsigned-ca
      namespace: cert-manager (1)
    spec:
      secretName: knative-eventing-ca (2)
      isCA: true
      commonName: selfsigned-ca
      privateKey:
        algorithm: ECDSA
        size: 256
      issuerRef:
        name: knative-eventing-selfsigned-issuer
        kind: ClusterIssuer
        group: cert-manager.io
    1 指定默认使用的 Red Hat OpenShift 的 cert-manager 运算符。
    2 指定存储证书的密钥。该名称稍后将由 Eventing 的ClusterIssuer 使用。
  4. 通过运行以下命令应用Certificate 资源

    $ oc apply -f <filename>

为 Eventing 创建 ClusterIssuer 资源

ClusterIssuers 是 Kubernetes 资源,代表可以生成签名证书(通过遵守证书签名请求)的证书颁发机构 (CA)。

先决条件
  • 您在 OpenShift Container Platform 上具有集群管理员权限,或者您在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。

  • 您已安装 OpenShift Serverless 运算符。

  • 您已为 Red Hat OpenShift 安装 cert-manager 运算符。

  • 您已安装 OpenShift (oc) CLI。

步骤
  1. 按如下所示创建knative-eventing-ca-issuer ClusterIssuer 资源

    每个 Eventing 组件都使用此颁发者来颁发其服务器的证书。

    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: knative-eventing-ca-issuer
    spec:
      ca:
        secretName: knative-eventing-ca (1)
    1 cert-manager 命名空间(Red Hat OpenShift 的 cert-manager 运算符的默认值)中的secretName 值包含 Knative Eventing 组件可使用的证书。

    ClusterIssuer 名称必须为knative-eventing-ca-issuer

  2. 通过运行以下命令应用ClusterIssuer 资源

    $ oc apply -f <filename>

为 Knative Eventing 启用传输加密

您可以通过将KnativeEventing 中的transport-encryption 功能设置为strict 来启用传输加密。

先决条件
  • 您在 OpenShift Container Platform 上具有集群管理员权限,或者您在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。

  • 您已安装 OpenShift Serverless 运算符。

  • 您已为 Red Hat OpenShift 安装 cert-manager 运算符。

  • 您已安装 OpenShift (oc) CLI。

步骤
  1. 按如下所示在KnativeEventing 中启用transport-encryption

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
    
      # Other spec fields omitted ...
      # ...
    
      config:
        features:
          transport-encryption: strict
  2. 通过运行以下命令应用KnativeEventing 资源

    $ oc apply -f <filename>

配置额外的 CA 信任捆绑包

默认情况下,Eventing 客户端信任为自定义 PKI 配置的 OpenShift CA 捆绑包。更多详情,请参见 配置自定义 PKI

建立新连接时,Eventing 客户端会自动将其信任列表中包含这些 CA 捆绑包。

先决条件
  • 您在 OpenShift Container Platform 上具有集群管理员权限,或者您在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。

  • 您已安装 OpenShift Serverless 运算符。

  • 您已为 Red Hat OpenShift 安装 cert-manager 运算符。

步骤
  • 按照以下步骤为 Eventing 创建 CA 捆绑包

    kind: ConfigMap
    metadata:
      name: <my_org_eventing_bundle> (1)
      namespace: knative-eventing
      labels:
        networking.knative.dev/trust-bundle: "true"
    data: (2)
      ca.crt: ...
      ca1.crt: ...
      tls.crt: ...
    1 使用唯一名称以避免与现有或将来的 Eventing 配置映射冲突。
    2 Eventing 客户端信任所有具有有效 PEM 编码 CA 捆绑包的密钥。

配置自定义事件源以信任 Eventing CA

要创建自定义事件源,请使用 SinkBinding。SinkBinding 可以通过使用 `knative-custom-certs` 目录将配置的 CA 信任捆绑包作为投影卷注入到每个容器中。

在某些情况下,您可能需要将公司特定的 CA 信任捆绑包注入到基础容器镜像中,并自动配置运行时(例如 OpenJDK 或 Node.js 等)以信任这些 CA 捆绑包。在这种情况下,您可能不需要配置客户端。

使用前面示例中的 `my_org_eventing_bundle` 配置映射,以及 `ca.crt`、`ca1.crt` 和 `tls.crt` 数据密钥,`knative-custom-certs` 目录具有以下布局

/knative-custom-certs/ca.crt
/knative-custom-certs/ca1.crt
/knative-custom-certs/tls.crt

您可以使用这些文件将 CA 信任捆绑包添加到向 Eventing 发送事件的 HTTP 客户端。

根据您使用的运行时、编程语言或库,存在不同的方法来配置自定义 CA 证书文件,例如使用命令行标志、环境变量或读取文件内容。

将自签名 ClusterIssuer 资源添加到 CA 信任捆绑包

如果您使用的是 `SelfSigned` `ClusterIssuer` 资源,则可以将 CA 添加到 Eventing CA 信任捆绑包。

先决条件
  • 您在 OpenShift Container Platform 上具有集群管理员权限,或者您在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。

  • 您已安装 OpenShift Serverless 运算符。

  • 您已为 Red Hat OpenShift 安装 cert-manager 运算符。

  • 您已安装 OpenShift (oc) CLI。

步骤
  1. 从 Red Hat OpenShift 命名空间中的 cert-manager Operator 中导出 `knative-eventing-ca` 密钥中的 CA(默认是 `cert-manager` 证书),运行以下命令:

    $ oc get secret -n cert-manager knative-eventing-ca -o=jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
  2. 在 `knative-eventing` 命名空间中创建 CA 信任捆绑包,运行以下命令:

    $ oc create configmap -n knative-eventing my-org-selfsigned-ca-bundle --from-file=ca.crt
  3. 通过运行以下命令为 `ConfigMap` 添加标签:

    $ oc label configmap -n knative-eventing my-org-selfsigned-ca-bundle networking.knative.dev/trust-bundle=true

确保 CA 旋转无缝进行

确保 CA 旋转无缝进行对于避免服务停机或处理紧急情况至关重要。

先决条件
  • 您在 OpenShift Container Platform 上具有集群管理员权限,或者您在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。

  • 您已安装 OpenShift Serverless 运算符。

  • 您已为 Red Hat OpenShift 安装 cert-manager 运算符。

  • 您已安装 OpenShift (oc) CLI。

步骤
  1. 创建 CA 证书。

  2. 将新 CA 证书的公钥添加到 CA 信任捆绑包。

    确保您还保留现有 CA 的公钥。

  3. 确保所有客户端都使用最新的 CA 信任捆绑包。

    Knative Eventing 组件会自动重新加载更新的 CA 信任捆绑包。对于使用信任捆绑包的自定义工作负载,根据需要重新加载或重启它们。

  4. 更新 `knative-eventing-ca-issuer` `ClusterIssuer` 以引用包含您在步骤 1 中创建的 CA 证书的密钥。

  5. 强制 `cert-manager` 续订 `knative-eventing` 命名空间中的证书。

    有关 `cert-manager` 的更多信息,请参见 用户操作触发的重新颁发

  6. CA 旋转完全完成后,从信任捆绑包配置映射中删除旧 CA 的公钥。

验证 Eventing 中的传输加密

要确认传输加密已正确配置,您可以创建和测试 `InMemoryChannel` 资源。按照以下步骤确保它按预期使用 HTTPS。

先决条件
  • 您在 OpenShift Container Platform 上具有集群管理员权限,或者您在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。

  • 您已安装 OpenShift Serverless 运算符。

  • 您已为 Red Hat OpenShift 安装 cert-manager 运算符。

  • 您已安装 OpenShift (oc) CLI。

步骤
  1. 按照以下步骤创建 `InMemoryChannel` 资源:

    apiVersion: messaging.knative.dev/v1
    kind: InMemoryChannel
    metadata:
      name: transport-encryption-test
  2. 运行以下命令应用 `InMemoryChannel` 资源:

    $ oc apply -f <filename>
  3. 运行以下命令查看 `InMemoryChannel` 地址:

    $ oc get inmemorychannels.messaging.knative.dev transport-encryption-test
    示例输出
    NAME                        URL                                                                                           AGE   READY   REASON
    transport-encryption-test   https://imc-dispatcher.knative-eventing.svc.cluster.local/default/transport-encryption-test   17s   True