3

我有无人机在 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 进行身份验证。或者我在加载我的密钥时做错了什么。或者完全是别的东西。

4

2 回答 2

0

我能做对的唯一方法是:

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

请注意明显缺乏 k8s 机密和 k8s 卷。

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

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

于 2018-01-19T04:09:57.043 回答
-1

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

步骤 5中所述,此密钥将用作环境变量。只有您安装了秘密卷的应用程序才能访问该秘密。

于 2018-01-18T15:49:30.937 回答