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

我一直在和 secret 战斗。公开我的 secret 是一项使命。我最终要做的是将密钥文件名和内容作为一对 secret 加载到无人机中,然后在我的管道中执行以下操作:

  - 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.

key 在那里,在我看来还不错

我也尝试过:
- 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.

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

当无人机实例未在k8s中运行且密钥文件位于共享卷中时,我还设法从无人机内部对gcloud进行了身份验证。 (不幸的是,在k8s上使用这样的卷是不切实际的,因为无人驾驶飞机要我将 secret 信息提供给每个群集节点的基础系统,而我并不想这样做)

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

最佳答案

我能正确解决的唯一方法是:

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

    请注意,明显缺少k8s secret 和k8s卷。

    这样做的原因是,无人机代理可能会出现在任何节点上(我想如果我坚持只将密钥放在一个节点上,则可以使用节点标签,但是我认为在群集中一个节点与下一个节点一样安全,并且 secret 很小...)。因此,只需将它们发送到需要的位置即可。

    无人机代理无法访问任何已安装的k8s卷。仅来自基础系统的卷。我想无人机不是为k8s而设计的

    关于kubernetes - 来自无人机管道的GAE激活服务帐户(k8s上的无人机):无法检测到任何 key ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48315623/

    10-10 04:28