Контейнер Kubernetes node.js не может подключиться к MongoDB Atlas - PullRequest
0 голосов
/ 01 июня 2019

Так что я боролся с этим весь день. Я вообще не могу заставить мое приложение NodeJS работать в kubernetes для подключения к моей базе данных MongoDB Atlas.

В моем приложении я попытался запустить mongoose.connect('mongodb+srv://admin:<password>@<project>.gcp.mongodb.net/project_prod?retryWrites=true&w=majority', { useNewUrlParser: true })

но я просто получаю ошибку

UnhandledPromiseRejectionWarning: Error: querySrv ETIMEOUT _mongodb._tcp.<project>.gcp.mongodb.net
    at QueryReqWrap.onresolve [as oncomplete] (dns.js:196:19)
(node:32) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 17)

Я также пытался настроить службу ExternalName, но использование URL-адреса или ExternalName приводит к невозможности подключения к базе данных.

Я занесен в белый список своего IP-адреса в MongoDB Atlas, поэтому я знаю, что проблема не в этом.

Кажется, он также работает на моей локальной машине, но не в модуле kubernetes. Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

Я выяснил проблему, мой pod DNS не был настроен для разрешения внешних подключений, поэтому я установил dnsPolicy: Default в своем YML

0 голосов
/ 01 июня 2019

Я использую MongoDB Atlas из Kubernetes, но на AWS.Хотя для целей тестирования вы можете включить все IP-адреса и выполнить тестирование, вот подход для производственной настройки:

  • MongoDB Atlas поддерживает сетевой пиринг
  • в разделе «Доступ к сети»> «Новое соединение пиринга»
  • В случае AWS необходимо указать идентификатор VPC, CIDR и регион.Для GCP это должна быть стандартная процедура, используемая для пиринга VPC.
...