首页 > 解决方案 > kubernets 内的 kakfa 代理可以被 k8s 集群外的客户端寻址

问题描述

基本上我正在谷歌云上构建一个系统。大多数服务都在 k8s 集群上工作,但有些代码不是。Lambda 和 Composer 的操作符、数据流作业就是示例。(Composer 也是 k8s 但集群不同)

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

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

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

标签: kubernetesapache-kafka

解决方案


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

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

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

您还可以在VM上设置 Kafka并通过 IP 公开它,然后服务将使用它来连接。

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

是的,您可以使用服务类型 Loadblaacer 或 Node Port 公开您的 Kafka 代理。参考文档

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

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


推荐阅读