首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >配置gsutil以在pod内使用kubernetes服务帐户凭据

配置gsutil以在pod内使用kubernetes服务帐户凭据
EN

Stack Overflow用户
提问于 2018-10-09 05:00:52
回答 2查看 1K关注 0票数 1

我有一个kubernetes Cronjob,它执行一些备份作业,备份文件需要上传到存储桶中。pod将服务帐户凭据装载在/var/run/secrets/kubernetes.io/serviceaccount,的pod中,但如何指示gsutil使用pod中的凭据

代码语言:javascript
复制
lrwxrwxrwx 1 root root   12 Oct  8 20:56 token -> ..data/token
lrwxrwxrwx 1 root root   16 Oct  8 20:56 namespace -> ..data/namespace
lrwxrwxrwx 1 root root   13 Oct  8 20:56 ca.crt -> ..data/ca.crt
lrwxrwxrwx 1 root root   31 Oct  8 20:56 ..data -> ..2018_10_08_20_56_04.686748281
drwxr-xr-x 2 root root  100 Oct  8 20:56 ..2018_10_08_20_56_04.686748281
drwxrwxrwt 3 root root  140 Oct  8 20:56 .
drwxr-xr-x 3 root root 4096 Oct  8 20:57 ..
EN

回答 2

Stack Overflow用户

发布于 2018-10-09 07:33:10

简而言之,gsutil不知道如何使用令牌的格式,所以您无法使用它。您将需要一个JSON密钥文件,如本教程中所述(除非您不能使用GOOGLE_APPLICATION_CREDENTIALS环境变量):

https://cloud.google.com/kubernetes-engine/docs/tutorials/authenticating-to-cloud-platform

Gsutil不是读取GOOGLE_APPLICATION_CREDENTIALS环境变量,而是使用Boto配置文件加载凭据。它知道查找这些Boto配置文件的常见位置是/etc/boto.cfg$HOME/.boto。请注意,后一个值会根据运行命令的用户的不同而变化(对于不同的用户,$HOME会扩展为不同的值);由于cron作业通常以不同于设置配置文件的用户身份运行,因此我不建议使用此路径。

因此,在pod上,您需要首先创建一个引用密钥文件的Boto配置文件:

代码语言:javascript
复制
# This option is only necessary if you're running an installation of
# gsutil that came bundled with gcloud. It tells gcloud that you'll be
# managing credentials manually via your own Boto config files.

$ gcloud config set pass_credentials_to_gsutil False


# Set up your boto file at /path/to/my/boto.cfg - the setup will prompt
# you to supply the /path/to/your/keyfile.json.  Alternatively, to avoid
# interactive setup prompts, you could set up this config file beforehand
# and copy it to the pod.

$ gsutil config -e -o '/path/to/my/boto.cfg'

最后,无论何时运行gsutil,都需要告诉它在哪里可以找到引用JSON密钥文件的Boto配置文件(还要确保运行该命令的用户具有读取Boto配置文件和JSON密钥文件的权限)。如果您将Boto配置文件写入到我上面提到的某个众所周知的路径,gsutil将尝试自动查找它;如果不是这样,您可以通过在为cron作业提供的命令中导出BOTO_CONFIG环境变量来告诉gsutil在哪里可以找到Boto配置文件:

代码语言:javascript
复制
export BOTO_CONFIG=/path/to/my/boto.cfg; /path/to/gsutil cp <src> <dst>

编辑

注意,GCE VM映像附带了一个预填充的文件,该文件位于/etc/boto.cfg。这个配置文件告诉gsutil加载一个插件,该插件允许gsutil联系GCE元数据服务器并以这种方式获取身份验证令牌(对应于该VM的default机器人服务帐户)。如果您的pod能够读取主机VM的/etc/boto.cfg文件,您可以联系GCE元数据服务器,并且您可以接受由VM的default服务帐户执行的操作,那么这个解决方案应该开箱即用。

票数 3
EN

Stack Overflow用户

发布于 2018-10-09 06:21:30

请注意,您的Kubernetes服务帐户与您的Google云存储服务帐户不同。

gsutil使用boto配置,因此您可以在/etc/boto.cfg~/.boto下挂载Kubernetes密钥

您可以使用令牌或服务帐户向GCP进行身份验证。您可以使用gsutil config -f生成令牌,也可以使用gsutil config -e生成服务帐户凭据。它将生成一个~/.boto文件,然后您可以将该文件作为Kubernetes secret挂载到您的pod上。

更多信息here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52710052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档