У меня есть кластер внутри VPN, который содержит сервер с частным IP.Я пытаюсь настроить связь Kafka между внешним сервером и моим частным сервером.Мой подход состоит в том, чтобы установить таблицу IP, где публичный IP указывает мой частный IP.Кроме того, я открыл порт 9092 и 9093, чтобы сделать его доступным снаружи.Теперь я могу успешно подключиться к своему серверу по общедоступному IP-адресу с внешнего сервера.
telnet <public_ip> 9092
Connected to <public_ip>
Мой брокер kafka находится в кластере cloudera, и я создал его с помощью Cloudera Manager.Конфигурация следующая:
kafka.properties:
listeners=PLAINTEXT://<private_ip>:9092,SSL://<private_ip>:9093
advertised.listeners=PLAINTEXT://<private_ip>:9092,SSL://<private_ip>:9093
advertised.host.name:
<public_ip>
При использовании этой конфигурации брокера коммуникация прекрасно работает внутри кластера, используя public_ip или private_ip хоста брокера kafka.
Теперь я вижу, чтоУ меня есть работающий брокер, который можно использовать с public_ip, и внешний сервер, который может связаться с public_ip и его необходимыми портами.Но когда я пытаюсь подключиться к брокеру с внешнего сервера, у меня появляется следующая ошибка:
NO BROKERS AVAILABLE
Больше информации об ошибке нет.На моем внешнем сервере у меня есть пакет python kafka, где я настраиваю производителя следующим образом:
"bootstrap_servers": ["<publi_ip>:9092"]
в существующей ТЕМЕ моего брокера kafka.
Технические характеристики:
privatehost
cloudera: CDH 5.12.0
kafka: kafka 2.2.0-1.2.2.0
zookeeper: Zookeeper 3.4.5
внешний хост
kafka Python пакет: kafka-python == 1.4.2
Проблема очень похожа на этот пост .Но в этом случае он использует перенаправленный порт с публичным ip.Есть ли возможность сделать это с помощью IP-таблиц?Кому-нибудь удалось сделать это на кластере клоудера?
Заранее спасибо.