kubernetes - kubernets 内的 kakfa 代理可以被 k8s 集群外的客户端寻址
问题描述
基本上我正在谷歌云上构建一个系统。大多数服务都在 k8s 集群上工作,但有些代码不是。Lambda 和 Composer 的操作符、数据流作业就是示例。(Composer 也是 k8s 但集群不同)
我选择 kafka 作为事件通道来互连服务,我必须确定 kafka 代理的适当位置。K8s pod 或 VM。我更喜欢 k8s pod,但我担心代理和服务之间的通信,尤其是与 k8s 集群之外的服务之间的通信。
消费者使用“引导服务器”来处理代理,这是一些代理的静态唯一地址列表。我想如果在 k8s 中安装了代理,它们的地址不会是静态唯一的。代理可以从 k8s 之外的服务连接吗?如果可能,必须为引导服务器配置提供哪个字符串?
传统的虚拟机是毫无疑问的解决方案。但我想把越来越多的东西放到 k8s 中。
解决方案
您的问题有不同的解决方案
您可以在 K8s 集群上部署 Kafka,并使用服务网格来互连两个集群。因此代理和服务可以毫无顾虑地相互连接。
如果您在 GCP 上,您可以使用 MCS 服务或流量导向器和其他服务网格。
您还可以在VM上设置 Kafka并通过 IP 公开它,然后服务将使用它来连接。
代理可以从 k8s 之外的服务连接吗?
是的,您可以使用服务类型 Loadblaacer 或 Node Port 公开您的 Kafka 代理。参考文档
我想如果在 k8s 中安装了代理,它们的地址不会是静态唯一的。
您不需要将 Kafka 绑定到该接口的任何特定主机名,Kafka 将侦听所有接口,如果在 K8s 上运行,您可以使用K8s 服务公开它。
推荐阅读
- azure - 区域出现故障时单个 Azure VM 会发生什么
- node.js - node.js 的 lambda 函数将如何用于使用存储到 DynamoDB 的 for application/x-www form-urlencoded 数据的发布请求
- javascript - 如何使用reactjs显示从表中的api获取的数据
- c# - 替换 Word 文档中的单词会导致多次替换为 C#
- javascript - 为什么我的圆圈标记没有显示在地图上?
- javascript - 如何解决无法读取 express js 中未定义的属性“名称”?
- c# - 如何在 Xamarin.UWP 中调整大小和减小大小(使用压缩质量值)
- git - .DS_Store 文件在 .gitignore 中,但它一直在状态中弹出
- html - 透明 html 元素错误?
- asp.net-mvc - 将 Asp.Net Web API 作为应用程序托管在 IIS 上的 Asp.Net MVC 应用程序下