kafka3.8.0单节点kraft+ssl部署
本文档介绍了如何进行kafka单节点kraft部署及如何在kafka中配置SSL加密,包括证书的重新生成过程,如单节点kraft服务启动,创建主题,查看主题,订阅主题,消费主题,为broker生成SSL密钥和证书,创建CA证书,签名证书,验证服务。
一、单节点kraft部署
创建kafka安装路径,下载kafka,部署kraft模式kafka,启动服务,创建主题,生产者,消费者,发送消息查看消息:
1. 创建kafka安装路径
登陆linux系统打开一个终端1,创建kafka安装路径:
mkdir kafka
2. 下载kafka3.8.0
cd kafka
wget https://downloads.apache.org/kafka/3.8.0/kafka_2.13-3.8.0.tgz
3. 部署kraft模式kafka
修改主机名称为node1:
hostname node1
验证修改结果:
uname
解压文件:
tar -zxvf kafka_2.13-3.8.0.tgz
进入 kafka_2.13-3.8.0 路径:
cd kafka_2.13-3.8.0
生成 UUID:
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
格式化日志目录:
bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
格式化成功后,会根据 config/kraft/server.properties 的如下配置:
log.dirs=/tmp/kraft-combined-logs
在 /tmp下创建 kraft-combined-logs 目录,并在里面生成 bootstrap.checkpoint
4. 启动服务
bin/kafka-server-start.sh config/kraft/server.properties
如果希望后台启动,则如下 加上 -daemon 即可
5. 验证服务
打开另一个终端2会话,cd 进入 kafka_2.13-3.8.0 路径
创建主题 yykj-topic
bin/kafka-topics.sh --create --topic yykj-topic --bootstrap-server node1:9092
查看指定主题的详细信息
bin/kafka-topics.sh --describe --topic yykj-topic --bootstrap-server node1:9092
查看所有已有的主题
bin/kafka-topics.sh --list --bootstrap-server node1:9092
6. 生产者
打开另一个终端3会话,产生主题 yykj-topic 消息
bin/kafka-console-producer.sh --topic yykj-topic--bootstrap-server node1:9092
7. 消费者
打开另一个终端4会话,订阅主题 yykj-topic
bin/kafka-console-consumer.sh --topic yykj-topic --from-beginning --bootstrap-server node1:9092
8. 发送消息 查看消息
切换到生产者终端3输入:
hello 宇一科技
切换到消费者终端4,可以看到生产者产生的消息
hello 宇一科技
关闭服务 :关闭终端终端1
二、ssl加密部署
提供脚本,生成证书,配置证书,验证服务
1. 创建证书路径
打开另一个终端5会话,cd 进入kafka路径(和kafka_2.13-3.8.0同级),创建路径 ssl
mkdir ssl
进入ssl路径
cd ssl
2. 创建生成证书脚本
vim cert.sh
按下 i 按键,切换 vim 为插入模式
将证书脚本复制粘贴到 cert.sh 文件,按下 ESC 按键,切换 vim 为命令模式,输入字符 wq,按下 回车键 保存退出 vim。
证书脚本
echo "Step1: init paramters"
BASE_DIR=/<font color=red>你的路径</font>/ssl
CERT_OUTPUT_PATH="$BASE_DIR/cert"
PASSWORD=yourpassword
KEY_STORE="$CERT_OUTPUT_PATH/kafka.keystore"
TRUST_STORE="$CERT_OUTPUT_PATH/kafka.truststore"
KEY_PASSWORD=$PASSWORD
STORE_PASSWORD=$PASSWORD
TRUST_KEY_PASSWORD=$PASSWORD
TRUST_STORE_PASSWORD=$PASSWORD
CLUSTER_NAME=test-cluster-01
CERT_AUTH_FILE="$CERT_OUTPUT_PATH/ca-cert"
CLUSTER_CERT_FILE="$CERT_OUTPUT_PATH/${CLUSTER_NAME}-cert"
DAYS_VALID=365
D_NAME="CN=localhost, OU=yykj, O=yykj, L=China, ST=China, C=bj"
mkdir -p $CERT_OUTPUT_PATH
echo "Step2: Create certificate to keystore"
keytool -keystore $KEY_STORE -alias $CLUSTER_NAME -validity $DAYS_VALID -genkey -keyalg RSA -storepass $STORE_PASSWORD -keypass $KEY_PASSWORD -dname "$D_NAME"
echo "Step3: Create CA"
openssl req -new -x509 -keyout "$CERT_OUTPUT_PATH/ca-key" -out "$CERT_AUTH_FILE" -days "$DAYS_VALID" -passin pass:"$PASSWORD" -passout pass:"$PASSWORD" -subj "/C=CN/ST=XX/L=XX/O=XX/CN=XX"
echo "Step4: Import CA into truststore"
keytool -keystore "$TRUST_STORE" -alias CARoot -import -file "$CERT_AUTH_FILE" -storepass "$TRUST_STORE_PASSWORD" -keypass "$TRUST_KEY_PASS" -noprompt
echo "Step5: Export certificate from keystore"
keytool -keystore "$KEY_STORE" -alias "$CLUSTER_NAME" -certreq -file "$CLUSTER_CERT_FILE" -storepass "$STORE_PASSWORD" -keypass "$KEY_PASSWORD" -noprompt
echo "Step6: Signing the certificate"
openssl x509 -req -CA "$CERT_AUTH_FILE" -CAkey $CERT_OUTPUT_PATH/ca-key -in "$CLUSTER_CERT_FILE" -out "${CLUSTER_CERT_FILE}-signed" -days "$DAYS_VALID" -CAcreateserial -passin pass:"$PASSWORD"
echo "Setp7: Import CA into keystore"
keytool -keystore "$KEY_STORE" -alias CARoot -import -file "$CERT_AUTH_FILE" -storepass "$STORE_PASSWORD" -keypass "$KEY_PASSWORD" -noprompt
echo "Setp8: Import signed certificate into keystore"
keytool -keystore "$KEY_STORE" -alias "${CLUSTER_NAME}" -import -file "${CLUSTER_CERT_FILE}-signed" -storepass "$STORE_PASSWORD" -keypass "$KEY_PASSWORD" -noprompt
3. 生成证书
执行指令
sh cert.sh
生成路径 cert ,cert 路径下生成文件
ca-cert
ca-cert.srl
ca-key
kafka.keystore
kafka.truststore
test-cluster-01-cert
test-cluster-01-cert-signed
4. 生成的文件说明
ca-cert:CA文件,不要把该文件拷贝到别的broker机器上!
test-cluster-cert-signed:CA已签发的Kafka证书文件,不要把该文件拷贝到别的broker机器上!
test-cluster-cert:Kafka认证文件(包含公钥和私钥),不要把该文件拷贝到别的broker机器上!
kafka.keystore:Kafka的keystore文件,所有clients端和broker机器上都需要!
kafka.truststore:Kafka的truststore文件,所有clients端和broker机器上都需要!
5. 配置server.properties文件
配置文件 kafka_2.13-3.8.0/config/kraft/server.properties 修改添加如下配置
listeners=SSL://0.0.0.0:8066,CONTROLLER://:9093
advertised.listeners=SSL://外网IP:8066
ssl.keystore.location=/你的路径/ssl/cert/kafka.keystore
ssl.keystore.password=yourpassword
ssl.key.password=yourpassword
ssl.truststore.location=/你的路径/ssl/cert/kafka.truststore
ssl.truststore.password=yourpassword
#这一行官方文档没有,加上,否则可能报错
ssl.endpoint.identification.algorithm=
ssl.client.auth=required # 设置clients也要开启认证
#inter.broker.listener.name=PLAINTEXT # 这句注释掉,加入下面这句
security.inter.broker.protocol=SSL
路径 kafka_2.13-3.8.0 创建 client-ssl.config 文件,配置如下
bootstrap.servers=node1:8066
security.protocol=SSL
ssl.keystore.location=/你的路径/ssl/cert/kafka.keystore
ssl.keystore.password=yourpassword
ssl.truststore.location=/你的路径/ssl/cert/afka.truststore
ssl.truststore.password=yourpassword
ssl.endpoint.identification.algorithm=
ssl.key.password=yourpassword
6. 启动服务
打开另一个终端6会话,cd 进入路径 kafka_2.13-3.8.0,执行如下指令
bin/kafka-server-start.sh config/kraft/server.properties
如果希望后台启动,则如下 加上 -daemon 即可
7. 创建主题 查看主题
打开另一个终端7会话,cd 进入路径 kafka_2.13-3.8.0,执行如下指令
bin/kafka-topics.sh --create --topic yykj-topic-ssl --bootstrap-server node1:8066 --command-config client-ssl.config
bin/kafka-topics.sh --describe --topic yykj-topic-ssl --bootstrap-server node1:8066 --command-config client-ssl.config
bin/kafka-topics.sh --list --bootstrap-server node1:8066 --command-config client-ssl.config
8. 生产者
打开另一个终端8会话,cd 进入路径 kafka_2.13-3.8.0,执行如下指令 生产消息
bin/kafka-console-producer.sh --broker-list node1:8066 --topic yykj-topic-ssl --producer.config client-ssl.config
9. 消费者
打开另一个终端9会话,cd 进入路径 kafka_2.13-3.8.0,执行如下指令 消费消息
bin/kafka-console-consumer.sh --bootstrap-server node1:8066 --topic yykj-topic-ssl --from-beginning --consumer.config client-ssl.config
10. 发送消息 查看消息
切换到生产者终端8输入:
hello 宇一科技
切换到消费者终端9,可以看到生产者产生的消息
hello 宇一科技
至此inux环境最新kafka3.8.0单节点kraft+ssl部署完成!!!
下一章 基于 kafka+单节点+ssl 的基础上增加 sasl 配置
版权归原作者 玄振翅 所有, 如有侵权,请联系我们删除。