Версия Кафки: kafka_2.1.1 (двоичная)
Когда я включаю Kerberos, я внимательно следую официальным документам (https://kafka.apache.org/documentation/#security_sasl_kerberos).
Когда я запускаю Кафку, я получаю следующие ошибки:
[2019-02-23 08:55:44,622] 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:1145)
[2019-02-23 08:55:44,625] ERROR [ZooKeeperClient] Auth failed. (kafka.zookeeper.ZooKeeperClient)
[2019-02-23 08:55:44,746] ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
Я использую практически стандартный krb5.conf.
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
default_realm = EXAMPLE.COM
default_ccache_name = KEYRING:persistent:%{uid}
[realms]
EXAMPLE.COM = {
# kdc = kerberos.example.com
# admin_server = kerberos.example.com
kdc = localhost
admin_server = localhost
}
[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM
Файл jaas, который я передал Кафке, выглядит следующим образом:
KafkaServer {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab = "/etc/security/keytabs/localhost.keytab"
principal = "kafka/[email protected]";
};
// Zookeeper client authentication
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab = "/etc/security/keytabs/localhost.keytab"
principal = "kafka/[email protected]";
};
Я также установил ENV, как показано ниже:
"-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf -Dzookeeper.sasl.client.username=kafka"
Я гуглил много сообщений, но без какого-либо прогресса. Я предполагаю, что проблема может заключаться в «localhost», который я использую при создании записей в Kerberos. Но я не совсем уверен, как обойти это. Моя цель — настроить локальную среду тестирования Kafka+Kerberos.
В разделе «Аутентификация с использованием SASL/Kerberos» есть 3 шага. Я следовал «Предварительным требованиям» и «Настройка брокеров Kafka». Но я не делал последнее «Настройка клиентов Kafka», потому что последнее предназначено для клиентов (производителей, потребителей, подключенных рабочих и т. д.).
В настройке Kafka Brokers вы следовали шагу 3 и шагу 4?
In our case, the krb5 kerberos_config file wasn't read properly. if you're using keytab thru' yml then it'd need to be removed first. This was with IBM JDK though and had to use the following to set System.setProperty("java.security.auth.login.config", JaasConfigFileLocation);
KafkaClient {
com.ibm.security.auth.module.Krb5LoginModule required
useDefaultKeytab=false
credsType=both
principal = "[email protected]"
useKeytab = "/opt/apps/xxxr/my.keytab";
};
Вы выполнили шаг 3 и шаг 4