Как настроить конфлюентный докер для внешнего доступа на основе быстрого запуска объединенного докера

следующее основано на этом кратком руководстве здесь: http://docs.confluent.io/current/cp-docker-images/docs/quickstart.html

Там они демонстрируют различные компоненты kafka / confluent в своих собственных контейнерах докеров, каждый из которых начинается с

--net = хост

флаг и доступ через

localhost: порт

Независимо от того, что я делаю, я не могу получить к нему доступ извне самого сервера ubuntu, ни через ip, ни через домен, который, как они заявляют, должен работать, например. для центра управления. Но на том же хосте, моем ящике ubuntu, все работает нормально.

Есть идеи, в чем может быть проблема? Застрял на этом уже несколько часов


person AdrianLoer    schedule 05.09.2017    source источник
comment
Возможно, вам потребуется проверить правила iptables для вашей среды. Некоторые подсказки вы можете найти здесь: docs.docker.com/engine/ руководство пользователя / сеть /   -  person Konstantine Karantasis    schedule 06.09.2017
comment
Также вам может быть полезен этот блог, посвященный host сети в Docker: dasblinkenlichten.com/docker-networking-101-host-mode   -  person Konstantine Karantasis    schedule 06.09.2017


Ответы (2)


Проблема в том, что вы не можете получить доступ к порту (т.е. невозможно использовать telnet) или что вы не можете заставить сервер работать (т.е. сервер не отвечает на запросы)?

Есть -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:29092 \, это адрес, по которому брокер kafka обменивается данными с клиентом для связи (и, кроме localhost, это явно не сработает ...) после первоначального подключения. Вы можете заменить localhost на ip вашего сервера, он должен работать правильно.

Чтобы быть более конкретным, есть listeners config (по умолчанию 0.0.0.0:9092) и advertised.listeners (по умолчанию PLAINTEXT: // locahost: 9092). Клиент инициализирует соединение на (bootstrap-server или broker-list) через привязку listener. Как только это начальное соединение будет выполнено, брокер вернет все рекламируемые слушатели от всех брокеров в кластере, и это то, что будет использоваться для последующих обменов)

Из репозитория github confluent присваивает слушателю значение рекламируемого слушателя, изменяя хост на 0.0.0.0 (так что он будет доступен с удаленного доступа). Вы не можете установить 0.0.0.0 для объявляемых слушателей, хотя он должен быть уникальным достижимый интерфейс

person Treziac    schedule 06.09.2017

Отвечая себе сейчас, глупо простая вещь с брандмауэром / докером:

осторожно при использовании UFW (брандмауэра) и докера

см. http://blog.viktorpetersson.com/post/101707677489/the-dangers-of-ufw-docker

Я использовал простой пример nodeJS hello world на порту 3000 и смог подключиться к нему извне, пока я использовал сеть по умолчанию / мост и опубликовал порт (-p 3000: 3000).

Используя хост-сеть, я вообще не смог подключиться.

В обоих случаях брандмауэр (UFW в ubuntu) явно не разрешал порт 3000, поэтому Docker, должно быть, творит здесь некую скрытую магию, переписывая iptables без уведомления UFW, чтобы разрешить прохождение мостовых и опубликованных портов.

=> решено явным открытием портов kafka в UFW

person AdrianLoer    schedule 06.09.2017