7 个稳定版本
1.0.6 | 2022 年 9 月 25 日 |
---|---|
1.0.5 | 2022 年 9 月 22 日 |
1.0.3 | 2022 年 9 月 21 日 |
1.0.2 | 2022 年 9 月 16 日 |
#879 in 异步
22KB
150 行
使用 Strimzi Kafka 和客户端 mTLS 加密传输的 Rust Kafka 发布者和订阅者演示
一个简单的生产者/消费者消息示例,它与强制客户端 mTLS 认证的 Kafka 集群一起工作。
可选 - 自定义 TLS 资源
默认情况下,./kubernetes/deploy.sh
脚本将使用存储库中包含的 tls 资源:./kubernetes/tls。在生产中使用这些资源之前,请将其更改为自己的以防止安全问题。
如果您想使用自己的 tls 资源,可以设置以下环境变量
CA_FILE
- 证书颁发机构 (CA) 文件路径CA_KEY_FILE
- CA 密钥文件路径TLS_CHAIN_FILE
- tls 服务器链文件路径(按顺序:证书然后 CA)TLS_KEY_FILE
- tls 服务器密钥文件路径
./kubernetes/deploy.sh
验证客户端 mTLS
客户端必须提供 tls 密钥、证书和 CAfile 以建立有效的双向 tls 连接。
对于本地测试,您需要将这些条目添加到您的 /etc/hosts
或设置真实的主机名服务器进行 dns
集群-0-代理-0.redten.io
集群-0-代理-1.redten.io
集群-0-代理-2.redten.io
例如,在本地回环设备上
# /etc/hosts
127.0.0.1 cluster-0-broker-0.redten.io cluster-0-broker-1.redten.io cluster-0-broker-2.redten.io
对于 minikube 用户,您可以使用 minikube ip -CLUSTERNAME
来获取 IP 地址
# /etc/hosts
192.168.49.2 cluster-0-broker-0.redten.io cluster-0-broker-1.redten.io cluster-0-broker-2.redten.io
echo "ssl test" | openssl s_client -connect \
cluster-0-broker-0.redten.io:32151 \
-key ./kubernetes/tls/client-key.pem \
-cert ./kubernetes/tls/client.pem \
-CAfile ./kubernetes/tls/ca.pem \
-verify_return_error \
&& echo "strimzi kafka cluster is working with self-signed tls assets!"
为 Rust 消息创建 Kafka 主题
cat <<EOL | kubectl apply -n dev -f -
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: testing
labels:
strimzi.io/cluster: "dev"
spec:
partitions: 3
replicas: 3
EOL
Rust 消息传递
设置 TLS 路径
您可以将 TLS 资源复制到 ./tls
目录或导出环境变量
KAFKA_TLS_CLIENT_CA
- 证书颁发机构文件路径KAFKA_TLS_CLIENT_KEY
- 服务器密钥文件路径KAFKA_TLS_CLIENT_CERT
- 服务器证书文件路径
设置代理地址
导出此环境变量到正确的代理 fqdns 和端口
KAFKA_BROKERS
- 以逗号分隔的kafka代理列表(格式:cluster-0-broker-0.redten.io:32151,cluster-0-broker-1.redten.io:32152,cluster-0-broker-2.redten.io:32153
)
启动消费者
# export KAFKA_BROKERS=cluster-0-broker-0.redten.io:32151,cluster-0-broker-1.redten.io:32152,cluster-0-broker-2.redten.io:32153
cargo build --example run-consumer
export RUST_BACKTRACE=1
export RUST_LOG=info
./target/debug/examples/run-consumer -b $KAFKA_BROKERS -g rust-consumer-testing -t testing
启动生产者
# export KAFKA_BROKERS=cluster-0-broker-0.redten.io:32151,cluster-0-broker-1.redten.io:32152,cluster-0-broker-2.redten.io:32153
cargo build --example run-producer
export RUST_BACKTRACE=1
export RUST_LOG=info
./target/debug/examples/run-producer -b $KAFKA_BROKERS -t testing
来源
- Rust消费者和生产者示例来自rdkafka,示例:[https://github.com/fede1024/rust-rdkafka/tree/master/examples](https://github.com/fede1024/rust-rdkafka/tree/master/examples)
- 使用Strimzi与自己的CA和TLS资产:https://github.com/scholzj/strimzi-custom-ca-test
- 此crate是为了从以下博客文章中分析Strimzi kafka集群性能而创建的
依赖项
~25–44MB
~620K SLoC