Skip to main content
Version: 1.12-grodno (current)

Инструкция по ручному развертыванию userdb-connection-string

Введение

Секрет userdb-connection-string содержит строку подключения к базе данных MongoDB для сервиса userdb. В штатном режиме секрет создается автоматически через Terraform, но в некоторых случаях (тестирование, аварийное восстановление) может потребоваться создать его вручную.

Структура секрета (из Terraform манифестов)

Секрет создается в модуле mongo-dbs (terraform/modules/mongo-dbs/main.tf):

apiVersion: v1
kind: Secret
metadata:
name: userdb-connection-string
namespace: prod
type: Opaque
data:
connectionString: <base64-encoded connection string>

Параметры подключения

ПараметрЗначениеИсточник
MongoDB Addressmodule.mongodb8_cluster.hostnameTerraform вывод
MongoDB Port27018Стандартный порт дляYC Managed MongoDB
UseruserdbTerraform конфигурация
Passwordmongodb_user_passwdYandex Lockbox
DatabaseuserdbTerraform конфигурация
authSourceuserdbСтандартный параметр

Структура строки подключения

mongodb://<user>:<password>@<address>:<port>/<database>?authSource=<database>

Пример:

mongodb://userdb:myPassword123@rc1a-mongodb.mdb.yandexcloud.net:27018/userdb?authSource=userdb

Пошаговая инструкция ручного создания

Шаг 1: Получите пароль пользователя из Yandex Lockbox

yc lockbox secret get --name <lockbox-name> --format text

Или используйте terraform state для получения пароля:

terraform state show data.yandex_lockbox_secret_version.referenced

Шаг 2: Получите адрес MongoDB кластера

terraform state show module.mongodb8_cluster.yandex_mdb_mongodb_cluster.mcluster

Или используйте DNS-имя кластера из output-ов Terraform:

terraform output mongodb_address

Шаг 3: Соберите строку подключения

mongodb://userdb:<password>@<mongodb-address>:27018/userdb?authSource=userdb

Важно: Убедитесь, что символ @ в пароле экранирован или пароль не содержит специальных символов.

Шаг 4: Закодируйте строку в base64

echo -n "mongodb://userdb:<password>@<address>:27018/userdb?authSource=userdb" | base64

Шаг 5: Создайте YAML манифест

Создайте файл userdb-secret.yaml:

apiVersion: v1
kind: Secret
metadata:
name: userdb-connection-string
namespace: prod
type: Opaque
data:
connectionString: <base64-encoded-string>

Шаг 6: Примените секрет в кластере

kubectl apply -f userdb-secret.yaml

Проверьте создание:

kubectl get secret userdb-connection-string -n prod
kubectl get secret userdb-connection-string -n prod -o yaml

Проверка секрета

После создания можно проверить доступ к MongoDB:

# Получить строку подключения из секрета
kubectl get secret userdb-connection-string -n prod -o jsonpath='{.data.connectionString}' | base64 -d

# Проверить подключение через mongosh
mongosh "$(kubectl get secret userdb-connection-string -n prod -o jsonpath='{.data.connectionString}' | base64 -d)"

Предупреждения

  • Не рекомендуется для production-среды - используйте Terraform развертывание
  • Бэкапы - не забудьте обновитьterraform state файлы при ручном создании секретов
  • Секреты - никогда не храните пароли в открытом виде в файловой системе
  • Namespace - убедитесь, что секрет создается в правильном namespace (prod для production)