如何在kubernetes上构建kafka集群后公开kafka以进行外部访问?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在kubernetes上构建kafka集群后公开kafka以进行外部访问?相关的知识,希望对你有一定的参考价值。
我跟随这个guilde https://github.com/kubernetes/contrib/tree/master/statefulsets/kafka在kubernetes上建立了kafka集群,它适用于从kubernetes发送/生成消息。当我尝试使用NodePort公开kafka集群时,如下所示,kafka客户端尝试使用地址10.xx.xx.xx消费/生成消息:30092
将失败:
apiVersion: v1
kind: Service
metadata:
name: kafka-nodeport
labels:
app: kafka
spec:
type: NodePort
ports:
- port: 9092
nodePort: 30092
name: server
selector:
app: kafka
为什么会发生这种情况以及如何揭露kafka服务?
Kafka Statefulsets
需要无头服务才能访问经纪人。您可以将无头服务更改为Type = NodePort并设置externalTrafficPolicy=Local
。这会绕过服务的内部负载平衡,并且只有当Kafka pod位于该节点上时,指向该节点端口上的特定节点的流量才会起作用。
apiVersion: v1
kind: Service
metadata:
name: kafka-nodeport
labels:
app: kafka
spec:
externaTrafficPolicy: Local
type: NodePort
ports:
- port: 9092
nodePort: 30092
name: server
selector:
app: kafka
例如,我们有两个节点nodeA和nodeB,nodeB正在运行一个kafka pod。 nodeA:30092将无法连接,但nodeB:30092将连接到nodeB上运行的kafka pod。
希望这可以帮助。
你必须做两件事:
1)创建NodePort类型的服务资源(就像你做的那样)或Ingress资源。
2)在Kafka中设置以下两个属性:ADVERTISED_HOST
和ADVERTISED_PORT
。
Kafka将使用节点的ip地址向Zookeeper注册,在容器网络内部,它是它使用的内部ip地址,因此我们必须设置thoses属性以告诉Kafka注册它们。
希望有所帮助!
以上是关于如何在kubernetes上构建kafka集群后公开kafka以进行外部访问?的主要内容,如果未能解决你的问题,请参考以下文章
如何为在 kubernetes 集群上运行的 Kafka Connect 配置 MongoDB 官方源连接器
这是在 Kubernetes 上运行 Kafka 的好方法吗?