Если вы используете Kubernetes, вы можете начать с проверки того, соответствует ли встроенный реестр служб вашим потребностям. Как правило, нет прямого пути для доступа к модулю через IP-адрес узла его узла, поэтому описанная вами настройка не будет работать должным образом. (Я мог бы подумать, что Консул - это хранилище ключей / значений, но я бы не стал обращаться к нему как к реестру услуг на земле Кубернетес.)
В простой среде Docker с несколькими хостами это одна из немногих ситуаций, в которых я нашел подходящую сеть хостов. Запустите Консул с помощью --net host
или эквивалентной опции в Docker Compose или другом инструменте оркестровки. Тогда Consul будет полагать, что «его» IP-адрес принадлежит хосту, и если у вас есть автоматические TCP-зонды для известных портов, вы можете найти все службы, работающие на хосте, и обнаружить , например, службу MySQL на порту. 3306, независимо от того, работает он в контейнере или на хосте.
При этой настройке servicename.service.consul
будет преобразован в некоторый IP-адрес физического хоста. Если у вас есть контейнер Docker, указывающий на его текущий хост для службы DNS, то он перенаправит службу на некоторый хост, возможно, на тот же, но в прошлом это работало надежно для меня.
Обратите внимание, что соответствующие имена хостов будут отличаться в разных средах: servicename.service.consul
для настройки на основе Consul, servicename.namespacename.svc.cluster.local
в Kubernetes, возможно localhost
в среде разработчика и рабочего стола. Вы должны убедиться, что это настраивается, проще всего через переменную окружения.