#tls-client #tls #kafka #mtls #messaging #encryption #tls-server

rust-with-kafka-tls

Rust 与使用自签名 TLS 资源加密传输并使用 mTLS 进行客户端认证的 Strimzi Kafka 集群进行消息传递

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 异步

MIT 许可证

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