4

我正在按照教程将 Django 应用程序部署到 Kubernetes 集群。我已经创建了 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 集群上?

在此处输入图像描述

因此,环境变量用于本地,云 sql 代理中的凭据是被使用和误解的?顺便说一句,这些文件在哪里?

编辑2:

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

4

1 回答 1

2

您应该base64在将密码传递到 pod 之前对其进行编码,以便以可以保留的方式对特殊字符进行编码。

在 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')),

于 2019-02-12T10:43:34.580 回答