0


linux环境最新kafka3.8.0单节点kraft+ssl部署

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 配置

标签: linux ssl 运维

本文转载自: https://blog.csdn.net/weixin_39004677/article/details/141923340
版权归原作者 玄振翅 所有, 如有侵权,请联系我们删除。

“linux环境最新kafka3.8.0单节点kraft+ssl部署”的评论:

还没有评论