You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Docker中运行的Kafka配置SSL与SASL安全认证?

本地Docker部署支持SSL+SASL认证的Kafka教程

基于你现有配置,按以下步骤修改即可完成搭建:

1. 生成SSL自签证书

在项目根目录创建certs文件夹,执行以下命令生成证书和密钥库,过程中提示输入密码可统一设置为kafka123(可自行修改,后续配置要保持一致):

# 生成服务端密钥库
keytool -keystore certs/kafka.server.keystore.jks -alias localhost -validity 365 -keyalg RSA -genkey
# 生成CA证书
openssl req -new -x509 -keyout certs/ca-key -out certs/ca-cert -days 365
# 导入CA证书到服务端信任库
keytool -keystore certs/kafka.server.truststore.jks -alias CARoot -import -file certs/ca-cert
# 导入CA证书到客户端信任库(用于后续客户端连接)
keytool -keystore certs/kafka.client.truststore.jks -alias CARoot -import -file certs/ca-cert
# 导出服务端证书
keytool -keystore certs/kafka.server.keystore.jks -alias localhost -certreq -file certs/cert-file
# 用CA签发服务端证书
openssl x509 -req -CA certs/ca-cert -CAkey certs/ca-key -in certs/cert-file -out certs/cert-signed -days 365 -CAcreateserial
# 导入CA证书和签发后的服务端证书到服务端密钥库
keytool -keystore certs/kafka.server.keystore.jks -alias CARoot -import -file certs/ca-cert
keytool -keystore certs/kafka.server.keystore.jks -alias localhost -import -file certs/cert-signed

2. 新增SASL认证配置

在./config/kafka-1/目录下创建kafka_server_jaas.conf文件,内容如下,可自行修改username和password字段:

KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin123"
    user_admin="admin123";
};

3. 修改server.properties配置

在你原有server.properties基础上新增以下配置:

# 配置监听器,内部容器通信用PLAINTEXT,外部访问用SASL_SSL
listeners=PLAINTEXT://0.0.0.0:9092,SASL_SSL://0.0.0.0:9093
advertised.listeners=PLAINTEXT://kafka-1:9092,SASL_SSL://localhost:9093
# 启用SASL明文机制
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
# SSL配置
ssl.keystore.location=/kafka/certs/kafka.server.keystore.jks
ssl.keystore.password=kafka123
ssl.key.password=kafka123
ssl.truststore.location=/kafka/certs/kafka.server.truststore.jks
ssl.truststore.password=kafka123
ssl.client.auth=required
ssl.endpoint.identification.algorithm=

4. 修改start-kafka.sh启动脚本

在脚本启动Kafka的命令前新增JVM参数,指定SASL配置文件:

export KAFKA_OPTS="-Djava.security.auth.login.config=/kafka/config/kafka_server_jaas.conf"
# 原有启动命令保持不变,例如:
# /kafka/bin/kafka-server-start.sh /kafka/config/server.properties

5. 修改Dockerfile

在原有Dockerfile基础上新增证书和配置复制逻辑:

FROM openjdk:11.0.10-jre-buster

RUN apt-get update && \
    apt-get install -y curl
         
ENV KAFKA_VERSION 2.7.0
ENV SCALA_VERSION 2.13 

RUN  mkdir /tmp/kafka && \
    curl "https://archive.apache.org/dist/kafka/${KAFKA_VERSION}/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz" \
    -o /tmp/kafka/kafka.tgz && \
    mkdir /kafka && cd /kafka && \
    tar -xvzf /tmp/kafka/kafka.tgz --strip 1

# 新增:复制证书和SASL配置
COPY certs/ /kafka/certs/
COPY config/kafka-1/kafka_server_jaas.conf /kafka/config/

COPY start-kafka.sh  /usr/bin
RUN chmod +x  /usr/bin/start-kafka.sh

CMD ["start-kafka.sh"]

6. 修改docker-compose.yaml配置

在kafka服务下新增9093端口映射,无需修改其他原有配置:

version: "3.8"
services:

  zookeeper-1:
    container_name: zookeeper-1
    image: aimvector/zookeeper:2.7.0
    build:
      context: ./zookeeper
    volumes:
    - ./config/zookeeper-1/zookeeper.properties:/kafka/config/zookeeper.properties
    - ./data/zookeeper-1/:/tmp/zookeeper/
    networks:
    - kafka
  
  kafka-1:
    container_name: kafka-1
    image: aimvector/kafka:2.7.0
    ports:
      - 9092:9092
      - 9093:9093 # 新增SASL_SSL端口映射
    build: 
      context: .
    volumes:
    - ./config/kafka-1/server.properties:/kafka/config/server.properties
    - ./data/kafka-1/:/tmp/kafka-logs/
    networks:
    - kafka

networks: 
  kafka:
    name: kafka

7. 服务启动与验证

执行docker-compose up -d --build启动服务,启动完成后可通过以下命令测试连接:

# 进入kafka容器
docker exec -it kafka-1 bash
# 创建测试topic
/kafka/bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
# 测试SASL_SSL连接生产消息
/kafka/bin/kafka-console-producer.sh --broker-list localhost:9093 --topic test-topic \
--producer-property security.protocol=SASL_SSL \
--producer-property sasl.mechanism=PLAIN \
--producer-property ssl.truststore.location=/kafka/certs/kafka.client.truststore.jks \
--producer-property ssl.truststore.password=kafka123 \
--producer-property sasl.jaas.config='org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin123";'

内容的提问来源于stack exchange,提问作者Juraj Zovinec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:06:04