在Kafka的文件中,它说校长是Kafka/hostname@example.com,所以sasl.kerberos.service.name应该是kafka,但我很困惑kafka代理配置中说: sasl.kerberos.service.name
代表
"The Kerberos principal name that Kafka runs as. This can be defined either in Kafka's JAAS config or in Kafka's config."
为什么需要设置此配置: sasl.kerberos.service.name
,它是如何工作的?为什么Kafka运行的kerberos主体名称是“ kafka
“不是” kafka/hostname@EXAMPLE.COM
"
4条答案
按热度按时间mm9b1k5b1#
我不知道kafka是什么,但是kerberos的主体是“kafka/hostname”,而不仅仅是“kafka”。
在kerberos数据库中,可以有许多不同的主体,称为
KafkaKafka/hostnameKafka/adminKafka/whatyouwant
每一个都称为主体(包括/某物)
wj8zmpe12#
kafka只是kafka服务运行的主体名称。您还应该在kdc服务器中添加一个“kafka”主体。
如果您使用的是cloudera,它会自动将这个条目添加到kdc服务器中。您可以在/var/run/cloudera scm agent/processs/中检查此配置
相同的主体也将出现在jaas配置文件中。校长=“Kafka/hostname@relam “名称”;
gmxoilav3#
使用
};
这是为了Kafka服务器和Kafka连接到一个kerberized zookeeper,你可以在Kafka的server.properties中设置这3个属性
ui7jx7zq4#
为什么Kafka运行的kerberos主体名称是“Kafka”而不是“Kafka”/hostname@example.com"?
“Kafka/hostname@example.com“实际上是指服务主体名称(spn)。spn是kdc中服务示例的唯一标识符。kerberos身份验证使用SPN将服务示例与服务登录帐户相关联。这允许客户端应用程序请求服务对帐户进行身份验证,即使客户端没有帐户名也是如此。
所以服务名称在这里是“kafka”,服务主体名称是“kafka”/hostname@example.com". kafka是运行kafka的服务帐户。
为什么我们要设置这个configuration:sasl.kerberos.service.name,它是如何工作的?
正如我在上面所回答的,由于您已经用kerberos设置了kafka代理身份验证,因此客户机应用程序可以请求服务对帐户进行身份验证,即使客户机没有帐户名称。
但是客户端(生产者、消费者、连接工作者等)将使用自己的主体(通常与运行客户端的用户同名)对集群进行身份验证,因此根据需要获取或创建这些主体。然后为每个主体创建一个jaas文件。kafkaclient部分描述了像producer和consumer这样的客户机如何连接到kafka代理。
你需要有jass文件,在那里你运行你的客户与以下信息。
如果您首先使用kinit命令,请使用此配置。
如果使用keytab,请使用以下配置:
因此,一旦客户机(生产者、消费者、任何java代码)使用自己的主体对代理进行身份验证,那么它将对请求属性sasl.kerberos.service.name中提到的服务“kafka”进行身份验证。
下面是有关sasl配置的更多信息。