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

标签 bash kubernetes google-cloud-sql skaffold

我在关注 this将 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 中更改,但只是删除了一些字符)

enter image description here

我尝试过的事情
export DATABASE_PASSWORD=$'5bb4&sL\!EB\%e'
export DATABASE_PASSWORD='5bb4&sL!EB%e'

echo 总是好的,但 kubernetes 总是剥离它。

使用 skaffold deploy 进行部署

编辑:

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

enter image description here

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

编辑2:

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

最佳答案

您应该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')),

关于bash - Kubernetes cloudsql 中使用特殊字符转义密码的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54647972/

相关文章:

bash - 无法让 ASCII 艺术回显到控制台

kubernetes - yaml 解析错误 Helm

mysql - 如何使用谷歌应用程序引擎通过java创建数据库?

bash - 为什么 Bash 在扩展此处字符串时总是添加换行符?

bash - 编写 Linux shell 脚本以安全地从终端分离程序

ssl - 为多个 Kubernetes 节点生成单个证书

python - 如何从Python进程登录Kubernetes容器日志

mysql - 无法使用来自 GAE 的非根帐户连接到 Google Cloud SQL

mysql - 如何更改 Google SQL Cloud 上的 innodb_lru_scan_depth 值?

linux - 无法使用 ant exec 任务运行 bash 脚本