Как связаться с Cloudera Kafka Broker по частной сети извне? - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть кластер внутри 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-таблиц?Кому-нибудь удалось сделать это на кластере клоудера?

Заранее спасибо.

1 Ответ

0 голосов
/ 12 ноября 2018

Вопрос не относится к Cloudera или Python. И я не думаю, что у Cloudera Manager есть какие-то настройки, которые настроят это для вас.

advertised.listeners должен быть публично разрешаемым адресом, который может использоваться клиентами для индивидуального доступа к каждому брокеру (например, два брокера не могут иметь одинаковую настройку прослушивателя и использоваться из порта перенаправления с открытого адреса на внутренний адрес). )

Ваша настройка очень похожа на Kafka, работающую в Docker или облачных провайдерах, таких как AWS, в том, что вы взаимодействуете по двум сетям, поэтому для получения дополнительной информации обратитесь к этому блогу

Кроме того, если вы не настроили некоторые другие параметры брандмауэра для предотвращения произвольного доступа, не подвергайте посредников протоколу открытого текста

...