Не удалось запустить Kafka после включения Kerberos «Ошибка аутентификации SASL»

Версия Кафки: 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.

Вы выполнили шаг 3 и шаг 4

Vaibhav Gupta 23.02.2019 19:51

В разделе «Аутентификация с использованием SASL/Kerberos» есть 3 шага. Я следовал «Предварительным требованиям» и «Настройка брокеров Kafka». Но я не делал последнее «Настройка клиентов Kafka», потому что последнее предназначено для клиентов (производителей, потребителей, подключенных рабочих и т. д.).

otsuka 24.02.2019 00:11

В настройке Kafka Brokers вы следовали шагу 3 и шагу 4?

Vaibhav Gupta 27.02.2019 04:32
Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Apache Kafka - популярная платформа распределенной потоковой передачи данных, которую можно использовать для построения конвейеров данных в реальном...
0
3
1 098
1

Ответы 1

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";
};

Другие вопросы по теме