Проблема с экранированием пароля с помощью специальных символов в Kubernetes cloudsql
Я следовал этому руководству по развертыванию приложения Django в кластере Kubernetes. Я создал учетные данные cloudql и экспортировал их, как в учебнике
export DATABASE_USER=<your-database-user>
export DATABASE_PASSWORD=<your-database-password>
Однако мой пароль был сгенерирован LastPass и содержит специальные символы, которые вычеркнуты в Kubernetes Pod, что делает пароль неверным.
Это мой пароль (изменен, только показаны специальные символы) 5bb4&sL!EB%e
Итак, я пробовал различные способы экспорта этой строки, повторяя ее всегда, показывая правильный пароль, однако в Dashboard Kubernetes пароль всегда неверен (также изменен в DevTools, но некоторые символы просто удалены)
Вещи, которые я пробовал
export DATABASE_PASSWORD=$'5bb4&sL\!EB\%e'
export DATABASE_PASSWORD='5bb4&sL!EB%e'
Эхо всегда хорошо, но kubernetes всегда раздевается.
Развертывание с skaffold deploy
РЕДАКТИРОВАТЬ:
После подсказки я попытался сохранить пароль в форме кодировки base64, однако я подозреваю, что он применяется только к локальной области, поскольку пароль в Dashboard Kubernetes остается тем же, я подозреваю, что мне нужно повторно создать сертификат для удаленной работы на кластере гке?
Таким образом, переменные env предназначены для локальных пользователей, а учетные данные в облачном SQL-прокси - это те, которые используются и неправильно интерпретируются? Кстати, где эти файлы?
EDIT2:
Я только что узнал, что на самом деле кластер gke использует учетные данные json, а не экспортируемые переменные. Конфигурация json уже содержит пароль в кодированной форме base64, ОДНАКО это кодировка строки base64, в которой все еще отсутствуют специальные символы. Похоже, единственный выход - генерировать новые учетные данные без специальных символов, что похоже на ошибку, не так ли?
1 ответ
Вам следует base64
закодируйте свой пароль перед передачей его в модуль, чтобы специальные символы кодировались таким образом, чтобы их можно было сохранить.
В Bash вы можете сделать это с:
export DATABASE_PASSWORD=`echo [ACTUAL_PASSWORD_HERE] | base64`
Затем вам нужно убедиться, что приложение Django settings.py
использует декодирование base64 перед применением пароля к своей внутренней переменной.
Итак, в уроке, на который вы ссылаетесь, строка
'PASSWORD': os.getenv('DATABASE_PASSWORD'),
потребуется изменить на:
'PASSWORD': base64.b64decode(os.getenv('DATABASE_PASSWORD')),