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