本文结合一个具体的实例给出如何在公有云环境上配置Kafka broker与client之间的SSL设置。
配置SSL的步骤有很多,大致流程如下:
本例会创建一个方便的SHELL脚本,自动地执行前7步的工作。这样用户实际上只需要做3件事即可:
运行setup_ssl_for_servers.sh脚本(本例使用这个名字)配置broker的server.properties配置clients的特定属性下面我们来看下setup_ssl_for_servers.sh脚本的实际内容,首先来看第一部分:
#!/bin/bash
################################## 设置环境变量 ##############################BASE_DIR=/mnt/disk/huxitest # SSL各种生成文件的基础路径CERT_OUTPUT_PATH="$BASE_DIR/certificates" # 证书文件生成路径PASSWORD=kafka1234567 # 密码KEY_STORE="$CERT_OUTPUT_PATH/kafka.keystore" # Kafka keystore文件路径TRUST_STORE="$CERT_OUTPUT_PATH/kafka.truststore" # Kafka truststore文件路径KEY_PASSWORD=$PASSWORD # keystore的key密码STORE_PASSWORD=$PASSWORD # keystore的store密码TRUST_KEY_PASSWORD=$PASSWORD # truststore的key密码TRUST_STORE_PASSWORD=$PASSWORD # truststore的store密码CLUSTER_NAME=test-cluster # 指定别名CERT_AUTH_FILE="$CERT_OUTPUT_PATH/ca-cert" # CA证书文件路径CLUSTER_CERT_FILE="$CERT_OUTPUT_PATH/${CLUSTER_NAME}-cert" # 集群证书文件路径DAYS_VALID=365 # key有效期D_NAME="CN=Xi Hu, OU=YourDept, O=YourCompany, L=Beijing, ST=Beijing, C=CN" # distinguished name##############################################################################
mkdir -p $CERT_OUTPUT_PATH
完整脚本如下:setup_ssl_for_servers.sh
下面,我们在Kafka broker机器上运行setup_ssl_for_servers.sh脚本,结果输出如下:
如上图可见,setup_ssl_for_servers.sh脚本执行成功了,现在去到对应的目录下去检查生成的文件列表:
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机器上都需要!由于本例中client只有一个,即Mac笔记本,故我们需要把kafka.keystore和kafka.truststore拷贝到Mac笔记本上的某个位置,假设是/Users/huxi/Downloads/下。那么现在我们就可以开始配置broker端的server.properties文件了,与SSL相关的部分如下:
listeners=PLAINTEXT://:9092,SSL://:9093 # 这里为Kafka broker配置了两个listeners,一个是明文传输;另一个使用SSL加密进行数据传输advertised.listeners=PLAINTEXT://公网IP:9092,SSL://公网IP:9093 # 因为是云上环境,如果clients通过公网(或外网)去连接broker,那么advertiesd.listeners就必须配置成所在机器的公网IPssl.keystore.location=/mnt/disk/huxitest/certificates/kafka.keystore # 提供SSL keystore的文件ssl.keystore.password=kafka1234567 # 提供keystore密码ssl.truststore.location=/mnt/disk/huxitest/certificates/kafka.truststore # 提供SSL truststore的文件ssl.truststore.password=kafka1234567 # 提供truststore密码ssl.key.password=kafka1234567 # keystore中的私钥密码ssl.client.auth=required # 设置clients也要开启认证配置好这些参数之后启动Kafka broker:
然后创建测试topic,如下所示:
$ bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic test --partitions 1 --replication-factor 1 Created topic "test".本例中我们使用console-producer和console-consumer脚本来从Mac笔记本上给位于阿里云机器上的broker收发消息 ,下面首先演示如何配置producer。首先,我们创建一个producer.config文件,里面的内容如下:
bootstrap.servers=kafka1:9093 # 指定9093端口,即使用SSL监听器端口security.protocol=SSLssl.truststore.location=/Users/huxi/Downloads/kafka.truststore # 指定truststore文件ssl.truststore.password=kafka1234567 ssl.keystore.password=kafka1234567ssl.keystore.location=/Users/huxi/Downloads/kafka.keystore # 指定keystore文件
保存之后,我们运行console-producer来生产消息:
$ bin/kafka-console-producer.sh --broker-list kafka1:9093 --topic test --producer.config producer.config >hello, world >hello, Kafka >a test message ......同样地,我们创建一个consumer.config文件,内容如下:
security.protocol=SSLgroup.id=test-groupssl.truststore.location=/Users/huxi/Downloads/kafka.truststore # 指定truststore文件 ssl.truststore.password=kafka1234567 ssl.keystore.password=kafka1234567ssl.keystore.location=/Users/huxi/Downloads/kafka.keystore # 指定keystore文件
保存之后,我们运行console-consumer来消费消息:
$ bin/kafka-console-consumer.sh --bootstrap-server kafka1:9093 --topic test --from-beginning --consumer.config consumer.config hello, world hello, Kafka a test message可见,Mac笔记本上的clients都可以正常工作了。
转载于:https://www.cnblogs.com/huxi2b/p/7427815.html
