Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Kubernetes cloudsql中使用特殊字符转义密码时出现问题_Bash_Kubernetes_Google Cloud Sql_Skaffold - Fatal编程技术网

Bash 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编码形式存储密码,但我怀疑它只适用于本地范围,因

我遵循了将Django应用程序部署到Kubernetes集群的教程。我已经创建了cloudsql凭据,并在教程中导出了它们

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`