Apache spark Kafka kerberos配置问题
在卡夫卡文件中,它说校长是卡夫卡/hostname@EXAMPLE.COM,因此sasl.kerberos.service.name应该是kafka 但是我很困惑kafka代理的配置是:Apache spark Kafka kerberos配置问题,apache-spark,apache-kafka,kerberos,Apache Spark,Apache Kafka,Kerberos,在卡夫卡文件中,它说校长是卡夫卡/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
表示
"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
“我不知道什么是卡夫卡,但kerberos主体是“卡夫卡/主机名”,而不仅仅是“卡夫卡”
在kerberos数据库中,可以有许多不同的主体,称为
卡夫卡
卡夫卡/主机名
卡夫卡/行政
卡夫卡/你想要什么
其中每一个都称为主体(包括/something)卡夫卡只是卡夫卡服务运行的主体名称。 您还应该在KDC服务器中添加一个“kafka”主体 如果您正在使用Cloudera,它将自动在KDC服务器中添加此条目。 您可以在/var/run/cloudera scm代理/processs中检查此配置/ jaas配置文件中也将包含相同的主体。 principal=“卡夫卡/hostname@Relam名称” 使用
KafkaServer {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
useTicketCache=false
keyTab="kafka.keytab"
principal="kafka/kafka.example.com@EXAMPLE.COM";
};
// Zookeeper client authentication
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
useTicketCache=false
keyTab="kafka.keytab"
principal="kafka/kafka.example.com@EXAMPLE.COM";
})
这是卡夫卡服务器和卡夫卡连接到kerberized zookeeper的jaas,您可以在卡夫卡的server.properties中设置这3个属性
security.protocol: SASL_PLAINTEXT
sasl.mechanism: GSSAPI
sasl.kerberos.service.name: kafka
为什么卡夫卡运行的Kerberos主体名称是“卡夫卡”而不是“卡夫卡”/hostname@EXAMPLE.COM“
“卡夫卡/hostname@EXAMPLE.COM“实际上是指服务主体名称(SPN)。SPN是KDC中服务实例的唯一标识符。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。这允许客户端应用程序请求服务对帐户进行身份验证,即使客户端没有帐户名
因此,服务名称在这里是“Kafka”,服务主体名称是“Kafka”/hostname@EXAMPLE.COM". Kafka是运行Kafka的服务帐户
为什么需要设置此配置:sasl.kerberos.service.name,它是如何工作的
正如我在上面回答的,由于您已经使用Kerberos设置了Kafka brokers身份验证,因此客户机应用程序可以请求服务对帐户进行身份验证,即使客户机没有帐户名
但是客户端(生产者、消费者、连接工作者等)将使用自己的主体(通常与运行客户端的用户同名)对集群进行身份验证,因此根据需要获取或创建这些主体。然后为每个主体创建一个JAAS文件。KafkaClient部分描述了像producer和consumer这样的客户端如何连接到Kafka代理
你需要有jass文件,在那里你运行你的客户机与以下信息
如果您首先使用kinit命令,请使用此配置
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/etc/security/keytabs/kafka_client.keytab"
principal="kafka-client-1@EXAMPLE.COM";
};
如果使用keytab,请使用以下配置:
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/etc/security/keytabs/kafka_server.keytab"
principal="kafka/kafka1.hostname.com@EXAMPLE.COM";
};
因此,一旦客户机(生产者、消费者、任何java代码)使用自己的主体对代理进行身份验证,那么它将对请求属性sasl.kerberos.service.name中提到的服务“kafka”进行身份验证
以下是有关的详细信息。使用wurstmeister/kafka docker,似乎无法直接编辑server.properties。 相反,我在docker-compose.yml中定义了以下环境属性:
KAFKA_SASL_KERBEROS_SERVICE_NAME: kafka
你们是如何提供本金分配的?