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

时间:2018-01-18 07:09:08

标签: kubernetes google-cloud-platform secret-key drone droneci

我有无人机在k8s集群上运行。我的一个管道是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.

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

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

因此,k8s系统正在阻止gcloud进行身份验证。或者我在加载密钥时出错了。或完全不同的东西。

2 个答案:

答案 0 :(得分:0)

如本link所述,如果您使用服务帐户在Kubernetes上运行的应用程序中进行身份验证,则需要使用secrets资源。

step 5所述,此秘密将用作Environment Variable。只有安装了密钥卷的应用程序才能访问该密钥。

答案 1 :(得分:0)

我能做到正确的唯一方法是:

  1. 将所有密钥复制到群集中位于同一位置的每个节点
  2. 使用我的drone.yml中的卷来访问带有键的目录
  3. 注意显着缺乏k8s的秘密和k8s卷。

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

    无人机代理无法访问任何已安装的k8s卷。仅来自基本系统的卷。我想无人机不是为了与k8s一起使用而建造的