web-dev-qa-db-fra.com

Consommer à partir d'un cluster Kafka via le tunnel SSH

Nous essayons de consommer à partir d'un cluster Kafka en utilisant le client Java. Le cluster est derrière un Jump Host et par conséquent, le seul moyen d'y accéder est via un Tunnel SSH. Mais nous ne pouvons pas lire car une fois que le consommateur récupère les métadonnées, il utilise les hôtes d'origine pour se connecter aux courtiers. Ce comportement peut-il être ignoré? Peut-on demander à Kafka Client de ne pas utiliser les métadonnées ?

15
Sourabh

Pas autant que je sache.

L'astuce que j'ai utilisée lorsque je devais faire quelque chose de similaire était:

  1. configurer une interface virtuelle pour chaque courtier Kafka
  2. ouvrir un tunnel à chaque courtier pour que le courtier n soit lié à l'interface virtuelle n
  3. configurez votre /etc/hosts fichier afin que le nom d'hôte annoncé du courtier n soit résolu en ip de l'interface virtuelle n.

Es.

courtiers Kafka:

  • broker1 (annoncé comme broker1.mykafkacluster)
  • broker2 (annoncé comme broker2.mykafkacluster)

Interfaces virtuelles:

  • veth1 (192.168.1.1)
  • veth2 (192.168.1.2)

Tunnels:

  • 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

Si vous configurez votre système comme ceci, vous devriez pouvoir atteindre tous les courtiers de votre cluster Kafka.

Remarque: si vous avez configuré vos courtiers Kafka pour publier une adresse IP au lieu d'un nom d'hôte, la procédure peut toujours fonctionner mais vous devez configurer les interfaces virtuelles avec la même IP adresse que le courtier annonce.

9
nivox

Vous n'avez pas réellement besoin d'ajouter des interfaces virtuelles pour accéder aux courtiers via le tunnel SSH s'ils annoncent un nom d'hôte. Il suffit d'ajouter une entrée d'hôtes dans /etc/hosts de votre client et liez le tunnel au nom ajouté.

En supposant broker.kafkacluster est le nom d'hôte annoncé de votre courtier:

/etc/hosts:
127.0.2.1 broker.kafkacluster

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

3
fwendlandt

La meilleure solution pour moi était d'utiliser kafkatunnel ( https://github.com/simple-machines/kafka-tunnel ). A fonctionné comme un charme.

1
lindelof

Essayez sshuttle comme ceci:

sshuttle -r user@Host broker-1-ip:port broker-2-ip:port broker-3-ip:port

Bien sûr, la liste des courtiers dépend du paramètre de courtier des auditeurs annoncé.

0
injecto