Невозможно подключиться к MongoDB Atlas из экземпляра GCP Cloud Run

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

const response = await axios.get('https://ipinfo.io/ip');
const externalIP = response.data.trim();
console.info(`Outbound External IP Address: ${externalIP}`);

Я также подтвердил, что зарегистрированный IP-адрес точно такой же, как IP-адрес, внесенный в белый список для базы данных. Однако я все еще не могу подключиться. Как и в случае с Mongoose, ошибок подключения не так уж и много, поэтому я просто получаю сообщение об ошибке сбоя установления связи SSL. Есть идеи?

РЕДАКТИРОВАТЬ 1:

Вот как я подключаюсь к кластеру:

const mongoose = require('mongoose');

const uri = process.env.MONGODB_URI;

let connection;
const connect = async () => {
  try {
    connection = await mongoose.connect(uri, {
      bufferCommands: false, // Disable mongoose buffering
    });
    return connection;
  } catch (e) {
    console.error("Could not connect to MongoDB...");
    throw e;
  }
};

function getConnection() {
  return connection;
}

module.exports = { connect, getConnection };

И вот ошибка:

MongooseServerSelectionError: Could not connect to any servers in your MongoDB Atlas cluster. One common reason is that you're trying to access the database from an IP that isn't whitelisted. Make sure your current IP address is on your Atlas cluster's IP whitelist

error: MongoNetworkError: 08123BD0DA3E0000:error:0A000438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error:../deps/openssl/openssl/ssl/record/rec_layer_s3.c:1590:SSL alert number 80

Отредактируйте свой вопрос и покажите, как вы подключаетесь, конфигурацию MongoDB и точную ошибку. Как правило, ошибка подтверждения SSL означает, что вы подключились к чему-то, но не обязательно к правильному хосту. Кроме того, IP-адрес вашего экземпляра не вызывает эту ошибку.

John Hanley 15.04.2024 05:45

Можете ли вы рассказать, как вы строите свой контейнер? Вы установили на него двоичные файлы SSL?

guillaume blaquiere 15.04.2024 13:08

@JohnHanley Конфигурация MongoDB довольно проста. Я могу нормально подключиться, когда разрешаю все IP-адреса, но не тогда, когда разрешаю только статический исходящий IP-адрес. Я предполагаю, что в конфигурации сети мне чего-то не хватает, что и вызывает это. Возможно, мне придется пойти по другому маршруту вместо статического исходящего IP-адреса.

LUKER 16.04.2024 01:12

@guillaumeblaquiere В сборке контейнера нет ничего особенного, просто простой файл Docker. Как отмечалось в моем предыдущем комментарии, это определенно связано с сетью, поскольку изображение работает нормально, и соединение работает нормально, если разрешить все IP-адреса.

LUKER 16.04.2024 01:13

Рассматривали ли вы возможность использования сертификатов для аутентификации пользователей вместо внесения в белый список IP-адресов? mongodb.com/docs/manual/tutorial/…

John Hanley 16.04.2024 03:05

Вы также можете использовать PSC (или пиринг VPC) и внутреннее подключение без внесения в белый список.

guillaume blaquiere 16.04.2024 07:11

Похоже, что у вас может быть ошибка протокола TLS или сбой выделения памяти. На чем работает код? Что такое MONGODB_URI? Вы можете немного изменить URI, чтобы замаскировать его, но я хочу убедиться, что строка подключения верна. Если вы внесете в белый список все IP-адреса, соединение будет работать? В вашей системе мало свободной памяти? Другая возможность заключается в том, что ваше приложение подключается к версии протокола TLS, которую MongoDB не поддерживает. Например, подключение с помощью TLS 1.0, который по умолчанию отключен в MongoDB.

John Hanley 16.04.2024 21:59

@JohnHanley Спасибо за предложение. Обычно в дополнение к белому списку IP-адресов для аутентификации вместо учетных данных используются сертификаты, так что это не идеальное решение. MONGODB_URI правильный. Разрешив все IP-адреса, я могу подключиться к кластеру. Вместо этого я попробую использовать пиринг VPC.

LUKER 16.04.2024 22:27

Пиринг VPC не поможет вам, если экземпляр является общедоступным.

John Hanley 16.04.2024 23:09
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
9
156
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Привет, это просто еще одно предложение.

Вы можете попытаться установить соединение, используя частный IP-доступ из Cloud Run к кластеру MongoDB Atlas. Эта конфигурация гарантирует, что MongoDB подключается исключительно через частные IP-адреса. Эта конфигурация будет использовать пиринг VPC.

Сначала вам необходимо создать соединитель бессерверного доступа VPC. При его создании убедитесь, что ваш регион соответствует бессерверной службе. Используйте собственный диапазон IP-адресов и настройте частный диапазон IP-адресов с маской /28.

Обратите внимание, что эта конфигурация в кластере MongoDB Atlas использует выделенный кластер для пиринга сетей VPC. В списке доступа к атласу MongoDB в разделе безопасности нажмите «Доступ к сети», затем добавьте IP-адрес. В записи списка доступа вы можете ввести частный IP-адрес /28, который вы создали в соединителе доступа к VPC.

Далее необходимо настроить пиринг MongoDB Atlas VPC. Вы можете использовать эту документацию в качестве руководства.

Для пиринга следующим шагом является создание пиринга VPC на GCP. Введите идентификатор проекта и имя сети VPC, которые были предоставлены для настройки пиринга MongoDB Atlas VPC.

Ниже приведен скриншот следующего шага, который необходимо сделать. Подробную инструкцию по этому предложению вы можете найти по этой ссылке

image

Кому интересно, это работало намного лучше, чем статический исходящий IP-адрес.

LUKER 16.04.2024 22:58

Другие вопросы по теме