Инструкция по ручному развертыванию directorydb-connection-string
Введение
Секрет directorydb-connection-string содержит строку подключения к базе данных MongoDB для сервиса directorydb. В штатном режиме секрет создается автоматически через Terraform, но в некоторых случаях (тестирование, аварийное восстановление) может потребоваться создать его вручную.
Структура секрета (из Terraform манифестов)
Секрет создается в модуле mongo-dbs (terraform/modules/mongo-dbs/main.tf):
apiVersion: v1
kind: Secret
metadata:
name: directorydb-connection-string
namespace: prod
type: Opaque
data:
connectionString: <base64-encoded connection string>
Параметры подключения
| Параметр | Значение | Источник |
|---|---|---|
| MongoDB Address | module.mongodb8_cluster.hostname | Terraform вывод |
| MongoDB Port | 27018 | Стандартный порт дляYC Managed MongoDB |
| User | directorydb | Terraform конфигурация |
| Password | mongodb_user_passwd | Yandex Lockbox |
| Database | directorydb | Terraform конфигурация |
| authSource | directorydb | Стандартный параметр |
| Namespace | var.medikt_namespace | Terraform переменная (по умолчанию default) |
Структура строки подключения
mongodb://<user>:<password>@<address>:<port>/<database>?authSource=<database>
Пример:
mongodb://directorydb:myPassword123@rc1a-mongodb.mdb.yandexcloud.net:27018/directorydb?authSource=directorydb
Пошаговая инструкция ручного создания
Шаг 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://directorydb:<password>@<mongodb-address>:27018/directorydb?authSource=directorydb
Важно: Убедитесь, что символ @ в пароле экранирован или пароль не содержит специальных символов.
Шаг 4: Закодируйте строку в base64
echo -n "mongodb://directorydb:<password>@<address>:27018/directorydb?authSource=directorydb" | base64
Шаг 5: Создайте YAML манифест
Создайте файл directorydb-secret.yaml:
apiVersion: v1
kind: Secret
metadata:
name: directorydb-connection-string
namespace: prod
type: Opaque
data:
connectionString: <base64-encoded-string>
Шаг 6: Примените секрет в кластере
kubectl apply -f directorydb-secret.yaml
Проверьте создание:
kubectl get secret directorydb-connection-string -n prod
kubectl get secret directorydb-connection-string -n prod -o yaml
Проверка секрета
После создания можно проверить доступ к MongoDB:
# Получить строку подключения из секрета
kubectl get secret directorydb-connection-string -n prod -o jsonpath='{.data.connectionString}' | base64 -d
# Проверить подключение через mongosh
mongosh "$(kubectl get secret directorydb-connection-string -n prod -o jsonpath='{.data.connectionString}' | base64 -d)"
Предупреждения
- Не рекомендуется для production-среды - используйте Terraform развертывание
- Бэкапы - не забудьте обновитьterraform state файлы при ручном создании секретов
- Секреты - никогда не храните пароли в открытом виде в файловой системе
- Namespace - убедитесь, что секрет создается в правильном namespace (
prodдля production)