所以我一直试图在启用kerberos的单个节点上设置kafka broker和zookeeper。
大部分都是基于这个教程:https://qiita.com/visualskyrim/items/8f48ff107232f0befa5a
系统:Ubuntu 18.04设置:一个EC2盒子里有zoopeeker实例和kafka broker进程,另一个EC2盒子里有KDC。两者都在同一个安全组上,UDP 88端口开放。
以下是我迄今为止所做的工作。
猫动物园管理员_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看来我做的是对的。那又有什么呢?
任何人都可以帮我解决这个问题吗?谢谢。
也许可以尝试查看< 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应该处理这个问题,但它忽略了它,而是使用了这个属性。
原来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添