Docker-compose wurstmeister / kafka не может проанализировать kafka_opts

У меня есть базовый файл для создания докеров для wurstmeister / kafka

Я пытаюсь настроить его на использование SASL_PLAIN с SSL Однако я продолжаю получать эту ошибку независимо от того, сколько способов я пытаюсь указать свой файл jaas

Это ошибка, которую я получаю

[2018-04-11 10:34:34,545] FATAL [KafkaServer id=1001] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
java.lang.IllegalArgumentException: Could not find a 'KafkaServer' or 'sasl_ssl.KafkaServer' entry in the JAAS configuration. System property 'java.security.auth.login.config' is not set

Это те вары, которые у меня есть. На последнем я указываю свой файл jaas

environment:
  KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
  KAFKA_HOST_NAME: 10.10.10.1
  KAFKA_PORT: 9092
  KAFKA_ADVERTISED_PORT: 9093
  KAFKA_ADVERTISED_HOST_NAME: 10.10.10.1
  KAFKA_LISTENERS: PLAINTEXT://:9092,SASL_SSL://:9093
  KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://10.10.10.1:9092,SASL_SSL://10.10.10.1:9093
  KAFKA_SECURITY_INTER_BROKER_PROTOCOL: SASL_SSL
  KAFKA_SASL_ENABLED_MECHANISMS: PLAIN
  SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAIN
  KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAIN
  KAFKA_SSL_TRUSTSTORE_LOCATION: /kafka.server.truststore.jks
  KAFKA_SSL_TRUSTSTORE_PASSWORD: password
  KAFKA_SSL_KEYSTORE_LOCATION: /kafka.server.keystore.jks
  KAFKA_SSL_KEYSTORE_PASSWORD: password
  KAFKA_SSL_KEY_PASSWORD: password
  KAFKA_OPTS: '-Djava.security.auth.login.config=/path/kafka_server_jaas.conf'

Также, когда я пытаюсь проверить журналы докеров, я вижу

/usr/bin/start-kafka.sh: line 96: KAFKA_OPTS=-Djava.security.auth.login.config: bad substitution

Любая помощь приветствуется!

1
0
1 733
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

равно '=' внутри последнего значения вызывает эту проблему. KAFKA_OPTS: '-Djava.security.auth.login.config = / path / kafka_server_jaas.conf'
Вот что у меня получилось после отладки.

+ for VAR in $(env)
+ [[ KAFKA_OPTS=- 
Djava.security.auth.login.config=/path/kafka_server_jaas.conf =~ ^KAFKA_ ]]
+ [[ ! KAFKA_OPTS=- 
Djava.security.auth.login.config=/path/kafka_server_jaas.conf =~ 
^KAFKA_HOME ]]
++ echo KAFKA_OPTS=- 
Djava.security.auth.login.config=/path/kafka_server_jaas.conf
++ sed -r 's/KAFKA_(.*)=.*/\1/g'
++ tr '[:upper:]' '[:lower:]'
++ tr _ .
+ kafka_name=opts=-djava.security.auth.login.config
++ echo KAFKA_OPTS=- 
Djava.security.auth.login.config=/path/kafka_server_jaas.conf
++ sed -r 's/(.*)=.*/\1/g'
+ env_var=KAFKA_OPTS=-Djava.security.auth.login.config
+ grep -E -q '(^|^#)opts=-djava.security.auth.login.config=' 
/opt/kafka/config/server.properties
start-kafka.sh: line 96: KAFKA_OPTS=-Djava.security.auth.login.config: bad 
substitution

и это фрагмент кода, который выполняет эту операцию.

88  for VAR in $(env)
89  do
90    if [[ $VAR =~ ^KAFKA_ && ! $VAR =~ ^KAFKA_HOME ]]; then
91      kafka_name=$(echo "$VAR" | sed -r 's/KAFKA_(.*)=.*/\1/g' | tr '[:upper:]' '[:lower:]' | tr _ .)
92      env_var=$(echo "$VAR" | sed -r 's/(.*)=.*/\1/g')
93      if grep -E -q '(^|^#)'"$kafka_name=" "$KAFKA_HOME/config/server.properties"; then
94          sed -r -i 's@(^|^#)('"$kafka_name"')=(.*)@\2='"${!env_var}"'@g' "$KAFKA_HOME/config/server.properties" #note that no config values may contain an '@' char
95      else
96          echo "$kafka_name=${!env_var}" >> "$KAFKA_HOME/config/server.properties"
97      fi
98    fi
99
100    if [[ $VAR =~ ^LOG4J_ ]]; then
101      log4j_name=$(echo "$VAR" | sed -r 's/(LOG4J_.*)=.*/\1/g' | tr '[:upper:]' '[:lower:]' | tr _ .)
102      log4j_env=$(echo "$VAR" | sed -r 's/(.*)=.*/\1/g')
103      if grep -E -q '(^|^#)'"$log4j_name=" "$KAFKA_HOME/config/log4j.properties"; then
104          sed -r -i 's@(^|^#)('"$log4j_name"')=(.*)@\2='"${!log4j_env}"'@g' "$KAFKA_HOME/config/log4j.properties" #note that no config values may contain an'@' char
105      else
106          echo "$log4j_name=${!log4j_env}" >> "$KAFKA_HOME/config/log4j.properties"
107      fi
108    fi
109  done

Спасибо, но не совсем отвечаю, как мне настроить это значение в настоящее время.

jimgug 11.04.2018 15:34

Вы можете выполнить следующие шаги, чтобы преодолеть эту ситуацию: 1. Создайте файл Dockerfile.

fly2matrix 12.04.2018 07:22

Чтобы преодолеть эту ситуацию, вы можете выполнить следующие шаги: 1: Создать файл Docker <br/> 2: Расширить исходный образ докера <br/> 3. Создайте новый скрипт, в котором вы добавляете требуемый параметр в "$ KAFKA_HOME / config / server.properties" <br/> 4: Скопируйте новый скрипт и измените точку входа в докер <br/> 5: Не устанавливайте переменную среды для KAFKA_OPTS в docker-compose .yml

fly2matrix 12.04.2018 07:29
Ответ принят как подходящий

Обновление: они исправили это, и теперь оно объединено!

https://github.com/wurstmeister/kafka-docker/pull/321

Теперь есть ошибка с wurstmeister / kafka, но они вернулись ко мне с обходным путем следующим образом

I believe his is part of a larger namespace collision problem that affects multiple elements such as Kubernetes deployments etc (as well as other KAFKA_ service settings).

Given you are referencing an external file /kafka_server_jaas.conf, i'm assuming you're OK adding/mounting extra files through; a work-around is to specify a CUSTOM_INIT_SCRIPT environment var, which should be a script similar to:

#!/bin/bash
export KAFKA_OPTS="-Djava.security.auth.login.config=/kafka_server_jaas.conf"
This is executed after the substitution part that is failing.

This could have been done inline, however there is currently a bug in how we process the environment, where we need to specify the input separator to make this work correctly.

Надеюсь, это сработает!

На самом деле вышесказанное не работает до сих пор в разговорах о проблеме на github.

jimgug 11.04.2018 18:35

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