【问题标题】:How to pass user created to producer.sh/consumer.sh in Kubernetes Strimzi Kafka Operator cluster?如何将创建的用户传递给 Kubernetes Strimzi Kafka Operator 集群中的 producer.sh/consumer.sh?
【发布时间】:2020-07-28 16:08:39
【问题描述】:

我为 Kafka 部署了 Strimzi 运算符并启用了 TLS/ACL,现在我被卡住了!如何在创建 9093 个传递用户时运行 producer.sh/consumer.sh?

以下是在端口 9092 上禁用 ACL 的命令:

kubectl -n myproject run kafka-producer -ti --image=strimzi/kafka:0.14.0-kafka-2.3.0 --rm=true --restart=Never -- bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9092

但是如果我在上述命令中启用 ACL、TLS 并使用 9093,那么我应该如何传递 Kafka 用户详细信息进行身份验证?

@Jakub @ppatierno 将很高兴收到您的帮助。

非常感谢, 苏迪尔

【问题讨论】:

  • @Jakub 你能帮忙吗?
  • 你在9093端口开启了什么样的认证机制?你创建了 KafkaUser 吗?
  • @Jakub 感谢您的回复,启用了 TLS 和 ACL(简单)授权。我试过这个脚本github.com/strimzi/client-examples/blob/master/scripts/run.sh & 生成的文件复制到 kafka srimzi pod 的 /tmp 路径 & 运行 producer.sh 如下一个评论方式但没有运气.. 获得匿名用户没有我的主题权限,但使用创建的密钥库对所有主题具有完全权限的 hello-world-producer user.crt 和 user.key 打印在 acls.sh 输出中。
  • /opt/kafka/bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9092 --topic my-topic \ --producer-property 安全性。协议=SSL \ --producer-property ssl.keystore.type=PKCS12 \ --producer-property ssl.keystore.type=ssl.truststore.type=PKCS12 --producer-property ssl.truststore.password=9949183896 \ --生产者属性 ssl.truststore.location=/tmp/acheck/truststore.p12 \ --producer-property ssl.keystore.location=/tmp/acheck/keystore.p12 \ --producer-property ssl.keystore.password=9949183896
  • 我认为该命令是正确的。您当然需要连接到 TLS 的端口 9093,而不是 9092。这对您有用吗?如果不是,您得到的错误究竟是什么?

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


【解决方案1】:

您可以通过名为 kafka-acls.sh 的 CLI 脚本进行设置

您可以从这里找到更多详细信息: https://kafka.apache.org/documentation/#security_authz

-- 附加的 抱歉,我没有正确阅读您的问题。我不确定它是否适用于 Kubernetes 命令。

【讨论】:

  • 您建议了一般 kafka 配置的方法,但我使用在 kubernetes 上运行的 Strimzi 运算符部署了 kafka,仅供参考,如果所有配置更改都应应用于 Strimzi,则不能直接应用记录 kafka pod,编辑配置文件
【解决方案2】:

我见过的一个场景如下。

1) 我创建了 2 个新用户 K1 和 K2,其中一个主题为 T1。 2) 现在它们之间的关系是:::::K1->T1(Sending) 和 K2->T1(receiving) 3) 所以当我启动 console-producer.sh 和 console-consumer.sh 来传输消息时,我注意到 User:ANONYMOUS is Denied for Describe 错误。

我能够通过使用 kafka-acls.sh 脚本将 user:ANONYMOUS 添加到主题 T1 来解决此问题。

我的一些问题是::: 1) 当我已经拥有用于用户身份验证的 K1 和 K2 用户证书和密钥文件时,为什么要求 ANONYMOUS 是强制性的?
2)我们是否需要为将来创建的任何主题添加此用户,或者 .yaml 中是否有可以自动应用的配置参数?

【讨论】:

  • 这应该是实际答案还是新问题?如果是后者,请考虑开一个新问题。
【解决方案3】:

您是使用 TLS 进行加密还是身份验证?我需要查看您的 Kafka 集群部署文件。 如果您使用 SCRAM-SHA-512 和 TLS 作为加密,那么您需要将以下 --producer.config /tmp/producer.properties 添加到您的命令中:

kubectl -n myproject run kafka-producer -ti --image=strimzi/kafka:0.14.0-kafka-2.3.0 --rm=true --restart=Never -- bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9093 --producer.config /tmp/producer.properties 

在 pod 内创建 producer.properties 的位置

  cat /tmp/producer.properties <<EOF
    security.protocol=SASL_SSL
    sasl.mechanism=SCRAM-SHA-512
    sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username=admin password=UGzYA2hddMqz;
    ssl.truststore.location=/tmp/truststore.jks
    ssl.truststore.password=truststorepassword
    EOF

并且正在使用以下方法检索密码:

kubectl get secret admin -o jsonpath='{.data.password}' | base64 -d

【讨论】:

    猜你喜欢
    • 2020-07-20
    • 2020-07-24
    • 2020-07-14
    • 2023-02-17
    • 2019-02-27
    • 2019-05-19
    • 1970-01-01
    • 2017-06-11
    • 2017-06-03
    相关资源
    最近更新 更多