10.2. Operator 生成的 secret


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

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

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

由 AMQ Streams 创建的 secret 提供 PEM (Privacy Enhanced Mail)和 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
  • 来自 < 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
  • user.p12 来自 <kafka_user_name > secret,这是用户的公钥证书。
  • < kafka_user_name&gt; secret 中的 user.password,这是访问 Kafka 用户的公钥证书的密码。

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

注意

所有密钥都是 2048 位,默认情况下,从初始生成之日起 365 天有效。您可以更改有效期

10.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
包含加密集群 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 Control 和 Kafka 或 ZooKeeper 之间通信的私钥和公钥。
<cluster_name>-kafka-exporter-certs
包含加密 Kafka 导出器和 Kafka 或 ZooKeeper 之间通信的私钥和公钥。
注意

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

10.2.3. 集群 CA secret

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

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

注意

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

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

ca.key

集群 CA 的当前私钥。

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

ca.p12

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

ca.password

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

ca.crt

集群 CA 的当前证书。

Expand
表 10.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&gt; 的私钥。

Expand
表 10.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 node < num> 的证书。由 <cluster _name> -cluster-ca 中的当前或以前的集群 CA 私钥签名。

<cluster_name>-zookeeper-<num>.key

ZooKeeper pod < num> 的私钥。

Expand
表 10.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
表 10.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
表 10.7. < cluster_name>-entity-user-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
表 10.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 和 ZooKeeper 之间的 mTLS 通信的私钥。

Expand
表 10.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 通信的私钥。

10.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
表 10.10. < cluster_name>-clients-ca secret 中的字段
字段Description

ca.key

客户端 CA 的当前私钥。

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

ca.p12

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

ca.password

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

ca.crt

客户端 CA 的当前证书。

10.2.5. User Operator 生成的用户 secret

用户 secret 由 User Operator 管理。

使用 User Operator 创建用户时,会使用用户名称生成 secret。

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

<user_name>

user.p12

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

user.password

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

user.crt

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

user.key

用户的私钥

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

通过在 Kafka 自定义资源中配置 clusterCaCert template 属性,您可以在 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
    # ...

有关配置模板属性的详情请参考 第 2.8 节 “自定义 OpenShift 资源”

10.2.7. 在 CA secret 中禁用 ownerReference

默认情况下,集群和客户端 CA secret 使用设置为 Kafka 自定义资源的 ownerReference 属性创建。这意味着,当删除 Kafka 自定义资源时,OpenShift 也会删除(智能)删除 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
# ...

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部