我有无人机在k8s集群上运行。我的管道之一是用于GAE应用程序。
我和秘密斗争有一段时间了。把我的秘密公诸于众是个小任务。我最后所做的是将我的密钥文件名和内容作为一对秘密加载到无人机中,然后在我的管道中这样做:
- echo $GOOGLE_KEY_CONTENTS > "/etc/google-keys/$${GOOGLE_KEY_NAME}.json"
如果我是ls
或cat
,那么文件就在那里,一切似乎都井井有条。
然后我跑:
- 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进行身份验证。或者我在装钥匙的时候做错了什么。或者其他的东西。
发布于 2018-01-19 04:09:57
我唯一能做得对的方法是:
注意明显缺乏k8s秘密和k8s卷。
原因是无人机代理可能会出现在任何节点上(如果我坚持只将密钥放在一个节点上,那么就可以使用节点标签,但我认为一个节点与集群中的下一个节点一样安全,并且秘密很小……)。所以简单地把他们带到他们需要去的地方。
无人机代理无法访问任何k8s安装的卷。只有来自基本系统的卷。我想无人驾驶飞机不是为k8s而造的
https://stackoverflow.com/questions/48315623
复制相似问题