У меня есть две виртуальные машины в облаке VMware, которые принадлежат одному и тому же VApp и поэтому находятся за одним пограничным шлюзом. У обоих есть свои собственные разные внутренние IP-адреса, но я перенаправляю к ним службы извне, используя комбинацию IP-адреса и порта пограничного шлюза. У меня есть приложение Grails, работающее на одной виртуальной машине, которая должна работать с экземпляром MongoDB. У меня этот экземпляр MongoDB работает как служба на другой виртуальной машине. Проблема в том, что при запуске приложения Grails оно не может связаться с экземпляром MongoDB на другой виртуальной машине, используя IP-адрес пограничного шлюза и порт 27017.
У меня есть соответствующее правило NAT для пересылки таких запросов к виртуальной машине с MongoDB на том же порту 27017. У меня также настроены соответствующие правила брандмауэра.
Некоторая полезная диагностическая информация, приложение Grails может успешно связываться с другим экземпляром MongoDB, который у меня запущен в облаке Amazon Web Services.
И если я запускаю Robomongo (клиент gui MongoDB) на моем локальном компьютере, он может успешно связаться с экземпляром MongoDB, запущенным на моей виртуальной машине VMware.
Я просто не могу установить связь между моим приложением Grails на одной виртуальной машине и MongoDB на другой. Я получаю сообщение об ошибке приложения Grails, что оно не может найти MongoDB.
РЕДАКТИРОВАТЬ: Я также обнаружил, что если с моей локальной Linux-машины я набираю в командной строке следующее:
telnet [vmwareEdgeGateway's IP] 27017
он устанавливает связь. Я надеюсь, что это будет подтверждением того факта, что мои настройки NAT и брандмауэра настроены правильно.
Я решил эту проблему, используя внутренний IP-адрес виртуальной машины, на которой запущен MongoDB. Вместо того, чтобы использовать IP-адрес пограничного шлюза для доступа к нему. Те, кто умнее меня, также посоветовали мне сделать это более безопасно. Просто подумал, что отвечу на вопрос, если кто-то еще обратится за помощью в будущем по этой теме.