Проблема с экранированием пароля с помощью специальных символов в 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')),

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