Настройка Spring Kafka SSL в загрузочном приложении Spring.yml - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь настроить приложение Spring Boot с клиентом Kafka для использования SSL. Мои файлы keystore.jks и truststore.jks хранятся в файловой системе (в контейнере Docker) из-за этого: https://github.com/spring-projects/spring-kafka/issues/710

Вот мое application.yml:

spring:
  kafka:
      ssl:
        key-password: pass
        keystore-location: /tmp/kafka.client.keystore.jks
        keystore-password: pass
        truststore-location: /tmp/kafka.client.truststore.jks
        truststore-password: pass

Но когда я запускаю приложение (в Docker-контейнере), оно говорит:

Caused by: java.lang.IllegalStateException: Resource 'class path resource [tmp/kafka.client.keystore.jks]' must be on a file system
[..]
Caused by: java.io.FileNotFoundException: class path resource [tmp/kafka.client.keystore.jks] cannot be resolved to URL because it does not exist

Я проверил контейнер и .jks есть в / tmp.

Я не могу понять, как передать .jks в весеннюю загрузку.

ОБНОВЛЕНИЕ 06/07/2018

Это мой докер-файл

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY ssl/kafka.client.keystore.jks /tmp
COPY ssl/kafka.client.truststore.jks /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Если кто-то все еще смотрит на это, попробуйте добавить файл: / к пути к файлу:

truststorelocation: "file:/tmp/kafka.client.keystore.jks"

Ошибка жалуется на отсутствие URL-адреса - добавление протокола делает путь URL-адресом (в сущности говоря)

0 голосов
/ 06 июля 2018

В соответствии с обсуждением и включением конфигурации kafka ssl, сначала необходимо включить и установить свойства ssl в consumerFactory

@Bean
public ConsumerFactory<String, ReportingTask> consumerFactory() {
    Map<String, Object> props = new HashMap<>();
    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
    props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
    props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
    props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonSerializable.class);
    props.put(ConsumerConfig.CLIENT_ID_CONFIG, clientId);
    props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, enableAutoCommit);
    props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, autoCommitInterval);
    props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, sessionTimeout);
    props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, maxRecords);
    props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, offSet);
    if (sslEnabled) {
        props.put("security.protocol", "SSL");
        props.put("ssl.truststore.location", trustStoreLocation);
        props.put("ssl.truststore.password", trustStorePassword);

        props.put("ssl.key.password", keyStorePassword);
        props.put("ssl.keystore.password", keyStorePassword);
        props.put("ssl.keystore.location", keyStoreLocation);
    }
    return new DefaultKafkaConsumerFactory<>(props, new StringDeserializer(), new JsonDeserializer<>(Task.class));
}

и скопировать сертификаты в докер контейнер

COPY ssl/stage/* /var/lib/kafka/stage/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...