通过SSH隧道从Kafka群集中消耗

Sou*_*abh 10 ssh-tunnel apache-kafka

我们正尝试使用Java客户端从Kafka集群中进行使用.群集是Jump主机的后面,因此唯一的访问方式是通过SSH隧道.但我们无法读取,因为一旦消费者获取元数据,它就会使用原始主机连接到代理.这种行为可以被覆盖吗?我们可以要求Kafka客户端不使用元数据吗?

niv*_*vox 9

不是我所知道的.

我需要做类似的事情时使用的技巧是:

  1. 为每个Kafka代理设置虚拟接口
  2. 打开到每个代理的隧道,以便代理n绑定到虚拟接口n
  3. 配置您的/etc/hosts文件,以便将代理n的通告主机名解析为虚拟接口n的ip.

ES.

卡夫卡经纪人:

  • broker1(宣传为broker1.mykafkacluster)
  • broker2(广告为broker2.mykafkacluster)

虚拟接口:

  • veth1(192.168.1.1)
  • veth2(192.168.1.2)

隧道:

  • BROKER1: ssh -L 192.168.1.1:9092:broker1.mykafkacluster:9092 jumphost
  • broker2: ssh -L 192.168.1.2:9092:broker1.mykafkacluster:9092 jumphost

/etc/hosts:

  • 192.168.1.1 broker1.mykafkacluster
  • 192.168.1.2 broker2.mykafkacluster

如果您像这样配置系统,则应该能够访问Kafka群集中的所有代理.

注意:如果您将Kafka代理配置为通告IP地址而不是主机名,则该过程仍然可以工作,但您需要使用与代理通告的IP地址相同的虚拟接口进行配置.


fwe*_*ndt 9

如果代理广告主机名,您实际上不必添加虚拟接口来通过 SSH 隧道访问代理。在/etc/hosts客户端中添加主机条目并将隧道绑定到添加的名称就足够了。

假设broker.kafkacluster是您的经纪人的 ads.hostname:

/etc/hosts:
127.0.2.1 broker.kafkacluster

隧道:
ssh -L broker.kafkacluster:9092:broker.kafkacluster:9092 <brokerhostip/name>

  • 对于 Mac,您需要为每个环回地址添加别名,如[此处](https://superuser.com/questions/458875/how-do-you-get-loopback-addresses-other-than-127-0- 0-1-在 os-x 上工作) (2认同)

inj*_*cto 6

像这样尝试sshuttle

sshuttle -r user@host broker-1-ip:port broker-2-ip:port broker-3-ip:port
Run Code Online (Sandbox Code Playgroud)

当然,代理列表取决于广告监听器代理设置。


lin*_*lof 5

对我来说绝对最好的解决方案是使用kafkatunnelhttps://github.com/simple-machines/kafka-tunnel)。像魅力一样工作。