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

Ach*_*eus 3 apache-kafka kubernetes

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

nc <exposed-ip> 30092, it says the port is open.
Run Code Online (Sandbox Code Playgroud)

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

curl -X GET http://192.168.99.100:30081/subjects
Run Code Online (Sandbox Code Playgroud)

它返回可用的模式.

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

任何帮助表示赞赏.谢谢

Luk*_*ler 6

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

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

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

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