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 集群时,会创建一个 &lt ;cluster_name>-cluster-ca-cert secret,并使用公钥验证集群。您可以使用公钥为客户端配置信任存储。

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

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

PEM 密钥和证书

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

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

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

truststore
  • 来自 < cluster_name>-cluster-ca-cert secret 的 ca.p12,这是集群的 CA 证书。
  • < cluster_name>-cluster-ca-cert secret 中的 ca.password,这是访问公共集群 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 的公钥。Kafka 代理使用公钥验证使用 mTLS 身份验证时访问 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
包含用于加密用户 Operator 和 Kafka 或 ZooKeeper 之间的通信的私钥和公钥。
<cluster_name>-cruise-control-certs
包含用于加密 Cruise 控制和 Kafka 或 ZooKeeper 之间的通信的私钥和公钥。
<cluster_name>-kafka-exporter-certs
包含用于加密 Kafka Exporter 和 Kafka 或 ZooKeeper 之间通信的私钥和公钥。
注意

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

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

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

entity-operator.key

Topic 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 的情况下发布应用程序证书,则此 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 secret)。

如果要为新集群重复使用 CA,您可以通过在 Kafka 配置中将 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