15.2. Operator 生成的 secret
Cluster Operator 会自动设置和更新 TLS 证书,以便在集群中启用加密和身份验证。如果要在 Kafka 代理和客户端之间启用加密或 mTLS 身份验证,它还设置其他 TLS 证书。
在部署自定义资源时会创建 secret,如 Kafka
和 KafkaUser
。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 侦听器证书合并您已就位的安全基础架构。
15.2.1. 使用 PEM 或 PKCS #12 格式的密钥和证书进行 TLS 身份验证 复制链接链接已复制到粘贴板!
由 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
来自 <cluster_name>-cluster-ca-cert
secret,这是集群的 CA 证书。
-
CA
- keystore
-
来自 <
kafka_user_name>
; secret 的user.crt
,这是用户的公共证书。 -
来自 <
kafka_user_name>
; secret 的user.key
,这是用户的私钥。
-
来自 <
- PKCS #12 密钥和证书
对于 PKCS #12,您可以在客户端配置中添加以下内容:
- truststore
-
来自 <
cluster_name>-cluster-ca-cert
secret 的 CA.p12
,这是集群的 CA 证书。 -
CA
.password
来自 <cluster_name>-cluster-ca-cert
secret,这是用于访问公共集群 CA 证书的密码。
-
来自 <
- keystore
-
来自 <
kafka_user_name
> secret 的user.p12
,这是用户的公钥证书。 -
来自 <
kafka_user_name>
; 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> -cluster-ca-cert
中的 CA 证书必须被 Kafka 客户端应用程序信任,以便在通过 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 节点 <num> 的证书。由 <cluster |
|
ZooKeeper pod < |
字段 | Description |
---|---|
| 用于存储证书和密钥的 PKCS #12 存储。 |
| 用于保护 PKCS #12 存储的密码。 |
|
Cluster Operator 和 Kafka 或 ZooKeeper 之间 mTLS 通信的证书。由 <cluster |
| Cluster Operator 和 Kafka 或 ZooKeeper 之间 mTLS 通信的私钥。 |
字段 | Description |
---|---|
| 用于存储证书和密钥的 PKCS #12 存储。 |
| 用于保护 PKCS #12 存储的密码。 |
|
主题 Operator 和 Kafka 或 ZooKeeper 之间 mTLS 通信的证书。由 <cluster |
| 主题 Operator 和 Kafka 或 ZooKeeper 之间 mTLS 通信的私钥。 |
字段 | Description |
---|---|
| 用于存储证书和密钥的 PKCS #12 存储。 |
| 用于保护 PKCS #12 存储的密码。 |
|
用于 User Operator 和 Kafka 或 ZooKeeper 之间的 mTLS 通信的证书。由 <cluster |
| User Operator 和 Kafka 或 ZooKeeper 间的 mTLS 通信的私钥。 |
字段 | Description |
---|---|
| 用于存储证书和密钥的 PKCS #12 存储。 |
| 用于保护 PKCS #12 存储的密码。 |
|
用于 Cruise Control 和 Kafka 或 ZooKeeper 之间的 mTLS 通信的证书。由 <cluster |
| Cruise Control 和 Kafka 或 ZooKeeper 间的 mTLS 通信的私钥。 |
字段 | Description |
---|---|
| 用于存储证书和密钥的 PKCS #12 存储。 |
| 用于保护 PKCS #12 存储的密码。 |
|
用于 Kafka Exporter 和 Kafka 或 ZooKeeper 之间的 mTLS 通信的证书。由 <cluster |
| 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 基于角色的访问控制来执行此操作。
字段 | Description |
---|---|
| 客户端 CA 的当前私钥。 |
字段 | Description |
---|---|
| 用于存储证书和密钥的 PKCS #12 存储。 |
| 用于保护 PKCS #12 存储的密码。 |
| 客户端 CA 的当前证书。 |
15.2.5. User Operator 生成的用户 secret 复制链接链接已复制到粘贴板!
用户 secret 由 User Operator 管理。
当使用 User Operator 创建用户时,会使用用户名生成一个 secret。
Secret 名称 | secret 中的字段 | Description |
---|---|---|
|
| 用于存储证书和密钥的 PKCS #12 存储。 |
| 用于保护 PKCS #12 存储的密码。 | |
| 用户的证书,由客户端 CA 签名 | |
| 用户的私钥 |
15.2.6. 在集群 CA secret 中添加标签和注解 复制链接链接已复制到粘贴板!
通过在 Kafka
自定义资源中配置 clusterCaCert
模板属性,您可以将自定义标签和注解添加到 Cluster Operator 创建的 Cluster CA secret 中。标签和注解可用于识别对象并添加上下文信息。您可以在 AMQ Streams 自定义资源中配置模板属性。
为 secret 添加标签和注解的模板自定义示例
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 配置示例