我在AWS上从k8s群集外部访问kafka时遇到了同样的问题.我设法通过使用版本0.10.2支持多个接口的kafka侦听器功能来解决此问题.
这是我如何配置kafka容器.
ports: - containerPort: 9092 - containerPort: 9093 env: - name: KAFKA_ZOOKEEPER_CONNECT value: "zookeeper:2181" - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP value: "INTERNAL_PLAINTEXT:PLAINTEXT,EXTERNAL_PLAINTEXT:PLAINTEXT" - name: KAFKA_ADVERTISED_LISTENERS value: "INTERNAL_PLAINTEXT://kafka-internal-service:9092,EXTERNAL_PLAINTEXT://123.us-east-2.elb.amazonaws.com:9093" - name: KAFKA_LISTENERS value: "INTERNAL_PLAINTEXT://0.0.0.0:9092,EXTERNAL_PLAINTEXT://0.0.0.0:9093" - name: KAFKA_INTER_BROKER_LISTENER_NAME value: "INTERNAL_PLAINTEXT"
除此之外,我配置了两个服务.一个用于内部(无头)和一个用于外部(LoadBalancer)通信.
希望这会节省人们的时间.
我在AWS上从k8s群集外部访问kafka时遇到了同样的问题.我设法通过使用版本0.10.2支持多个接口的kafka侦听器功能来解决此问题.
这是我如何配置kafka容器.
ports: - containerPort: 9092 - containerPort: 9093 env: - name: KAFKA_ZOOKEEPER_CONNECT value: "zookeeper:2181" - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP value: "INTERNAL_PLAINTEXT:PLAINTEXT,EXTERNAL_PLAINTEXT:PLAINTEXT" - name: KAFKA_ADVERTISED_LISTENERS value: "INTERNAL_PLAINTEXT://kafka-internal-service:9092,EXTERNAL_PLAINTEXT://123.us-east-2.elb.amazonaws.com:9093" - name: KAFKA_LISTENERS value: "INTERNAL_PLAINTEXT://0.0.0.0:9092,EXTERNAL_PLAINTEXT://0.0.0.0:9093" - name: KAFKA_INTER_BROKER_LISTENER_NAME value: "INTERNAL_PLAINTEXT"
除此之外,我配置了两个服务.一个用于内部(无头)和一个用于外部(LoadBalancer)通信.
希望这会节省人们的时间.
通过进行以下更改,我能够解决我的问题 -
在YML中使用NodeSelector使kafka pod在kube集群的特定节点上运行.
设置KAFKA_ADVERTISED_HOST_NAME
为Kube hostName,此Kafka POD已配置为运行(如步骤1中所配置)
使用NodePort公开Kafka服务并设置与暴露的NodePort相同的POD端口,如下所示 -
spec: ports: - name: broker-2 port: **30031** targetPort: 9092 nodePort: **30031** protocol: TCP selector: app: kafka-2 broker_id: "2" type: NodePort
现在,您可以使用host:exposedPort从kube集群外部访问Kafka代理