当前位置: 首页 > 知识库问答 >
问题:

Keeper 错误代码 = 使用Kafka配置时无效的 ACL

相高谊
2023-03-14

我正在尝试将我的 kafka 集群设置为接受SASL_SSL/SCRAM 身份验证。首先,一切都在实际工作,客户端使用SASL_SSL/ GSSAPI进行连接。我的 Zk 服务器也针对 SASL 身份验证和 TLS 进行了配置。

我为Kafka和Zk使用了融合的docker图像:

  • confluent inc/cp-kafka: 6.0.1
  • confluent inc/cp-zookeeper: 5.5.3-3

所以我刚刚修改了我的设置,允许在Kafka中使用SCRAM-SHA-512:Kafka_SASL_ENABLED_MECHINIMS=GSSAPI,SCRAM-SSA-512

按照这些说明,我现在想在Zk中添加用户,这就是问题开始的地方(从Kafka节点):

[root@kafka1 [RCI] ~]# /usr/bin/podman exec kafka kafka-configs --zk-tls-config-file /etc/kafka/secrets/zk-ssl.properties --zookeeper Zk:3181 --alter --entity-type topics --entity-name test_jerome --add-config 'retention.ms=1'
Warning: --zookeeper is deprecated and will be removed in a future version of Kafka.
Use --bootstrap-server instead to specify a broker to connect to.
[2021-01-21 17:44:14,807] WARN zookeeper.ssl.keyStore.location not specified (org.apache.zookeeper.common.X509Util)
Error while executing config command with args '--zk-tls-config-file /etc/kafka/secrets/zk-ssl.properties --zookeeper Zk:3181 --alter --entity-type topics --entity-name test_jerome --add-config retention.ms=1'
org.apache.zookeeper.KeeperException$InvalidACLException: KeeperErrorCode = InvalidACL for /config/changes
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:128)
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:54)
    at kafka.zookeeper.AsyncResponse.maybeThrow(ZooKeeperClient.scala:564)
    at kafka.zk.KafkaZkClient.createRecursive(KafkaZkClient.scala:1646)
    at kafka.zk.KafkaZkClient.makeSurePersistentPathExists(KafkaZkClient.scala:1568)
    at kafka.zk.KafkaZkClient.createConfigChangeNotification(KafkaZkClient.scala:395)
    at kafka.zk.AdminZkClient.changeEntityConfig(AdminZkClient.scala:385)
    at kafka.zk.AdminZkClient.changeTopicConfig(AdminZkClient.scala:342)
    at kafka.zk.AdminZkClient.changeConfigs(AdminZkClient.scala:278)
    at kafka.admin.ConfigCommand$.alterConfigWithZk(ConfigCommand.scala:167)
    at kafka.admin.ConfigCommand$.processCommandWithZk(ConfigCommand.scala:118)
    at kafka.admin.ConfigCommand$.main(ConfigCommand.scala:92)
    at kafka.admin.ConfigCommand.main(ConfigCommand.scala)
Error: non zero exit code: 1: OCI runtime error

ZK日志并没有真正的帮助:

[2021-01-21 17:58:08,333] INFO Successfully authenticated client: authenticationID=admin;  authorizationID=admin. (org.apache.zookeeper.server.auth.SaslServerCallbackHandler)
[2021-01-21 17:58:08,333] INFO Successfully authenticated client: authenticationID=admin;  authorizationID=admin. (org.apache.zookeeper.server.auth.SaslServerCallbackHandler)
[2021-01-21 17:58:08,333] INFO Setting authorizedID: admin (org.apache.zookeeper.server.auth.SaslServerCallbackHandler)
[2021-01-21 17:58:08,333] INFO Setting authorizedID: admin (org.apache.zookeeper.server.auth.SaslServerCallbackHandler)
[2021-01-21 17:58:08,334] INFO adding SASL authorization for authorizationID: admin (org.apache.zookeeper.server.ZooKeeperServer)
[2021-01-21 17:58:08,334] INFO adding SASL authorization for authorizationID: admin (org.apache.zookeeper.server.ZooKeeperServer)

如您所见,SASL 身份验证有效,并且管理员用户已很好地识别。

如果我登录Zk shell(从Zk节点),你看不到acl是完全打开的:

getAcl /config/users
'world,'anyone
: cdrwa
getAcl /config
'world,'anyone
: cdrwa
getAcl /
'world,'anyone
: cdrwa

如果我在Zk shell中创建目录(从Zk节点),它可以工作:

create /config/users/topicctl
Created /config/users/topicctl

当我这样做时,Zk服务器上没有日志,因为我没有进行身份验证。

我现在花了一下午的时间在这个问题上,没有任何进展。

请问有什么问题?

共有1个答案

陆俊捷
2023-03-14

多亏了这篇文章,我终于找到了我的问题:如果zookeeper.set.acl设置为true,Kafka不会启动

我刚刚将此信息添加到KAFKA_OPTS环境变量“-Dzookeeper.kerberos.removeHost从原则=真 -Dzookeeper.kerberos.removeRealm从原则=true -Dzookeeper.authProvider.1=org.apache.zookeeper.server.auth.SASLAuthicationProvidicationProvider-Dzookeeper.requireClientAuthScheme=sasl”

我现在的主要问题是:为什么sasl认证在那之前是有效的!

 类似资料:
  • 错误ITMS-90161:“设置配置文件无效。” 我已经使用Xamarin IOS在临时模式下创建了IPA,并选择了临时配置文件。但在上传时,以下错误让我恼火:( 当我使用application loader上传时: 错误ITMS-90161:“无效的配置文件。捆绑包x.x.x.x[Payload/x.x.x.app]中包含的配置文件无效。[缺少代码签名证书。]有关更多信息,请访问iOS开发者门户

  • 我正试图将我们的应用程序集成到active Directory中。我遵循了以下入门指南:https://grails.org/wiki/acegisecurity%20plugin%20-%20ldap%20tutorial,但我得到了一个错误: [LDAP:错误代码49-无效凭据];嵌套异常是javax.naming.AuthenticationException:[LDAP:错误代码49-无效

  • 问题内容: 我想将所有错误定向到我的Errorsevlet,而无需明确指定所有代码。有什么办法可以这样做吗? 到达ErrorServlet后,如何获取servlet中错误的堆栈跟踪。这样一发生错误,我就可以通过电子邮件发送详细信息。 问题答案: 试试这个,所有错误都会被捕获(500个)而不是404等

  • 我是ldap新手,我尝试了一个我认为很简单的示例,用一个已经有人为测试设置的ldap实例来测试spring ldap模块。 有关我正在使用的ldap实例的详细信息可以在这里找到:http://blog.stuartlewis.com/2008/07/07/test-ldap-service/comment-page-3/ 我使用了ldap浏览器/管理工具(Softerra ldap Admin),

  • 在尝试运行测试时,我遇到了这个编译错误: 我试着在谷歌和这里研究这个问题,在应用了所有对其他人有效的解决方案后,这个问题仍然存在。以下是我到目前为止所做的: 首选项->Java编译器:将“项目字节码版本”设置为1.8 我还将每个模块的目标字节码版本设置为1.8 解决方法编辑: 我可以绕过这个问题,方法是转到首选项->构建、执行、部署->编译器->Java编译器,并将编译器从“javac”更改为“e

  • 注释了println语句,但未注释unicode。为什么?