第 11 章 管理 TLS 证书


AMQ Streams 支持使用 TLS 协议在 Kafka 和 AMQ Streams 组件之间进行加密通信。Kafka 代理(interbroker 通信)、ZooKeeper 节点之间的通信(交互通信)以及它们和 AMQ Streams 运算符之间的通信始终会被加密。Kafka 客户端和 Kafka 代理之间的通信会根据集群的配置方式加密。对于 Kafka 和 AMQ Streams 组件,也使用 TLS 证书进行身份验证。

Cluster Operator 自动设置并更新 TLS 证书,以在集群中启用加密和身份验证。如果要在 Kafka 代理和客户端间启用加密或 TLS 身份验证,它也会设置其他 TLS 证书。用户提供的证书不会被续订。

您可以为启用了 TLS 加密的 TLS 监听程序或者外部监听程序提供自己的服务器证书,称为 Kafka 侦听程序证书。如需更多信息,请参阅 第 11.8 节 “Kafka 侦听程序证书”

图 11.1. TLS 安全通信的示例架构

安全通信

11.1. 证书颁发机构

为了支持加密,每个 AMQ Streams 组件都需要自己的私钥和公钥证书。所有组件证书都由名为 集群 CA 的内部证书颁发机构(CA)签名。

同样,使用 TLS 客户端身份验证连接到 AMQ Streams 的每个 Kafka 客户端应用程序都需要提供私钥和证书。第二个内部 CA(名为 clients CA )用于为 Kafka 客户端签署证书。

11.1.1. CA 证书

集群 CA 和客户端 CA 都具有自签名证书。

Kafka 代理配置为信任由集群 CA 或客户端 CA 签名的证书。客户端不需要连接的组件,如 ZooKeeper,只信任集群 CA 签名的证书。除非禁用外部监听器的 TLS 加密,否则客户端应用必须信任集群 CA 签名的证书。对于执行 mutual TLS 身份验证 的客户端应用,也是如此。

默认情况下,AMQ Streams 会自动生成和更新集群 CA 或客户端 CA 发布的 CA 证书。您可以在 Kafka.spec. clusterCa 和 Kafka.spec.clientsCa 对象中配置这些 CA 证书的管理。用户提供的证书不会被续订。

您可以为集群 CA 或客户端 CA 提供自己的 CA 证书。如需更多信息,请参阅 第 11.1.2 节 “安装您自己的 CA 证书”。如果您提供自己的证书,则必须在需要时手动更新它们。

11.1.2. 安装您自己的 CA 证书

此流程描述了如何安装您自己的 CA 证书和密钥,而不是使用 Cluster Operator 生成的 CA 证书和私钥。

您可以使用此流程安装自己的集群或客户端 CA 证书。

流程描述了 PEM 格式的 CA 证书续订。您还可以使用 PKCS #12 格式的证书。

先决条件

  • Cluster Operator 正在运行。
  • Kafka 集群尚未部署。
  • 您自己的 X.509 证书和密钥,采用 PEM 格式用于集群 CA 或客户端 CA。

    • 如果要使用不是 Root CA 的集群或客户端 CA,您必须在证书文件中包含整个链。链应该按照以下顺序排列:

      1. 集群或客户端 CA
      2. 一个或多个中间 CA
      3. 根 CA
    • 链中的所有 CA 都应配置为 X509v3 基本约束中的 CA。

步骤

  1. 将您的 CA 证书放在对应的 Secret 中

    1. 删除现有的 secret:

      oc delete secret CA-CERTIFICATE-SECRET

      ca-CERTIFICATE-SECRETSecret 的名称,它是集群 CA 证书的CLUSTER-NAME-cluster-ca-cert,用于客户端 CA 证书的 CLUSTER-NAME-clients-ca-cert

      忽略任何"Not Exists"错误。

    2. 创建并标记新 secret

      oc create secret generic CA-CERTIFICATE-SECRET --from-file=ca.crt=CA-CERTIFICATE-FILENAME
  2. 将您的 CA 密钥放在对应的 Secret 中

    1. 删除现有的 secret:

      oc delete secret CA-KEY-SECRET

      ca-KEY-SECRET 是 CA 密钥的名称,这是 用于集群 CA 密钥的 CLUSTER-NAME -cluster-ca, 用于客户端 CA 密钥。

    2. 创建新 secret:

      oc create secret generic CA-KEY-SECRET --from-file=ca.key=CA-KEY-SECRET-FILENAME
  3. 使用 labels strimzi.io/kind=Kafkastrimzi.io/cluster=CLUSTER-NAME 标记 secret:

    oc label secret CA-CERTIFICATE-SECRET strimzi.io/kind=Kafka strimzi.io/cluster=CLUSTER-NAME
    oc label secret CA-KEY-SECRET strimzi.io/kind=Kafka strimzi.io/cluster=CLUSTER-NAME
  4. 为集群创建 Kafka 资源,将 Kafka.spec.clusterCaKafka.spec.clientsCa 对象 配置为不使用 生成的 CA:

    将集群 CA 配置为使用您自己提供的证书的片段 Kafka 资源示例

    kind: Kafka
    version: kafka.strimzi.io/v1beta1
    spec:
      # ...
      clusterCa:
        generateCertificateAuthority: false

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.