1

我正在尝试为我构建一个 gcloud 脚本来部署我的云运行服务。该服务可以访问托管的 MongoDB,因此我必须通过环境变量提供密码凭据。

我想通过秘密管理器传递这个密码。我通过 GCP 控制台这样做:

在此处输入图像描述

所以秘密名称是mongodb-password和值mypassword。现在我按照gcloud 运行文档 ( https://cloud.google.com/sdk/gcloud/reference/run/deploy ) 了解如何将密钥添加到运行服务部署中。

在设置机密部分中解释了以下内容:

指定要挂载或作为环境变量提供的机密。以正斜杠“/”开头的键是挂载路径。所有其他键对应于环境变量。与这些相关的值应采用 SECRET_NAME:KEY_IN_SECRET 的形式;您可以省略密钥中的密钥以指定密钥中所有密钥的安装。例如:'--update-secrets=/my/path=mysecret,ENV=othersecret:key.json' 将创建一个带有秘密 'mysecret' 的卷,并将该卷挂载到 '/my/path'。因为没有指定密钥,所以将包括“mysecret”中的所有密钥。还将创建一个名为 ENV 的环境变量,其值为 'othersecret' 中的 'key.json' 的值。最多可以指定其中之一

这让我有些困惑。我不知道KEY_IN_SECRET是什么意思。秘密名称显然是mongodb-password但我不知道我现在如何引用秘密的值。

我试图弄清楚是否有关于如何定义秘密值的约定。也许像key=value. 但没有任何说明我必须那样做。

所以现在我想知道我应该为命令的--set-secrets=[KEY=VALUE,…]标志做些什么gcloud run deploy

根据给出的信息,我只能这样做:

--set-secrets=[mongodb-password=*]

我知道这是错误的,但我想解释一下现在让我感到困惑的是什么

4

1 回答 1

1

你很困惑,这很正常。目前,密钥管理器集成仅适用于 Cloud Run on Anthos(例如,部署在 GKE 集群上)。

如果您使用完全管理版本,Cloud Run 尚不支持 Secret Manager 集成(Alpha 版本应该很快开始,您可以期待在今年晚些时候公开推出)。

所以你需要直接在你的代码中获取你的秘密。或者,我创建了一个包装器来帮助您从秘密管理器加载秘密并将它们设置在环境变量中。


在 GKE 中,机密在Kubernetes 机密文档中进行了描述。您可以在 linux 目录树的路径中挂载秘密/path/to/mysecret。这是一个最佳实践,它应该与完全管理版本相同(以确保可移植性和 Knative 合规性)。

这就是为什么你可以在文档中这样的东西--update-secrets=/my/path=mysecret

于 2021-03-05T13:01:29.120 回答