【问题标题】:How to run kafka producer.sh & consumer.sh for a particular user to test ACL?如何为特定用户运行 kafka producer.sh & consumer.sh 来测试 ACL?
【发布时间】:2020-07-14 00:48:14
【问题描述】:
./bin/kafka-console-producer.sh --broker-list 10.162.0.6:32294 --topic my-topic
./bin/kafka-console-consumer.sh --bootstrap-server 10.162.0.6:32294 --topic my-topic --from-beginning 

我是卡夫卡的新手。我的 kafka 在使用 Helm 部署的 strimzi kubernetes operator 上运行。

我创建了一个名为 my-topic 的主题并在两个单独的终端中执行上述 2 个命令。 无论我为生产者键入什么消息,我都会看到它们以响应上述消费者命令!

现在我创建了 2 个用户,userauserb 使用 ACL,usera ACL 完全被阻止访问另一个用户 userb 的主题 具有访问主题的完整 ACL 访问权限:my-topic

要测试 ACL,即如果我使用 usera 运行生产者和消费者,则应该显示权限被拒绝,如果我使用另一个 userb 运行生产者和消费者,那么应该能够访问主题。

但是想知道如何为用户执行上述命令吗?

或者请建议如何测试场景。

【问题讨论】:

    标签: apache-kafka kafka-consumer-api kafka-producer-api strimzi


    【解决方案1】:

    这取决于您在 Kafka 部署中设置的身份验证类型(使用 TLS 客户端身份验证或 SCRAM-SHA),我假设您正在使用 User Operator 来创建用户(KafkaUser 资源)。在第一种情况下,您必须从 User Operator 在创建新 KafkaUser 时创建的 Secret 中提取密钥库和相关密码;您可以使用此密钥库来配置一个属性文件(带有 ssl.keystore.location 和 ssl.keystore.password),您可以通过 --producer.config 选项将其传递给生产者或通过 --consumer.config 选项传递给消费者.当然,如果启用了 TLS 客户端身份验证,则意味着您拥有 TLS,因此您需要从包含集群 CA 证书的 Secret 中提取信任库和相关密码(更多信息请参见 https://strimzi.io/docs/master/#configuring-external-clients-to-trust-cluster-ca-str)。然后,您可以使用它在同一个属性文件中配置 ssl.truststore.location 和 ssl.truststore.password。 如果您使用 SCRAM-SHA,则必须从 KafkaUser 相关 Secret 中提取用户名和密码,并在上述属性文件中配置 JAAS 属性。

    【讨论】:

    • 我也是 Strimzi 和 Kafka 的新手!在您的上述评论中,您的意思是我每次都需要将 producer.config/consumer.confg 复制到 pod 中吗?同样遵循上述建议,我坚持启用 ACL,所以我在这里创建了另一个带有完整描述的问题:stackoverflow.com/questions/61039388/… 请看一下并提出建议,您的经验/知识可以拯救我。
    • Jakub 已经回答了这个问题。无论如何,无论您在哪里运行生产者和消费者,您都需要为它们提供正确配置的配置文件。
    • 是的,我对 Jakub 深表感谢!是的,现在启用了 ACL,因此即使在 ACL 中,完全访问权限也可以使用消息来获取用户授权错误,因此授权用户现在需要使用 producer.config 和 consumer.config 对用户进行身份验证,但我不知道如何在这些文件中配置值kafka 的 config 文件夹,因为我们只能在 /opt/kafka 的 pod 中查看访问权限,尽管我们对 /tmp 将 producer.config 和 consumer.config 写入 /tmp 并且运行 producer.sh 或 consumer.sh 失败了,你也可以tel 我应该如何在 strimzi kafka pod pls 中创建文件?
    • 你的 Kafka 自定义资源是什么?从上面的示例看来,您正在使用一些节点端口(我看到端口号如 32294)进行访问,因此不在集群内部的 Kafka pod 之外。无论如何,如果您想从集群中的 pod 内运行它们,您应该加载属性文件,也许可以通过安装为卷的 ConfigMap。
    猜你喜欢
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    相关资源
    最近更新 更多