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

无法设置 kerberized kafka 代理:使用动物园管理员仲裁成员进行身份验证时出错:仲裁成员的 saslToken 为空

郏博瀚
2023-03-14

所以我一直试图在启用kerberos的单个节点上设置kafka broker和zookeeper。

大部分都是基于这个教程:https://qiita.com/visualskyrim/items/8f48ff107232f0befa5a

系统:Ubuntu 18.04设置:一个EC2盒子里有zoopeeker实例和kafka broker进程,另一个EC2盒子里有KDC。两者都在同一个安全组上,UDP 88端口开放。

以下是我迄今为止所做的工作。

  1. 从这里下载了Kafka经纪人:https://kafka.apache.org/downloads
  2. 创建KDC并正确生成keytab(通过kinit-t验证)。然后定义krb5_config文件,并在 /etc/hosts文件中宿主kdc条目。
  3. 创建了两个jaas配置

猫动物园管理员_jaas.conf

Server {
  com.sun.security.auth.module.Krb5LoginModule required debug=true
  useKeyTab=true
  keyTab="/etc/kafka/zookeeper.keytab"
  storeKey=true
  useTicketCache=false
  principal="zookeeper";
};

猫kafka_jaas.conf

cat /etc/kafka/kafka_jaas.conf
KafkaServer {
  com.sun.security.auth.module.Krb5LoginModule required debug=true
  useKeyTab=true
  useTicketCache=false
  storeKey=true
  keyTab="/etc/kafka/kafka.keytab"
  principal="kafka";
};

Client {
  com.sun.security.auth.module.Krb5LoginModule required debug=true
  useKeyTab=true
  storeKey=true
  useTicketCache=false
  keyTab="/etc/kafka/kafka.keytab"
  principal="kafka";
};

config/zookeeper文件添加了这些额外的行

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
kerberos.removeHostFromPrincipal=true
kerberos.removeRealmFromPrincipal=true

和config/server。属性(代理的配置文件)添加了这些额外的行

listeners=SASL_PLAINTEXT://kafka.com:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=GSSAPI
sasl.enabled.mechanism=GSSAPI
sasl.kerberos.service.name=kafka

在一个屏幕会话中,我做到了

5. export KAFKA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/etc/kafka/zookeeper_jaas.conf -Dsun.security.krb5.debug=true"

然后跑

bin/zookeeper-server-start.sh config/zookeeper.properties

这正确运行,动物园管理员启动。

在另一个屏幕会话中,我这样做

6. export KAFKA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/etc/kafka/kafka_jaas.conf -Dsun.security.krb5.debug=true"

然后运行

bin/kafka-server-start.sh config/server.properties

但是这个失败了,除了这个例外

[2020-02-27 22:56:04,724] ERROR SASL authentication failed using login context 'Client' with 
exception: {} (org.apache.zookeeper.client.ZooKeeperSaslClient)
javax.security.sasl.SaslException: Error in authenticating with a Zookeeper Quorum member: 
the quorum member's saslToken is null.
        at org.apache.zookeeper.client.ZooKeeperSaslClient.createSaslToken(ZooKeeperSaslClient.java:279)
    at org.apache.zookeeper.client.ZooKeeperSaslClient.respondToServer(ZooKeeperSaslClient.java:242)
    at org.apache.zookeeper.ClientCnxn$SendThread.readResponse(ClientCnxn.java:805)
    at org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:94)
    at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:366)
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1141)
[2020-02-27 22:56:04,726] ERROR [ZooKeeperClient Kafka server] Auth failed. 
(kafka.zookeeper.ZooKeeperClient)
[2020-02-27 22:56:04,842] ERROR Fatal error during KafkaServer startup. Prepare to shutdown 
(kafka.server.KafkaServer)
org.apache.zookeeper.KeeperException$AuthFailedException: KeeperErrorCode = AuthFailed for 
/consumers
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:126)
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:54)
    at kafka.zookeeper.AsyncResponse.maybeThrow(ZooKeeperClient.scala:560)
    at kafka.zk.KafkaZkClient.createRecursive(KafkaZkClient.scala:1610)
    at kafka.zk.KafkaZkClient.makeSurePersistentPathExists(KafkaZkClient.scala:1532)
    at kafka.zk.KafkaZkClient.$anonfun$createTopLevelPaths$1(KafkaZkClient.scala:1524)
    at kafka.zk.KafkaZkClient.$anonfun$createTopLevelPaths$1$adapted(KafkaZkClient.scala:1524)
    at scala.collection.immutable.List.foreach(List.scala:392)
    at kafka.zk.KafkaZkClient.createTopLevelPaths(KafkaZkClient.scala:1524)
    at kafka.server.KafkaServer.initZkClient(KafkaServer.scala:388)
    at kafka.server.KafkaServer.startup(KafkaServer.scala:207)
    at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:38)
    at kafka.Kafka$.main(Kafka.scala:84)
    at kafka.Kafka.main(Kafka.scala)

我还启用了kerberos调试日志

这是Kerberos的凭证记录

调试:-凭据-
客户端:kafka@VISUALSKYRIM
服务器:zookeeper/localhost @ VISUALSKYRIM < br >票证:sname:zookeeper/localhost @ VISUALSKYRIM < br >结束时间:1582881662000
-凭据结束-

这意味着Client jaas config在某种程度上是一个问题,该问题源于以下代码行:https://github.com/apache/zookeeper/blob/master/zookeeper-server/src/main/java/org/apache/zookeeper/client/ZooKeeperSaslClient.java#L310但我一辈子都不知道为什么。我将其与合并文档交叉引用https://docs.confluent.io/2.0.0/kafka/sasl.html看来我做的是对的。那又有什么呢?

任何人都可以帮我解决这个问题吗?谢谢。

共有2个答案

舒赞
2023-03-14

也许可以尝试查看< code > KAFKA _ HOME/config/server . properties 并将< code > zookeeper . connect = localhost:2181 中的默认< code>localhost更改为< code>your-host

作为主体,cname与sname不同。例子:

cname zk/myhost@REALM.MY
sname zookeeper/localhost@REALM.MY

最后我还使用了EXTRA_ARGS选项-Dzookeeper.sasl.client。username=zk如文档中所述。

对我有用。看起来像代码1,2应该处理这个问题,但它忽略了它,而是使用了这个属性。

秦宏盛
2023-03-14

原来Kafka含蓄地认为动物园管理员的校长是

zookeeper/localhost

为了取得进步,我

> < li >在KDC创建了zookeeper/localhost主体。 < li >为此创建了一个名为zookeeper-server.keyta的keytab < li>

将zookeeper jaas配置更新为

服务器{com.sun.security.auth.module.Krb5LoginModule required debug=true useKeyTab=true keyTab=“/etc/kafka/zookeeper Server.keyTab”storeKey=true useTicketCache=false principal=“zookeaper/localhost”;};

现在不再显示该错误。

kafka producer似乎基于我的/etc/hosts配置获得了SPN

# Replace there keberos KDC server IP with the appropriate IP addresses
172.31.40.220 kerberos.com
127.0.0.1 localhost
 类似资料:
  • 我正在为Storm开发代码,这是开发人员的一个示例。我的问题是,当您从IDE Eclipse运行此代码时,不会建立Storm和ZooKeer之间的连接。ZooKeer在2181中运行,也设置在storm.yaml. 我的例外是: 有什么想法或程序要执行吗?是否从配置代码中传递?和我一样?

  • 我正在尝试为没有ssl的Kafka集群启用SASL用户名和密码。我按照这个Stackoverflow的步骤: Kafka SASL 动物园管理员身份验证 SASL认证似乎对Kafka经纪人有效。消费者和生产者在写入或读取主题之前必须进行身份验证。到目前为止一切顺利。 问题在于在 kafka 上创建和删除主题。例如,当我尝试使用以下命令时: 我能够列出kafka集群中的所有主题,并创建或删除任何无需

  • 分布式 Apache HBase 安装依赖于正在运行的 ZooKeeper 集群。所有参与节点和客户端都需要能够访问正在运行的 ZooKeeper 集合。 Apache HBase 默认为您管理 ZooKeeper“集群”。它将启动和停止 ZooKeeper 集合作为 HBase 启动/停止过程的一部分。您还可以独立于 HBase 管理 ZooKeeper 集合,只需将 HBase 指向它应该使用

  • 成员身份验证 PDF版下载 OAuth2简介 如流平台提供了OAuth的授权登录方式,可以使如流客户端(移动端或者桌面端内嵌打开)打开的网页获取成员的身份信息,从而免去登录环节。 企业应用中的URL链接(包括自定义菜单或者消息中的链接),均可通过OAuth2.0验证接口来获取成员的身份信息(UserId)。 第一步:构造网页授权链接 获取用户在如流客户端打开应用(或者链接)时的用户身份,如流提供两

  • 在Zookeeper和代理身份验证上启用SASL时,我面临以下错误。 以下配置在JAAS文件中给出,该文件作为KAFKA_OPTS传递,将其作为JVM参数:- Kafka经纪人的服务器。属性设置了以下额外字段:- Zookeeper属性如下所示:

  • 各位,我最近在ec2上设置了zookeeper。我遵循了ec2的手册,但它仍然显示了错误: 但该实例正在后台运行。然后当我使用/zkCli。sh–server-server-server-ip:2181命令,如下所示 连接似乎要花很长时间。 我根据文档做了所有的设置,我不知道我做错了什么。下面是我的conf文件,myid位于dataDir文件夹中 仅供参考,我已将端口2181、2888和3888添