在Kubernetes cloudsql中使用特殊字符转义密码的问题

问题描述 投票:2回答:1

我正在关注this教程,将Django App部署到Kubernetes Cluster。我已经创建了cloudql凭据并在教程中导出它们

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

但是我的密码是由LastPass生成的,包含特殊字符,这些字符在Kubernetes Pod中被条带化,从而使密码不正确。

这是我的密码(更改,只显示特殊字符)5bb4&sL!EB%e

所以我尝试了各种方法导出这个字符串,回显它总是显示正确的密码,但是在Kubernetes Dashboard中密码总是不正确的(在DevTools中也改变了,但是一些字符只是被删除了)

enter image description here

我尝试过的事情

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

回声总是好的,但kubernetes总是剥离它。

使用skaffold deploy进行部署

编辑:

提示后我试图以base64编码形式存储密码,但我怀疑它只适用于本地范围,因为Kubernetes Dashboard中的密码仍然相同,我怀疑我需要重新生成证书才能使这项工作远程工作在gke集群?

enter image description here

所以env变量是本地的,云sql代理中的凭据是正在使用和误解的?顺便说一下那些文件在哪里?

Aaditi:

我刚刚发现gke集群使用凭证json而不是导出的变量。配置json已经包含了base64编码形式的密码,但是它仍然是缺少特殊字符的字符串的base64编码。看起来唯一的出路是生成没有特殊字符的新凭证,看起来像一个bug,不是吗?

bash kubernetes google-cloud-sql skaffold
1个回答
2
投票

你应该在将密码传递到pod之前对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')),

© www.soinside.com 2019 - 2024. All rights reserved.