Проблема с экранированием пароля с помощью специальных символов в Kubernetes cloudsql - PullRequest
0 голосов
/ 12 февраля 2019

Я следовал этому руководству по развертыванию приложения Django в Kubernetes Cluster.Я создал учетные данные cloudql и экспортировал их, как в учебном пособии

export DATABASE_USER=<your-database-user>
export DATABASE_PASSWORD=<your-database-password>

Однако мой пароль был сгенерирован LastPass и содержит специальные символы, которые распределяются в модуле Kubernetes Pod, что делает его неверным.

Это мой пароль (измененный, просто показаны специальные символы) 5bb4&sL!EB%e

Итак, я пробовал различные способы экспорта этой строки, при ее отображении всегда отображается правильный пароль, однако в инструментальной панели Kubernetesпароль всегда неверен (также изменен в DevTools, но некоторые символы только что удалены)

enter image description here

То, что я пробовал

export DATABASE_PASSWORD=$'5bb4&sL\!EB\%e'
export DATABASE_PASSWORD='5bb4&sL!EB%e'

Эхо всегда хорошо, но kubernetes всегда удаляет его.

Развертывание с skaffold deploy

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

После подсказки я попытался сохранить пароль вформа кодирования base64, однако я подозреваю, что она применима только к локальной области, так как пароль в Dashboard Kubernetes остается тем же, я подозреваю, что мне нужно восстановить сертификатe, чтобы сделать это удаленно на кластере gke?

enter image description here

Таким образом, переменные env предназначены для локального доступа, а учетные данные в облачном прокси-сервере SQL - те, которые используютсяиспользовал и неправильно истолковал?Кстати, где эти файлы?

EDIT2:

Я только что обнаружил, что на самом деле кластер gke использует учетные данные json, а не экспортируемые переменные.Конфигурация json уже содержит пароль в кодированной форме base64, ОДНАКО это кодировка строки base64, в которой все еще отсутствуют специальные символы.Похоже, единственный выход - генерировать новые учетные данные без специальных символов, что похоже на ошибку, не так ли?

1 Ответ

0 голосов
/ 12 февраля 2019

Вы должны 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')),

...