第一步:创建数据目录
sudo mkdir -p /app/kafka/certs
sudo mkdir -p /app/kafka/data
sudo chmod -R 777 /app/kafka
第二步:生成服务端证书
-
创建 CA(根证书):
Bashcd /app/kafka/certsopenssl req -new -x509 -nodes -days 3650 \ -subj "/CN=localhost" \ -keyout server.key -out server.crtcat server.key server.crt > server.pem -
Spring Boot 客户端配置
在你的本地开发项目中,修改
YAMLapplication.yml。由于我们使用的是自签名证书,需要关闭域名校验。spring: kafka: bootstrap-servers: <你的公网IP>:9094 properties: security.protocol: SSL ssl.truststore.type: PEM # 注意:如果是在本地 Windows 开发,这里可以写文件绝对路径 ssl.truststore.location: src/main/resources/kafka/server.crt # 必须加上这一行,否则自签名证书会因为域名不匹配报错 ssl.endpoint.identification.algorithm: ""
第三步:准备 Docker 挂载目录
将生成的 kafka.server.keystore.jks 和 kafka.server.truststore.jks 放到服务器的一个目录下,例如 /opt/kafka/certs。
第四步:修改 Docker Run 命令
在双监听器基础上,加入 SSL 相关的配置项。注意 EXTERNAL 监听器的协议要改为 SSL。
docker run -d \
--name kafka-server \
--restart always \
-p 9092:9092 \
-p 9094:9094 \
-v /app/kafka/certs:/opt/kafka/config/certs \
-v /app/kafka/data:/var/lib/kafka/data \
-e KAFKA_NODE_ID=0 \
-e KAFKA_PROCESS_ROLES=broker,controller \
-e KAFKA_CONTROLLER_QUORUM_VOTERS=0@localhost:9093 \
-e KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER \
-e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,EXTERNAL:SSL,CONTROLLER:PLAINTEXT \
-e KAFKA_LISTENERS=INTERNAL://0.0.0.0:9092,EXTERNAL://0.0.0.0:9094,CONTROLLER://0.0.0.0:9093 \
-e KAFKA_ADVERTISED_LISTENERS=INTERNAL://<内网IP>:9092,EXTERNAL://<外网IP>:9094 \
-e KAFKA_INTER_BROKER_LISTENER_NAME=INTERNAL \
-e KAFKA_SSL_KEYSTORE_TYPE=PEM \
-e KAFKA_SSL_KEYSTORE_LOCATION=/opt/kafka/config/certs/server.pem \
-e KAFKA_SSL_TRUSTSTORE_TYPE=PEM \
-e KAFKA_SSL_TRUSTSTORE_LOCATION=/opt/kafka/config/certs/server.crt \
-e KAFKA_SSL_CLIENT_AUTH=none \
-e KAFKA_LOG_RETENTION_MS=86400000 \
-e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
-e KAFKA_HEAP_OPTS="-Xms512m -Xmx2G" \
--log-opt max-size=1g \
--log-opt max-file=2 \
apache/kafka:3.8.1

861

被折叠的 条评论
为什么被折叠?



