Flink + Kafka + Kerberos:在 JAAS 配置中找不到"KafkaClient"条目



我正在使用 Flink 1.8 尝试连接到 Kerberized Kafka Broker。

我在jaas.conf中设置KafkaClient条目,如下所示:

KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
renewTicket=true
serviceName="kafka";
};
Client {  
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
renewTicket=true
serviceName="zookeeper";
};

并通过在代码中设置此属性来指向该 jaas 文件,该属性与其余必需属性(bootstrap.servers 等(一起传递给 Kafka 消费者......

Properties properties = new Properties();
properties.setProperty("bootstrap.servers", args[0]);
properties.setProperty("security.protocol", "SASL_PLAINTEXT");
properties.setProperty("java.security.auth.login.config","/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf");

在启动 flink 应用程序之前KAFKA_OPTS我还尝试在环境变量上指定 jaas.conf 路径。

我得到的错误是:

java.lang.IllegalArgumentException: 找不到 'KafkaClient' JAAS 配置中的条目。系统属性 'java.security.auth.login.config' 是/tmp/jaas-6335181385007718768.conf

我不知道jaas.conf文件是否应该自动放入临时文件,或者它没有很好地检测到指定的配置文件。发生错误后,临时文件将被删除,但tmp上有一些来自先前启动的文件,它们不包含任何代码(只有一些默认注释和空配置(。

设置中有两个问题;首先,传递 jaas conf 文件位置,然后传递 jaas conf 文件内容

java.security.auth.login.config是系统属性。所以你应该通过在代码中设置系统属性来传递

System.setProperty("java.security.auth.login.config", "/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf");

或通过在运行时设置 JVM 参数 -D。

-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf

应将 JAAS 文件条目配置为使用密钥表或用户名/密码

kafka-keytab-auth-jaas.conf

KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab = true   
useTicketCache=false
storeKey = true
keyTab="/tmp/kafka.service.keytab"
principal="****@REALM"
serviceName="kafka";
};

kafka-password-auth-jaas.conf

KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="user"
password="userpassword";
};

相关内容

  • 没有找到相关文章

最新更新