【问题标题】:KEYSTORE.JKS exists FAILED - exited with code 1 #662 - Confluent kafkaKEYSTORE.JKS 存在失败 - 以代码 1 #662 退出 - Confluent kafka
【发布时间】:2019-05-26 21:27:28
【问题描述】:

我正在尝试将 ssl 配置为融合 kafka docker 平台并在开始说时出错

日志:

命令 [/usr/local/bin/dub 路径 /etc/kafka/secrets/kafka.server.keystore.jks 存在] 失败! kafka_kafka-broker1_1_13d7835ad32d 以代码 1 退出

Docker 配置:

version:  '3'
services:
  zookeeper1:
    image: confluentinc/cp-zookeeper:5.1.0
    hostname: zookeeper1
    ports:
      - "2181:2181"
      - "2888:2888"
      - "3888:3888"
    environment:
      ZOOKEEPER_SERVER_ID: 1
      ZOOKEEPER_SERVERS:  0.0.0.0:2888:3888
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    logging:  
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    volumes:
      - zookeeper-data:/var/lib/zookeeper/data
      - zookeeper-log:/var/lib/zookeeper/log
  kafka-broker1:
    image: confluentinc/cp-kafka:5.1.0
    hostname: kafka-broker1:
    ports:
      - "9092:9092"
      - "9093:9093"
    environment:
      KAFKA_LISTENERS: "PLAINTEXT://0.0.0.0:9092,SSL://0.0.0.0:9093"
      KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafkassl.com:9092,SSL://kafkassl.com:9093"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper1:2181
      KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
      KAFKA_DELETE_TOPIC_ENABLE: "true"
      KAFKA_LOG_RETENTION_HOURS: 168
      KAFKA_OFFSETS_RETENTION_MINUTES: 43800
      KAFKA_SSL_KEYSTORE_FILENAME: kafka.server.keystore.jks
      KAFKA_SSL_TRUSTSTORE_LOCATION: /ssl/kafka.server.truststore.jks
      KAFKA_SSL_TRUSTSTORE_PASSWORD: pass
      KAFKA_SSL_KEYSTORE_LOCATION: /ssl/kafka.server.keystore.jks
      KAFKA_SSL_KEYSTORE_PASSWORD: pass
      KAFKA_SSL_KEY_PASSWORD: pass
    volumes:
      - kafka-data:/var/lib/kafka/data
      - /ssl:/etc/kafka/secrets

    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    depends_on:
      - zookeeper1
volumes:
  zookeeper-data:
  zookeeper-log:
  kafka-data: 

【问题讨论】:

  • 请出示您的 docker 配置
  • 添加了上面的docker配置请检查。非常感谢
  • 你的卷在/etc/kafka/sercrets,所以环境变量也需要使用/etc/kafka/secrets/。我强烈建议starting with the example,然后只编辑 JKS 文件和密码,不理会 Docker Compose 文件。
  • 我找到了解决方案。步骤: 1. 创建一个文件夹并复制您的.jks 文件 2. 创建三个文本文件并粘贴您的 jks 密码 3. 并安装包含密码的 jks 和文本文件。这肯定会奏效。示例:以下环境属性应该是 docker compose file KAFKA_SSL_KEYSTORE_CREDENTIALS 中您的 kafka 的文本文件:keystore_creds -->
  • @Senthil,能否请您添加这个问题的答案,以及 docker-compose 的最终外观?

标签: docker ssl apache-kafka confluent-platform jks


【解决方案1】:

以下是可以使用 SSL 支持启动 kafka docker-compose 的步骤(@Senthil 已经在他的 cmets 中提供了一些指导)

  • 在 docker-compose 目录中有一个所谓的 secrets 目录,其中包含用于生成密钥库、信任库和 ssl 密码的 shell 脚本。进入 docker-compose for kafka 的根目录并运行此脚本,该脚本将生成所需文件(例如:./secrets/create-certs

  • 将所有生成的文件复制到secrets目录中

  • 将 secrets 目录的卷从主机安装到 dockerized 卷。将以下内容放在卷部分的 docker-compose 文件中

volumes:
  - ./secrets/:/etc/kafka/secrets

使用 docker-compose up 运行

【讨论】:

    【解决方案2】:

    FWIW,这是我用来解决此问题的方法以及遇到的问题。这是我的 docker compose 文件的一部分。如果您要打开文件 kafka_Secret.txt,您只会在其中看到 P@ssword。我想要解决的一个问题是 - ./kafka/secrets:/etc/kafka/secrets 被设置为卷而不是绑定挂载。我通过运行 container inspect 确认了这一点。 (通过运行 docker container ls 获取容器名称)。它显示了卷挂载而不是绑定挂载。为了解决这个问题,我从 docker 中删除了这些卷以重新开始。即使我重新创建了容器,挂在周围的卷仍然附着在我的 kafka 容器上。

      zookeeper:
    image: zookeeper:3.4.9
    hostname: zookeeper
    ports:
      - '2181:2181'
    environment:
      ZOO_MY_ID: 1
      ZOO_PORT: 2181
      ZOO_SERVERS: server.1=zookeeper:2888:3888
      ZOO_LOG4J_PROP: "${KAFKA_LOG_LEVEL},CONSOLE"
    networks:
      - ms_network
    volumes:
      - ./kafka/zookeeper/data:/data
      - ./kafka/zookeeper/datalog:/datalog
    
    
    kafka:
    image: confluentinc/cp-kafka:5.5.0
    hostname: kafka
    ports:
      - '19092:19092'
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_ADVERTISED_LISTENERS: SSL://kafka:19092
      KAFKA_SSL_KEYSTORE_FILENAME: keystore.jks
      KAFKA_SSL_KEYSTORE_CREDENTIALS: kafka_secret.txt
      KAFKA_SSL_KEY_CREDENTIALS: kafka_secret.txt
      KAFKA_SSL_TRUSTSTORE_FILENAME: truststore.jks
      KAFKA_SSL_TRUSTSTORE_CREDENTIALS: kafka_secret.txt
      KAFKA_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM: " "
      KAFKA_SSL_CLIENT_AUTH: requested
      KAFKA_SECURITY_INTER_BROKER_PROTOCOL: SSL
      KAFKA_LOG4J_LOGGERS: 'org.apache.zookeeper=${KAFKA_LOG_LEVEL},org.apache.kafka=${KAFKA_LOG_LEVEL},kafka=${KAFKA_LOG_LEVEL},kafka.cluster=${KAFKA_LOG_LEVEL},kafka.controller=${KAFKA_LOG_LEVEL},kafka.coordinator=${KAFKA_LOG_LEVEL},kafka.log=${KAFKA_LOG_LEVEL},kafka.server=${KAFKA_LOG_LEVEL},kafka.zookeeper=${KAFKA_LOG_LEVEL},state.change.logger=${KAFKA_LOG_LEVEL},kafka.producer.async.DefaultEventHandler=${KAFKA_LOG_LEVEL},kafka.authorizer.logger=${KAFKA_LOG_LEVEL},kafka.log.LogCleaner=${KAFKA_LOG_LEVEL},kafka.request.logger=${KAFKA_LOG_LEVEL}'
      KAFKA_LOG4J_ROOT_LOGLEVEL: ${KAFKA_LOG_LEVEL}
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    volumes:
      - ./kafka/secrets:/etc/kafka/secrets
      - ./kafka/data:/var/lib/kafka/data
    depends_on:
      - zookeeper
    networks:
      - ms_network
    

    【讨论】:

      【解决方案3】:

      这些步骤在 Windows 中对我有用:

      1 - 使用 Windows WSL 生成密钥:

      cd $(pwd)/examples/kafka-cluster-ssl/secrets ./create-certs.sh (Type yes for all "Trust this certificate? [no]:" prompts.)

      2 - 使用 PowerShell 设置环境变量 KAFKA_SSL_SECRETS_DIR

      $env:KAFKA_SSL_SECRETS_DIR= "xxxx\cp-docker-images\examples\kafka-cluster-ssl\secrets"

      3 - 使用环境变量运行 kafka-ssl 集群节点:

      docker run -d --net=host --name=kafka-ssl-1 -e KAFKA_ZOOKEEPER_CONNECT=localhost:22181,localhost:32181,localhost:42181 -e KAFKA_ADVERTISED_LISTENERS=SSL://localhost:29092 -e KAFKA_SSL_KEYSTORE_FILENAME=kafka.broker1.keystore.jks -e KAFKA_SSL_KEYSTORE_CREDENTIALS=broker1_keystore_creds -e KAFKA_SSL_KEY_CREDENTIALS=broker1_sslkey_creds -e KAFKA_SSL_TRUSTSTORE_FILENAME=kafka.broker1.truststore.jks -e KAFKA_SSL_TRUSTSTORE_CREDENTIALS=broker1_truststore_creds -e KAFKA_SECURITY_INTER_BROKER_PROTOCOL=SSL -v ${env:KAFKA_SSL_SECRETS_DIR}:/etc/kafka/secrets confluentinc/cp-kafka:5.0.0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-14
        • 2018-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-11
        相关资源
        最近更新 更多