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
-
来自 <
cluster_name>-cluster-ca-certsecret 的ca.crt,这是集群的 CA 证书。
-
来自 <
- keystore
-
user.crt来自 <kafka_user_name> secret,这是用户的公共证书。 -
<kafka_user_name>secret 中的 user.key,这是用户的私钥。
-
- PKCS #12 密钥和证书
对于 PKCS #12,您可以在客户端配置中添加以下内容:
- truststore
-
来自 <
cluster_name>-cluster-ca-certsecret 的ca.p12,这是集群的 CA 证书。 -
<cluster_name>-cluster-ca-certsecret 中的 ca.password,这是访问公共集群 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 的公钥。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> -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 存储的密码。 |
|
|
Topic Operator 和 Kafka 或 ZooKeeper 之间的 mTLS 通信的证书。在 <cluster |
|
| Topic 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 的情况下发布应用程序证书,则此 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 secret)。
如果要为新集群重复使用 CA,您可以通过在 Kafka 配置中将 generateSecretOwnerReference 属性设置为 false 来禁用 ownerReference。当禁用 ownerReference 时,当删除对应的 Kafka 自定义资源时,OpenShift 不会删除 CA secret。
集群和客户端 CA 禁用 ownerReference 的 Kafka 配置示例