gpt4 book ai didi

docker - Kubernetes 集群中的 Kafka - 如何从 Kubernetes 集群外部发布/使用消息

转载 作者:IT老高 更新时间:2023-10-28 12:44:48 26 4
gpt4 key购买 nike

  1. 我已在 Kubernetes 集群中部署并运行 Kafka。我正在使用来自 docker hub - https://hub.docker.com/r/cloudtrackinc/kubernetes-kafka/ 的这张图片
  2. 我的 kubernetes 集群中有 3 个 kube 节点。我有 3 个 Kafka 和 3 个 zookeeper 应用程序正在运行,并且我有 zoo1、zoo2、zoo3 和 kafka-1、kafka-2 和 kafka-3 与它们对应运行。我能够从 kubernetes 集群内部发布/使用,但我无法从 kubernetes 集群外部发布/使用,即从不属于 kubernetes 集群的外部机器。
  3. 我可以从外部机器访问 kube 节点 - 基本上我可以使用名称/IP 对它们进行 ping 操作。
  4. 我没有使用任何外部负载均衡器,但我有一个可以解析我的外部机器和 kube-nodes 的 DNS。
  5. 在这种情况下,使用 NodePort 或 ExternalIP 暴露 Kafka 服务不起作用。
  6. 在 Kafka RC YML 中设置 KAFKA_ADVERTISED_HOST_NAMEKAFKA_ADVERTISED_LISTENERS,最终在 中设置 ADVERTISED_HOST_NAME/ADVERTISED_LISTENERS 属性server.properties 也无助于从 kubernetes 集群外部访问 kafka。

请建议我如何从 Kubernetes 集群外部发布/使用。非常感谢!

最佳答案

我在从 AWS 上的 k8s 集群外部访问 kafka 时遇到了同样的问题。我设法通过使用从版本 0.10.2 开始支持多个接口(interface)的 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"

除此之外,我还配置了两个服务。一种用于内部( headless )通信,另一种用于外部(LoadBalancer)通信。

希望这会节省人们的时间。

关于docker - Kubernetes 集群中的 Kafka - 如何从 Kubernetes 集群外部发布/使用消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41868161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com