15.2. Operator 生成的 secret


Cluster Operator 会自动设置和更新 TLS 证书,以便在集群中启用加密和身份验证。如果要在 Kafka 代理和客户端之间启用加密或 mTLS 身份验证,它还设置其他 TLS 证书。

在部署自定义资源时会创建 secret,如 KafkaKafkaUser。AMQ Streams 使用这些 secret 为 Kafka 集群、客户端和用户存储私钥和公钥证书。secret 用于在 Kafka 代理和代理和客户端之间建立 TLS 加密连接。它们也用于 mTLS 身份验证。

集群和客户端 secret 始终是对的:一个包含公钥,另一个包含私钥。

集群 secret
集群 secret 包含用于为 Kafka 代理证书签名的 集群 CA。连接客户端使用证书与 Kafka 集群建立 TLS 加密连接。证书验证代理身份。
客户端 secret
客户端 secret 包含用户为自己的客户端 证书签名的客户端 CA。这允许对 Kafka 集群进行 mutual 身份验证。代理通过证书验证客户端的身份。
用户 secret
用户 secret 包含私钥和证书。创建新用户时,secret 由客户端 CA 创建并签名。密钥和证书用于在访问集群时验证和授权用户。
注意

您可以为 TLS 侦听程序或启用了 TLS 加密的外部监听程序提供 Kafka 侦听器证书。使用 Kafka 侦听器证书合并您已就位的安全基础架构。

由 AMQ Streams 创建的 secret 以 PEM (Privacy Enhanced 邮件) 和 PKCS #12 (Public-Key Cryptography Standards) 格式提供私钥和证书。PEM 和 PKCS #12 是用于使用 SSL 协议的 TLS 通信的 OpenSSL 生成的密钥格式。

您可以配置 mutual TLS (mTLS)身份验证,它使用为 Kafka 集群和用户生成的 secret 中包含的凭证。

要设置 mTLS,您必须首先执行以下操作:

部署 Kafka 集群时,会使用公钥创建一个 <cluster_name>-cluster-ca-cert secret 来验证集群。您可以使用公钥为客户端配置信任存储。

当您创建 KafkaUser 时,会使用 密钥和证书创建一个 <kafka_user_name > secret 来验证用户(客户端)。使用这些凭证为客户端配置密钥存储。

当 Kafka 集群和客户端设置为使用 mTLS 时,您可以从 secret 中提取凭证并将其添加到客户端配置中。

PEM 密钥和证书

对于 PEM,您可以在客户端配置中添加以下内容:

truststore
  • CA .crt 来自 & lt;cluster_name>-cluster-ca-cert secret,这是集群的 CA 证书。
keystore
  • 来自 < kafka_user_name&gt; secret 的 user.crt,这是用户的公共证书。
  • 来自 < kafka_user_name&gt; secret 的 user.key,这是用户的私钥。
PKCS #12 密钥和证书

对于 PKCS #12,您可以在客户端配置中添加以下内容:

truststore
  • 来自 < cluster_name>-cluster-ca-cert secret 的 CA .p12,这是集群的 CA 证书。
  • CA .password 来自 & lt;cluster_name>-cluster-ca-cert secret,这是用于访问公共集群 CA 证书的密码。
keystore
  • 来自 < kafka_user_name > secret 的 user.p12,这是用户的公钥证书。
  • 来自 < kafka_user_name&gt; secret 的 user.password,这是用于访问 Kafka 用户的公钥证书的密码。

Java 支持 PKCS #12,以便您可以将证书的值直接添加到 Java 客户端配置中。您还可以从安全存储位置引用证书。使用 PEM 文件,您必须直接将证书添加到客户端配置中,格式为单行格式。选择适合在 Kafka 集群和客户端之间建立 TLS 连接的格式。如果您对 PEM 不熟悉,可以使用 PKCS #12。

注意

所有密钥的大小为 2048 位,默认情况下,从初始生成起的 365 天内有效。您可以更改有效期

15.2.2. Cluster Operator 生成的 secret

Cluster Operator 会生成以下证书,这些证书保存为 OpenShift 集群中的 secret。AMQ Streams 默认使用这些 secret。

集群 CA 和客户端 CA 为私钥和公钥有单独的 secret。

<cluster_name>-cluster-ca
包含集群 CA 的私钥。AMQ Streams 和 Kafka 组件使用私钥为服务器证书签名。
<cluster_name>-cluster-ca-cert
包含集群 CA 的公钥。Kafka 客户端使用公钥验证它们通过 TLS 服务器身份验证连接的 Kafka 代理的身份。
<cluster_name>-clients-ca
包含客户端 CA 的私钥。Kafka 客户端在连接到 Kafka 代理时,使用私钥为 mTLS 身份验证签名新的用户证书。
<cluster_name>-clients-ca-cert
包含客户端 CA 的公钥。在使用 mTLS 身份验证时,Kafka 代理使用公钥来验证客户端访问 Kafka 代理的客户端的身份。

用于 AMQ Streams 组件间通信的 secret 包含由集群 CA 签名的私钥和公钥证书。

<cluster_name>-kafka-brokers
包含 Kafka 代理的私钥和公钥。
<cluster_name>-zookeeper-nodes
包含 ZooKeeper 节点的私钥和公钥。
<cluster_name>-cluster-operator-certs
包含用于加密 Cluster Operator 和 Kafka 或 ZooKeeper 之间的通信的私钥和公钥。
<cluster_name>-entity-topic-operator-certs
包含用于加密主题 Operator 和 Kafka 或 ZooKeeper 之间的通信的私钥和公钥。
<cluster_name>-entity-user-operator-certs
包含用于加密 User Operator 和 Kafka 或 ZooKeeper 之间的通信的私钥和公钥。
<cluster_name>-cruise-control-certs
包含用于加密 Cruise Control 和 Kafka 或 ZooKeeper 之间的通信的私钥和公钥。
<cluster_name>-kafka-exporter-certs
包含用于加密 Kafka Exporter 和 Kafka 或 ZooKeeper 之间的通信的私钥和公钥。
注意

您可以提供自己的服务器证书和私钥,以使用 Kafka 侦听器证书 而不是集群 CA 签名的证书连接到 Kafka 代理。

15.2.3. 集群 CA secret

集群 CA secret 由 Kafka 集群中的 Cluster Operator 管理。

客户端只需要 <cluster_name> -cluster-ca-cert secret。所有其他集群 secret 都可通过 AMQ Streams 组件访问。如果需要,您可以使用 OpenShift 基于角色的访问控制来执行此操作。

注意

< cluster_name&gt; -cluster-ca-cert 中的 CA 证书必须被 Kafka 客户端应用程序信任,以便在通过 TLS 连接到 Kafka 代理时验证 Kafka 代理证书。

Expand
表 15.1. < cluster_name>-cluster-ca secret 中的字段
字段Description

ca.key

集群 CA 的当前私钥。

Expand
表 15.2. < cluster_name>-cluster-ca-cert secret 中的字段
字段Description

ca.p12

用于存储证书和密钥的 PKCS #12 存储。

ca.password

用于保护 PKCS #12 存储的密码。

ca.crt

集群 CA 的当前证书。

Expand
表 15.3. < cluster_name>-kafka-brokers secret 中的字段
字段Description

<cluster_name>-kafka-<num>.p12

用于存储证书和密钥的 PKCS #12 存储。

<cluster_name>-kafka-<num>.password

用于保护 PKCS #12 存储的密码。

<cluster_name>-kafka-<num>.crt

Kafka 代理 pod < num> 的证书。由 <cluster _name> -cluster-ca 中的当前或以前的集群 CA 私钥签名。

<cluster_name>-kafka-<num>.key

Kafka 代理 pod < num> 的私钥

Expand
表 15.4. < cluster_name>-zookeeper-nodes secret 中的字段
字段Description

<cluster_name>-zookeeper-<num>.p12

用于存储证书和密钥的 PKCS #12 存储。

<cluster_name>-zookeeper-<num>.password

用于保护 PKCS #12 存储的密码。

<cluster_name>-zookeeper-<num>.crt

ZooKeeper 节点 <num> 的证书。由 <cluster _name> -cluster-ca 中的当前或以前的集群 CA 私钥签名。

<cluster_name>-zookeeper-<num>.key

ZooKeeper pod < num> 的私钥

Expand
表 15.5. < cluster_name>-cluster-operator-certs secret 中的字段
字段Description

cluster-operator.p12

用于存储证书和密钥的 PKCS #12 存储。

cluster-operator.password

用于保护 PKCS #12 存储的密码。

cluster-operator.crt

Cluster Operator 和 Kafka 或 ZooKeeper 之间 mTLS 通信的证书。由 <cluster _name> -cluster-ca 中的当前或以前的集群 CA 私钥签名。

cluster-operator.key

Cluster Operator 和 Kafka 或 ZooKeeper 之间 mTLS 通信的私钥。

Expand
表 15.6. < cluster_name>-entity-topic-operator-certs secret 中的字段
字段Description

entity-operator.p12

用于存储证书和密钥的 PKCS #12 存储。

entity-operator.password

用于保护 PKCS #12 存储的密码。

entity-operator.crt

主题 Operator 和 Kafka 或 ZooKeeper 之间 mTLS 通信的证书。由 <cluster _name> -cluster-ca 中的当前或以前的集群 CA 私钥签名。

entity-operator.key

主题 Operator 和 Kafka 或 ZooKeeper 之间 mTLS 通信的私钥。

Expand
表 15.7. < cluster_name>-entity-user-operator-certs secret 中的字段
字段Description

entity-operator.p12

用于存储证书和密钥的 PKCS #12 存储。

entity-operator.password

用于保护 PKCS #12 存储的密码。

entity-operator.crt

用于 User Operator 和 Kafka 或 ZooKeeper 之间的 mTLS 通信的证书。由 <cluster _name> -cluster-ca 中的当前或以前的集群 CA 私钥签名。

entity-operator.key

User Operator 和 Kafka 或 ZooKeeper 间的 mTLS 通信的私钥。

Expand
表 15.8. < cluster_name>-cruise-control-certs secret 中的字段
字段Description

cruise-control.p12

用于存储证书和密钥的 PKCS #12 存储。

cruise-control.password

用于保护 PKCS #12 存储的密码。

cruise-control.crt

用于 Cruise Control 和 Kafka 或 ZooKeeper 之间的 mTLS 通信的证书。由 <cluster _name> -cluster-ca 中的当前或以前的集群 CA 私钥签名。

cruise-control.key

Cruise Control 和 Kafka 或 ZooKeeper 间的 mTLS 通信的私钥。

Expand
表 15.9. < cluster_name>-kafka-exporter-certs secret 中的字段
字段Description

kafka-exporter.p12

用于存储证书和密钥的 PKCS #12 存储。

kafka-exporter.password

用于保护 PKCS #12 存储的密码。

kafka-exporter.crt

用于 Kafka Exporter 和 Kafka 或 ZooKeeper 之间的 mTLS 通信的证书。由 <cluster _name> -cluster-ca 中的当前或以前的集群 CA 私钥签名。

kafka-exporter.key

Kafka Exporter 和 Kafka 或 ZooKeeper 间的 mTLS 通信的私钥。

15.2.4. 客户端 CA secret

客户端 CA secret 由 Kafka 集群中的 Cluster Operator 管理。

<cluster_name>-clients-ca-cert 中的正式是 Kafka 代理信任的证书。

& lt;cluster_name> -clients-ca secret 用于为客户端应用程序的证书签名。如果您打算在没有使用 User Operator 的情况下发布应用程序证书,则 AMQ Streams 组件和管理访问此 secret 必须可以被 AMQ Streams 组件访问。如果需要,您可以使用 OpenShift 基于角色的访问控制来执行此操作。

Expand
表 15.10. < cluster_name>-clients-ca secret 中的字段
字段Description

ca.key

客户端 CA 的当前私钥。

Expand
表 15.11. < cluster_name>-clients-ca-cert secret 中的字段
字段Description

ca.p12

用于存储证书和密钥的 PKCS #12 存储。

ca.password

用于保护 PKCS #12 存储的密码。

ca.crt

客户端 CA 的当前证书。

15.2.5. User Operator 生成的用户 secret

用户 secret 由 User Operator 管理。

当使用 User Operator 创建用户时,会使用用户名生成一个 secret。

Expand
表 15.12. user_name secret 中的字段
Secret 名称secret 中的字段Description

<user_name>

user.p12

用于存储证书和密钥的 PKCS #12 存储。

user.password

用于保护 PKCS #12 存储的密码。

user.crt

用户的证书,由客户端 CA 签名

user.key

用户的私钥

15.2.6. 在集群 CA secret 中添加标签和注解

通过在 Kafka 自定义资源中配置 clusterCaCert 模板属性,您可以将自定义标签和注解添加到 Cluster Operator 创建的 Cluster CA secret 中。标签和注解可用于识别对象并添加上下文信息。您可以在 AMQ Streams 自定义资源中配置模板属性。

为 secret 添加标签和注解的模板自定义示例

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    # ...
    template:
      clusterCaCert:
        metadata:
          labels:
            label1: value1
            label2: value2
          annotations:
            annotation1: value1
            annotation2: value2
    # ...
Copy to Clipboard Toggle word wrap

15.2.7. 在 CA secret 中禁用 ownerReference

默认情况下,集群和客户端 CA secret 使用设置为 Kafka 自定义资源的 ownerReference 属性创建。这意味着,当 Kafka 自定义资源被删除时,OpenShift 也会删除 CA secret (收集垃圾收集)。

如果要为新集群重复使用 CA,您可以通过在 Kafka 配置中将集群和客户端 CA secret 的 generateSecretOwnerReference 属性设置为 false 来禁用 ownerReference。当禁用 ownerReference 时,当删除对应的 Kafka 自定义资源时,OpenShift 不会删除 CA secret。

集群和客户端 CA 禁用 ownerReference 的 Kafka 配置示例

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
# ...
spec:
# ...
  clusterCa:
    generateSecretOwnerReference: false
  clientsCa:
    generateSecretOwnerReference: false
# ...
Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat