首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用bitnami Kafka加密颁发的证书

如何使用bitnami Kafka加密颁发的证书
EN

Stack Overflow用户
提问于 2022-11-21 13:05:10
回答 1查看 93关注 0票数 2

我们使用的是sasl_tls机制和bitnami/kafka头盔图。我们使用加密和证书管理器来颁发证书。从“让我们加密生成的证书”中创建一个秘密,并将该秘密传递给舵图中的existingSecrets参数。现在,当我使用KafkaJS库连接到Kafka时,使用ssl: true会抛出一个错误:

代码语言:javascript
运行
复制
KafkaJSConnectionError: Connection error: unable to verify the first certificate

详细步骤/如何生成:

  • 启用了对kafka图表的外部访问,以便在端口9094给我们一个IP。
代码语言:javascript
运行
复制
externalAccess.enabled: true
externalAccess.autoDiscovery.enabled: true
externalAccess.service.type: LoadBalancer
externalAccess.service.ports.external: 9094
externalAccess.service.domain: ""
  • 将此IP绑定到域xyz.com
  • 将此域名绑定到让我们加密证书颁发者为此域颁发证书
  • 生成tls.crttls.key
  • 重命名这些文件并使用这些文件创建一个秘密
代码语言:javascript
运行
复制
kubectl create secret generic kafka-tls-0 --from-file=tls.crt=kafka-0.tls.crt --from-file=tls.key=kafka-0.tls.key
  • 修改图表值以配置tls部件
代码语言:javascript
运行
复制
tls.type: pem
tls.pemChainIncluded: true
tls.existingSecrets: ["kafka-tls-0"]
  • 应用图表的值(已启动代理)
  • 现在,在KafkaJS客户端设置中,尝试以ip:9094xyz.com:9094格式将值传递给brokers参数,也传递了ssl:true

我的问题:

  • 流量正确吗?还是我们走错方向了?
  • 问题背后的原因是什么?这是证书链出错了吗?(似乎是这样!)
  • 还有其他的图表可以用来实现我的目标吗?

后续问题:

  1. 如果我们能使它发挥作用,接下来的步骤是确保证书的自动更新?是自动管理的吗?或者我们应该维护一个脚本让我们的加密证书自动更新?
EN

回答 1

Stack Overflow用户

发布于 2022-11-21 18:07:17

可能有多种原因。我将试着列出要使这一方法奏效所需的内容:

  1. 您的node.js KafkaJS客户端应该有一个证书存储区,它能够验证对“让我们加密”证书进行签名的CA。node.js有一个内置的证书列表,您可以添加到它中.我没有检查,但我希望我们加密根CA在那里。

几年前,让我们对交换的根CA进行加密,如果您有一个旧版本的node.js,可能就是它。

  1. Kafka必须提供一个证书链(而不仅仅是您已签名的证书),其中包含node.js客户端可以验证的证书。根据您的客户端可以验证哪些CA,这可能意味着链需要延伸到根CA(而不是中间CA)。

您应该检查链中有哪些证书。您可以使用OpenSSL CLI:openssl x509 -in cert.pem -text -noout来完成这一任务。

关于Bitnami Kafka图表的具体建议:我们在图表中包含的脚本如何处理PEM键和证书链方面遇到了困难,在处理PEM时,它有时不会提取整个链,然后Kafka只会看到部分链。

我会尝试使用JKS格式(Java密钥库和信任库),看看这是否有帮助。您将使用您的密钥创建一个JKS密钥存储库,并创建一个具有链中所有证书的信任存储库。

关于证书的自动更新,您应该能够通过证书管理器来实现这一点,但是这可能会对Bitnami Kafka图表产生挑战,因为它不适合定期更新证书,并且不太适合来自CA的短期证书,比如“让我们加密”。通常,我们使用像NGINX这样的负载平衡器加密,通常有一个Kubernetes入口控制器处理注意到新证书和重新加载负载均衡器。

在您的示例中,由于您试图生成TLS证书供后端服务使用,以便与Kafka通信,您可能会更容易地使用用于服务间通信(让我们不加密)的内容,比如SPIRE和匹配的Kubernetes操作符。

尖顶,它是一个CNCF项目,负责验证工作负载标识并以密码方式表示它们--在您的示例中,它是卡夫卡服务器的TLS键区。它处理诸如更新证书之类的事情。

为了使the易于在Kubernetes中使用,将其与Otterize积分算子一起部署,后者使用SPIRE生成TLS凭据,将它们保存在Kubernetes的机密中,并负责刷新证书需要由SPIRE更新的机密。您可以在集群中部署它,而不是用您希望调用的保存证书的秘密来注释豆荚,并且可以使用其他注释来配置诸如格式是PEM还是JKS或TTL是什么之类的内容。这组配置应该可以使它更容易地与Bitnami一起工作。我们成功地将它与Bitnami图表一起使用,如果只需要TLS,则在配置all的部分停止甚至有一个关于如何使用Bitnami的教程。

因为您还提到使用SASL,所以您可能希望完全用证书替换用户名/密码,然后切换到mTLS。如果您还希望将Kafka添加到混合中,并且只允许在某些工作负载下访问某些主题/操作,则还可以部署Otterize意图算子。它允许您声明工作负载需要访问哪些主题,并与SPIRE和内置的Kafka ACL一起工作,这样工作负载只能访问它们声明的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74519426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档