10.2. Secrets


AMQ Streams 使用 secret 为 Kafka 集群、客户端和用户存储私有和公钥证书。secret 用于在 Kafka 代理和代理和客户端之间建立 TLS 加密的连接。它们也用于相互 TLS 身份验证。

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

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

10.2.1. PEM 和 PKCS #12 格式的 secret

secret 以 PEM 和 PKCS #12 格式提供私钥和证书。使用适用于您的客户端的格式。以 PEM 格式使用私钥和证书意味着用户必须从机密中获取它们,并生成相应的信任存储或密钥存储以在其应用程序中使用。PKCS #12 存储提供了可直接使用的信任存储或密钥存储。

PKCS #12 定义了一个归档文件格式(.p12),用于将加密对象存储到单个文件中,并设有密码保护。您可以使用 PKCS #12 管理一个位置的证书和密钥。

每个 secret 都包含特定于 PKCS #12 的字段。

  • .p12 字段包含证书和密钥。
  • .password 字段是保护归档的密码。

所有密钥的大小都是 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 代理时使用私钥为 TLS 客户端身份验证签名新的用户证书。
<cluster_name>-clients-ca-cert
包含客户端 CA 的公钥。Kafka 代理使用公钥验证在使用 TLS 客户端身份验证时验证客户端访问 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 之间的 TLS 通信的证书。由 <cluster _name> -cluster-ca 中的当前或以前的集群 CA 私钥签名。

cluster-operator.key

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

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 之间的 TLS 通信证书。由 <cluster _name> -cluster-ca 中的当前或以前的集群 CA 私钥签名。

entity-operator.key

适用于主题 Operator 和 Kafka 或 ZooKeeper 间的 TLS 通信的私钥。

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 之间的 TLS 通信证书。由 <cluster _name> -cluster-ca 中的当前或以前的集群 CA 私钥签名。

entity-operator.key

用户 Operator 和 Kafka 或 ZooKeeper 之间的 TLS 通信的私钥。

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

cruise-control.p12

PKCS #12 归档文件用于存储证书和密钥。

cruise-control.password

用于保护 PKCS #12 归档文件的密码。

cruise-control.crt

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

cruise-control.key

用于 Cruise 控制和 Kafka 或 ZooKeeper 之间的 TLS 通信的私钥。

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 之间的 TLS 通信证书。由 <cluster _name> -cluster-ca 中的当前或以前的集群 CA 私钥签名。

kafka-exporter.key

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

10.2.4. 客户端 CA secret

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

< cluster_name&gt; -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. 用户 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
    # ...
Copy to Clipboard Toggle word wrap

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

10.2.7. 在 CA secret 中禁用 ownerReference

默认情况下,Cluster 和 Client CA secret 使用设置为 Kafka 自定义资源的 ownerReference 属性创建。这意味着,当删除 Kafka 自定义资源时,OpenShift 也会删除(智能)删除 CA secret。

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

集群和客户端 CA 禁用 ownerReference s 的 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