【问题标题】:Kakfa brokers inside kubernets can be addresed by clients outside k8s clusterkubernetes 内的 Kafka 代理可以由 k8s 集群外的客户端处理
【发布时间】:2021-12-25 14:58:12
【问题描述】:

基本上我正在谷歌云上构建一个系统。大多数服务都在 k8s 集群上工作,但有些代码不是。 Lambda 和 composer 的 operator,dataflow job 就是例子。 (Composer也是k8s,只是集群不同)

我选择 kafka 作为事件通道来互连服务,我必须确定 kafka 代理的适当位置。 K8s pod 或 VM。我更喜欢 k8s pod,但我担心代理和服务之间的通信,尤其是与 k8s 集群之外的服务之间的通信。

消费者使用“引导服务器”向代理发送地址,这是一些代理的静态唯一地址列表。我想如果在 k8s 中安装了 broker,它们的地址不会是静态唯一的。代理可以从 k8s 之外的服务连接吗?如果可能,必须为引导服务器配置提供哪个字符串?

传统的虚拟机是毫无疑问的解决方案。但是我想把越来越多的东西放到 k8s 中。

【问题讨论】:

  • 查看 Strimzi 文档的外部访问部分

标签: kubernetes apache-kafka


【解决方案1】:

您的问题有不同的解决方案

您可以在 K8s 集群上部署 Kafka,并使用服务网格将两个集群互连。因此代理和服务可以毫无顾虑地相互连接。

如果您在 GCP 上,则可以使用 MCS 服务或流量导向器和其他服务网格。

您还可以在 VM 上设置 Kafka 并通过 IP 公开它,并进一步供服务用于连接。

可以从 k8s 之外的服务连接代理吗?

是的,您可以使用服务类型 Loadblaacer 或节点端口公开您的 Kafka 代理。 Reference doc

我想如果在 k8s 中安装了 broker,它们的地址会 不是从外部静态唯一的。

您不需要将 Kafka 绑定到接口的任何特定主机名,Kafka 会监听所有接口,如果在 K8s 上运行,您可以使用 K8s 服务 公开它。

【讨论】:

  • NodePort 是一个简单的好主意。我猜可能会另外配置代理和节点的“固定”。我说的对吗?
  • 如果您计划使用 HA Kafka,节点端口不是一个好主意,因为 pod 可以随时从该节点中的节点更改,以便更好地使用服务名称集群 ip
  • 同意。最后我得出结论,尽管运营成本很高,但虚拟机最适合 kafka。我想负载均衡器方法不适用于 kafka 的分布式方式。
猜你喜欢
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
  • 2020-05-08
  • 2022-08-13
  • 2019-12-30
相关资源
最近更新 更多