首页 文章

访问k8 minikube集群外的kafka经纪人

提问于
浏览
1

我在我的mac上的minikube k8群集上的Pod上运行了一个landoop kafka图像 . 我有两种不同的服务来公开端口8081用于模式注册表,9092用于代理 . 我已经在我的NodePort服务中映射了端口8081 - > 30081和9092 - > 30092,以便我可以从群集外部访问它 . 但是当我尝试运行控制台消费者或我的消费者应用程序时,Kafka从不消费消息 . 要验证代理9092端口是否可在k8集群外部访问:

nc <exposed-ip> 30092, it says the port is open.

要验证Schema注册表8081是否可访问:

curl -X GET http://192.168.99.100:30081/subjects

它返回可用的模式 .

我有几个问题 . 1)我们不能以k8集群之外的上述方式从k8集群中访问Kafka吗?如果是这样,我在某种程度上做错了吗? 2)如果端口是开放的,这是不是意味着经纪人可用?

任何帮助表示赞赏 . 谢谢

2 回答

  • 3

    如果您无法直接从外部路由到容器,则从容器网络外部访问Kafka群集相当复杂 .

    首次连接到Kafka群集时,您将连接到单个代理,并且代理会返回Kafka群集内所有代理和分区的列表 . 然后,Kafka客户端使用该列表与特定主题所在的代理进行交互 .

    问题是代理列表默认包含Kafka代理的内部IP . 在你的情况下,容器网络ip将是哪种 . 您可以通过在每个代理的配置中设置 advertised.listeners 来覆盖此值 .

    要从Kubernetes外部创建Kafka集群,您需要为每个代理配置nodeport服务,并将每个代理的 advertised.listeners 设置设置为相应nodeport服务的外部ip . 但请注意,当您尝试在Kubernetes集群中使用Kafka时,这会增加额外的延迟和故障点 .

  • 0

    您需要为Kafka设置广告的侦听器 . 对于landoop docker图像,可以通过环境标志设置

    -e ADV_HOST=192.168.99.100

相关问题