Проблемы аутентификации ACL кластера Kafka

Вопрос или проблема

Я установил кластер Kafka с использованием протокола KRAFT, и во время аутентификации ACL я столкнулся с проблемой ‘Не удалось настроить SaslClientAuthenticator’. Ниже представлена моя конфигурация.

server.properties

node.id=1
[email protected]:9093,[email protected]:9093,[email protected]:9093,[email protected]:9093
listeners=SASL_PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.name=SASL_PLAINTEXT
advertised.listeners=SASL_PLAINTEXT://192.168.1.41:9092
controller.listener.names=CONTROLLER
process.roles=broker,controller
sasl.enabled.mechanisms=SCRAM-SHA-512
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer
super.users=User:kafkaadmin
allow.everyone.if.no.acl.found=true
listener.security.protocol.map=SASL_PLAINTEXT:SASL_PLAINTEXT,CONTROLLER:SASL_PLAINTEXT

kafka_server_jaas.conf

KafkaServer {
    org.apache.kafka.common.security.scram.ScramLoginModule required
    username="kafkaadmin"
    password="kafkaadmin123456"
    serviceName="kafka";
};

Ниже приведено сообщение об ошибке.

java.io.IOException: Канал не может быть создан для сокета java.nio.channels.SocketChannel[closed]
    at org.apache.kafka.common.network.Selector.buildAndAttachKafkaChannel(Selector.java:352)
    at org.apache.kafka.common.network.Selector.registerChannel(Selector.java:329)
    at org.apache.kafka.common.network.Selector.connect(Selector.java:256)
    at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:1072)
    at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:320)
    at org.apache.kafka.server.util.InterBrokerSendThread.sendRequests(InterBrokerSendThread.java:145)
    at org.apache.kafka.server.util.InterBrokerSendThread.pollOnce(InterBrokerSendThread.java:108)
    at org.apache.kafka.server.util.InterBrokerSendThread.doWork(InterBrokerSendThread.java:136)
    at org.apache.kafka.server.util.ShutdownableThread.run(ShutdownableThread.java:135)
Caused by: org.apache.kafka.common.KafkaException: org.apache.kafka.common.errors.SaslAuthenticationException: Не удалось настроить SaslClientAuthenticator
    at org.apache.kafka.common.network.SaslChannelBuilder.buildChannel(SaslChannelBuilder.java:243)
    at org.apache.kafka.common.network.Selector.buildAndAttachKafkaChannel(Selector.java:340)
    ... 8 more
Caused by: org.apache.kafka.common.errors.SaslAuthenticationException: Не удалось настроить SaslClientAuthenticator
Caused by: org.apache.kafka.common.KafkaException: Невозможно определить главный объект из субъекта, это может быть временная ошибка из-за повторной аутентификации Kerberos
    at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.firstPrincipal(SaslClientAuthenticator.java:633)
    at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.<init>(SaslClientAuthenticator.java:203)
    at org.apache.kafka.common.network.SaslChannelBuilder.buildClientAuthenticator(SaslChannelBuilder.java:289)
    at org.apache.kafka.common.network.SaslChannelBuilder.lambda$buildChannel$1(SaslChannelBuilder.java:229)
    at org.apache.kafka.common.network.KafkaChannel.<init>(KafkaChannel.java:143)
    at org.apache.kafka.common.network.SaslChannelBuilder.buildChannel(SaslChannelBuilder.java:237)
    at org.apache.kafka.common.network.Selector.buildAndAttachKafkaChannel(Selector.java:340)
    at org.apache.kafka.common.network.Selector.registerChannel(Selector.java:329)
    at org.apache.kafka.common.network.Selector.connect(Selector.java:256)
    at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:1072)
    at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:320)
    at org.apache.kafka.server.util.InterBrokerSendThread.sendRequests(InterBrokerSendThread.java:145)
    at org.apache.kafka.server.util.InterBrokerSendThread.pollOnce(InterBrokerSendThread.java:108)
    at org.apache.kafka.server.util.InterBrokerSendThread.doWork(InterBrokerSendThread.java:136)
    at org.apache.kafka.server.util.ShutdownableThread.run(ShutdownableThread.java:135)

Как я могу это исправить? Спасибо.

Ответ или решение

Решение проблем с аутентификацией ACL в кластере Kafka

Здравствуй, уважаемый читатель. Вы столкнулись с проблемами настройки аутентификации ACL в кластере Kafka, установленном с использованием протокола KRAFT. В этом ответе я подробно разберу вашу конфигурацию, ошибки и предложу возможные пути решения.

Анализ конфигурации

Файл server.properties:

node.id=1
listeners=SASL_PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.name=SASL_PLAINTEXT
advertised.listeners=SASL_PLAINTEXT://192.168.1.41:9092
controller.listener.names=CONTROLLER
process.roles=broker,controller
sasl.enabled.mechanisms=SCRAM-SHA-512
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer
super.users=User:kafkaadmin
allow.everyone.if.no.acl.found=true
listener.security.protocol.map=SASL_PLAINTEXT:SASL_PLAINTEXT,CONTROLLER:SASL_PLAINTEXT

JAAS конфигурация (kafka_server_jaas.conf):

KafkaServer {
    org.apache.kafka.common.security.scram.ScramLoginModule required
    username="kafkaadmin"
    password="kafkaadmin123456"
    serviceName="kafka";
};

Ошибка

Сообщение об ошибке:

Caused by: org.apache.kafka.common.errors.SaslAuthenticationException: Failed to configure SaslClientAuthenticator
Caused by: org.apache.kafka.common.KafkaException: Principal could not be determined from Subject

Эта ошибка указывает на то, что клиент не может получить правильный признак (Principal) для аутентификации. Это может происходить по нескольким причинам.

Возможные причины и решения

  1. Неправильная конфигурация JAAS
    Убедитесь, что файл kafka_server_jaas.conf правильно загружен. Вы можете указать его местоположение через переменную KAFKA_OPTS:

    export KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf"
  2. Сбой аутентификации SCRAM
    Убедитесь, что механизм аутентификации SCRAM-SHA-512 правильно настроен на всех узлах кластера. Все участвует в аутентификации узлы должны иметь одинаковую конфигурацию.

  3. Некорректные учетные данные
    Пересмотрите логин и пароль, указанные в kafka_server_jaas.conf. Возможно, они могут содержать неявные символы или ошибки.

  4. Версия Kafka
    Убедитесь, что вы используете последнюю стабильную версию Kafka. Некоторые проблемы с аутентификацией могут быть устранены в более новых версиях.

  5. Настройка сетевого взаимодействия
    Убедитесь, что порты, указанные в вашей конфигурации, открыты и доступны между всеми узлами кластера. Используйте утилиты вроде telnet или nc для диагностики соединений.

  6. Логи и отладка
    Проверьте логи Kafka на наличие более подробной информации об ошибках. Логи могут содержать подсказки о том, что конкретно идет неправильно в процессе аутентификации.

Заключение

Поиск проблем с аутентификацией может занять много времени, но систематический подход и прочное понимание архитектуры Kafka помогут вам вышеуказанными шагами устранить проблемы. Если все вышеперечисленное не работает, рассмотрите возможность обращения за поддержкой в сообществах разработчиков Kafka или на форумах, таких как Stack Overflow. Если у вас есть дополнительные вопросы, не стесняйтесь их задавать. Удачи в работе с вашим кластером Kafka!

Оцените материал
Добавить комментарий

Капча загружается...