Bash Kubernetes cloudsql中使用特殊字符转义密码时出现问题
我遵循了将Django应用程序部署到Kubernetes集群的教程。我已经创建了cloudsql凭据,并在教程中导出了它们Bash Kubernetes cloudsql中使用特殊字符转义密码时出现问题,bash,kubernetes,google-cloud-sql,skaffold,Bash,Kubernetes,Google Cloud Sql,Skaffold,我遵循了将Django应用程序部署到Kubernetes集群的教程。我已经创建了cloudsql凭据,并在教程中导出了它们 export DATABASE_USER=<your-database-user> export DATABASE_PASSWORD=<your-database-password> 回声总是好的,但库伯内特斯总是把它剥去 使用skaffold deploy部署 编辑: 提示之后,我尝试以base64编码形式存储密码,但我怀疑它只适用于本地范围,因
export DATABASE_USER=<your-database-user>
export DATABASE_PASSWORD=<your-database-password>
回声总是好的,但库伯内特斯总是把它剥去
使用skaffold deploy部署
编辑:
提示之后,我尝试以base64编码形式存储密码,但我怀疑它只适用于本地范围,因为Kubernetes仪表板中的密码仍然相同,我怀疑我需要重新生成证书,以便在gke集群上远程工作
那么env变量是用于本地的,而cloudsqlproxy中的凭据是被使用和误解的吗?顺便问一下,那些文件在哪里
编辑2:
我刚刚发现,实际上gke集群使用的是json凭据,而不是导出的变量。配置json已经包含base64编码形式的密码,但是它是字符串的base64编码,仍然缺少特殊字符。看起来唯一的解决办法是生成没有特殊字符的新凭证,这看起来像一个bug,不是吗?您应该在将密码传递到pod之前对其进行编码,以便特殊字符的编码方式可以保留
在bash中,您可以使用以下工具执行此操作:
export DATABASE_PASSWORD=`echo [ACTUAL_PASSWORD_HERE] | base64`
然后,您需要确保Django应用程序settings.py
在将密码应用于其内部变量之前使用base64解码
因此,在链接到的教程中
'PASSWORD':os.getenv('DATABASE_PASSWORD'),
将需要更改为:
'PASSWORD':base64.b64解码(os.getenv('DATABASE_PASSWORD'),
谢谢您的快速响应,我马上就去试试。这完全有道理。编辑了我的答案。你能看一看吗?你需要同时更改Django代码(settings.py),然后重新部署Django应用程序,以获得新的密码和新的环境变量。我会调整我的答案,让它更明显一点。我自然会两者兼而有之。看起来env变量是在部署到真实集群时从json凭据中选取的,而不是用于本地开发的导出变量。
export DATABASE_PASSWORD=`echo [ACTUAL_PASSWORD_HERE] | base64`