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 代理证书。
| 字段 | Description |
|---|---|
|
| 集群 CA 的当前私钥。 |
| 字段 | Description |
|---|---|
|
| PKCS #12 归档文件用于存储证书和密钥。 |
|
| 用于保护 PKCS #12 归档文件的密码。 |
|
| 集群 CA 的当前证书。 |
| 字段 | Description |
|---|---|
|
| PKCS #12 归档文件用于存储证书和密钥。 |
|
| 用于保护 PKCS #12 归档文件的密码。 |
|
|
Kafka 代理 pod < num> 的证书。由 <cluster |
|
|
Kafka 代理 pod < |
| 字段 | Description |
|---|---|
|
| PKCS #12 归档文件用于存储证书和密钥。 |
|
| 用于保护 PKCS #12 归档文件的密码。 |
|
|
ZooKeeper node < num> 的证书。由 <cluster |
|
|
ZooKeeper pod < |
| 字段 | Description |
|---|---|
|
| PKCS #12 归档文件用于存储证书和密钥。 |
|
| 用于保护 PKCS #12 归档文件的密码。 |
|
|
Cluster Operator 和 Kafka 或 ZooKeeper 之间的 TLS 通信的证书。由 <cluster |
|
| Cluster Operator 和 Kafka 或 ZooKeeper 之间的 TLS 通信的私钥。 |
| 字段 | Description |
|---|---|
|
| PKCS #12 归档文件用于存储证书和密钥。 |
|
| 用于保护 PKCS #12 归档文件的密码。 |
|
|
主题 Operator 和 Kafka 或 ZooKeeper 之间的 TLS 通信证书。由 <cluster |
|
| 适用于主题 Operator 和 Kafka 或 ZooKeeper 间的 TLS 通信的私钥。 |
| 字段 | Description |
|---|---|
|
| PKCS #12 归档文件用于存储证书和密钥。 |
|
| 用于保护 PKCS #12 归档文件的密码。 |
|
|
用户 Operator 和 Kafka 或 ZooKeeper 之间的 TLS 通信证书。由 <cluster |
|
| 用户 Operator 和 Kafka 或 ZooKeeper 之间的 TLS 通信的私钥。 |
| 字段 | Description |
|---|---|
|
| PKCS #12 归档文件用于存储证书和密钥。 |
|
| 用于保护 PKCS #12 归档文件的密码。 |
|
|
Cruise 控制和 Kafka 或 ZooKeeper 之间的 TLS 通信证书。由 <cluster |
|
| 用于 Cruise 控制和 Kafka 或 ZooKeeper 之间的 TLS 通信的私钥。 |
| 字段 | Description |
|---|---|
|
| PKCS #12 归档文件用于存储证书和密钥。 |
|
| 用于保护 PKCS #12 归档文件的密码。 |
|
|
Kafka Exporter 和 Kafka 或 ZooKeeper 之间的 TLS 通信证书。由 <cluster |
|
| Kafka Exporter 和 Kafka 或 ZooKeeper 之间的 TLS 通信的私钥。 |
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 基于角色的访问控制来执行此操作。
| 字段 | Description |
|---|---|
|
| 客户端 CA 的当前私钥。 |
| 字段 | Description |
|---|---|
|
| PKCS #12 归档文件用于存储证书和密钥。 |
|
| 用于保护 PKCS #12 归档文件的密码。 |
|
| 客户端 CA 的当前证书。 |
10.2.5. 用户 secret 复制链接链接已复制到粘贴板!
用户 secret 由 User Operator 管理。
使用 User Operator 创建用户时,会使用用户名称生成 secret。
| Secret 名称 | secret 中的字段 | Description |
|---|---|---|
|
|
| PKCS #12 归档文件用于存储证书和密钥。 |
|
| 用于保护 PKCS #12 归档文件的密码。 | |
|
| 用户的证书,由客户端 CA 签名 | |
|
| 用户的私钥 |
10.2.6. 在集群 CA secret 中添加标签和注解 复制链接链接已复制到粘贴板!
通过在 Kafka 自定义资源中配置 clusterCaCert template 属性,您可以在 Cluster Operator 创建的 Cluster CA secret 中添加自定义标签和注解。标签和注解可用于识别对象和添加上下文信息。您可以在 AMQ Streams 自定义资源中配置模板属性。
将标签和注解添加到 secret 的模板自定义示例
有关配置模板属性的详情请参考 第 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 配置示例