我正在按照this教程将Django App部署到Kubernetes Cluster。我已经创建了cloudsql凭据,并按照教程中的说明导出了
export DATABASE_USER=<your-database-user>
export DATABASE_PASSWORD=<your-database-password>
但是我的密码是由LastPass生成的,并且包含特殊字符,这些特殊字符在Kubernetes Pod中被分条,从而使密码不正确。
这是我的密码(已更改,仅显示特殊字符)
5bb4&sL!EB%e
因此,我尝试了各种导出该字符串的方法,将其回显总是显示正确的密码,但是在Kubernetes Dashboard中,密码始终不正确(也在DevTools中进行了更改,但是只是删除了一些字符)
我尝试过的事情
export DATABASE_PASSWORD=$'5bb4&sL\!EB\%e'
export DATABASE_PASSWORD='5bb4&sL!EB%e'
回声总是很好,但是kubernetes总是在剥离它。
使用skaffold deploy
编辑:
提示后,我尝试以base64编码形式存储密码,但是我怀疑它仅适用于本地范围,因为Kubernetes Dashboard中的密码仍然相同,我怀疑我需要重新生成证书才能进行可以在gke集群上远程工作?
因此,env变量用于本地,而云sql代理中的凭据正在被使用和被误解?这些文件在哪里?
EDIT2:
我刚刚发现gke集群确实在使用凭据json而不是导出的变量。配置json已经包含以base64编码形式的密码,但是它是仍缺少特殊字符的字符串的base64编码。看起来唯一的出路是生成没有特殊字符的新凭据,这看起来像个错误,不是吗?
答案 0 :(得分:2)
您应先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')),