来自无人机管道的 GAE 激活服务帐户(k8s 上的无人机):无法检测到密钥

GAE activate-service-account from drone pipeline (drone on k8s): No key could be detected

我在 k8s 集群上安装了无人机 运行ning。我的管道之一用于 GAE 应用程序。

我一直在与秘密作斗争。让我的秘密公开是一种使命。我最终做的是将我的密钥文件名和内容作为一对秘密加载到无人机中,然后在我的管道中这样做:

  - echo $GOOGLE_KEY_CONTENTS > "/etc/google-keys/$${GOOGLE_KEY_NAME}.json"

如果我 lscat 那么文件就在那里,一切似乎都井井有条。

然后我运行:

- gcloud auth activate-service-account --key-file=/etc/google-keys/$${GOOGLE_KEY_NAME}.json

结果是:

ERROR: gcloud crashed (ValueError): No key could be detected.

钥匙在那儿,我觉得还不错

我也试过:

- gcloud info --run-diagnostics

并得到以下输出:

Network diagnostic detects and fixes local network connection issues.
Checking network connection...
done.
Reachability Check passed.
Network diagnostic (1/1 checks) passed.

如果我尝试在我的本地计算机上使用相同的密钥文件进行身份验证,它就可以正常工作。

当无人机实例未 运行ning 在 k8s 中并且密钥文件位于共享卷中时,我还设法从无人机构建中向 gcloud 进行身份验证。 (不幸的是,在 k8s 上使用这样的卷是不切实际的,因为 drone 希望我将秘密提供给每个集群节点的基础系统,而我不打算这样做)

所以 k8s 系统正在阻止 gcloud 进行身份验证。或者我在加载密钥时做错了什么。或者完全是其他东西。

如本 link, if you're using a service account to authenticate in applications running on Kubernetes, you need to use a secrets 资源中所述。

step 5, this secret will be used as Environment Variable所述。该秘密将只能由您安装了秘密卷的应用程序访问。

我唯一能做对的方法如下:

  1. 将所有密钥复制到集群中同一位置的每个节点
  2. 使用我的 drone.yml 中的卷通过密钥
  3. 访问目录

请注意明显缺少 k8s 秘密和 k8s 卷。

这样做的原因是无人机代理可能会出现在任何节点上(我想如果我坚持只将密钥放在一个节点上就可以使用节点标签,但我认为一个节点与接下来在我的集群中,秘密很小......)。所以只需将它们 scp 到它们需要的地方。

无人机代理无法访问任何 k8s 挂载卷。仅来自基本系统的卷。我想无人机不是为 k8s

使用而设计的