在 GKE 中使用独立 'gsutil'
Using standalone 'gsutil' from within GKE
我正在尝试在 GKE 集群的容器 运行 中使用独立的 gsutil
工具,但我无法让它工作。我相信集群有足够的权限(见下文)。但是,运行
./gsutil ls gs://my-bucket/
产量
ServiceException: 401 Anonymous users does not have storage.objects.list access to bucket my-bucket.
我错过了什么吗?我没有 .boto
文件,因为我认为没有必要——或者是吗?这是集群和节点池具有的范围列表:
- https://www.googleapis.com/auth/compute
- https://www.googleapis.com/auth/devstorage.full_control
- https://www.googleapis.com/auth/logging.write
- https://www.googleapis.com/auth/monitoring.write
- https://www.googleapis.com/auth/pubsub
- https://www.googleapis.com/auth/servicecontrol
- https://www.googleapis.com/auth/service.management.readonly
- https://www.googleapis.com/auth/trace.append
简答:
是的,您需要 一些 类型的 boto 文件。
长答案:
通常,对于 GCE 实例,您不需要 ~/.boto
文件,因为 /etc/boto.cfg
文件已经存在——GSUtil 使用的 Boto 库知道默认查找它。在 Debian 映像上,它包含这些行:
# This file is automatically created at boot time by the /usr/lib/python
# 2.7/dist-packages/google_compute_engine/boto/boto_config.pyc script.
# Do not edit this file directly. If you need to add items to this file,
# create or edit /etc/boto.cfg.template instead and then re-run the
# script.
[GSUtil]
default_project_id = <PROJECT NUMBER HERE>
default_api_version = 2
[GoogleCompute]
service_account = default
[Plugin]
plugin_directory = /usr/lib/python2.7/dist-packages/google_compute_engine/boto
如果你想在你的 GKE 容器上模仿这种行为,你必须安装 google-compute-engine
python 包,以及一个告诉 gsutil 加载它的 boto 文件插件从安装到的位置,如上所示。在 GCE 上(我假设 GKE 也是如此,虽然我没有测试过),这个插件允许 VM 与其元数据服务器对话以获取指定服务帐户的凭据。
您可以使用 service account 或您自己的凭据在 GKE 上的 docker 容器内使用 gsutil。
服务帐号
1) 将 service-account.json
文件添加到您的项目中。
2) 将 .boto
文件添加到指向 service-account.json
文件的项目中:
[Credentials]
gs_service_key_file = /path/to/service-account.json
3) 在您的 Dockerfile 中,将 BOTO_CONFIG
环境变量设置为指向此 .boto
文件:
ENV BOTO_CONFIG=/path/to/.boto
自己的凭证
1) 在本地,运行 gcloud auth 登录。将在 ~/.config/gcloud/legacy_credentials/your@account.com/.boto 处创建一个 .boto
文件,其结构如下:
[OAuth2]
client_id = <id>.apps.googleusercontent.com
client_secret = <secret>
[Credentials]
gs_oauth2_refresh_token = <token>
2) 将此 .boto
文件复制到您的项目中
3) 在您的 Dockerfile 中,将 BOTO_CONFIG
环境变量设置为指向此 .boto
文件:
ENV BOTO_CONFIG=/path/to/.boto
我使用 pip install gsutil
在 docker 容器中安装了独立的 gsutil
我正在尝试在 GKE 集群的容器 运行 中使用独立的 gsutil
工具,但我无法让它工作。我相信集群有足够的权限(见下文)。但是,运行
./gsutil ls gs://my-bucket/
产量
ServiceException: 401 Anonymous users does not have storage.objects.list access to bucket my-bucket.
我错过了什么吗?我没有 .boto
文件,因为我认为没有必要——或者是吗?这是集群和节点池具有的范围列表:
- https://www.googleapis.com/auth/compute
- https://www.googleapis.com/auth/devstorage.full_control
- https://www.googleapis.com/auth/logging.write
- https://www.googleapis.com/auth/monitoring.write
- https://www.googleapis.com/auth/pubsub
- https://www.googleapis.com/auth/servicecontrol
- https://www.googleapis.com/auth/service.management.readonly
- https://www.googleapis.com/auth/trace.append
简答:
是的,您需要 一些 类型的 boto 文件。
长答案:
通常,对于 GCE 实例,您不需要 ~/.boto
文件,因为 /etc/boto.cfg
文件已经存在——GSUtil 使用的 Boto 库知道默认查找它。在 Debian 映像上,它包含这些行:
# This file is automatically created at boot time by the /usr/lib/python
# 2.7/dist-packages/google_compute_engine/boto/boto_config.pyc script.
# Do not edit this file directly. If you need to add items to this file,
# create or edit /etc/boto.cfg.template instead and then re-run the
# script.
[GSUtil]
default_project_id = <PROJECT NUMBER HERE>
default_api_version = 2
[GoogleCompute]
service_account = default
[Plugin]
plugin_directory = /usr/lib/python2.7/dist-packages/google_compute_engine/boto
如果你想在你的 GKE 容器上模仿这种行为,你必须安装 google-compute-engine
python 包,以及一个告诉 gsutil 加载它的 boto 文件插件从安装到的位置,如上所示。在 GCE 上(我假设 GKE 也是如此,虽然我没有测试过),这个插件允许 VM 与其元数据服务器对话以获取指定服务帐户的凭据。
您可以使用 service account 或您自己的凭据在 GKE 上的 docker 容器内使用 gsutil。
服务帐号
1) 将 service-account.json
文件添加到您的项目中。
2) 将 .boto
文件添加到指向 service-account.json
文件的项目中:
[Credentials]
gs_service_key_file = /path/to/service-account.json
3) 在您的 Dockerfile 中,将 BOTO_CONFIG
环境变量设置为指向此 .boto
文件:
ENV BOTO_CONFIG=/path/to/.boto
自己的凭证
1) 在本地,运行 gcloud auth 登录。将在 ~/.config/gcloud/legacy_credentials/your@account.com/.boto 处创建一个 .boto
文件,其结构如下:
[OAuth2]
client_id = <id>.apps.googleusercontent.com
client_secret = <secret>
[Credentials]
gs_oauth2_refresh_token = <token>
2) 将此 .boto
文件复制到您的项目中
3) 在您的 Dockerfile 中,将 BOTO_CONFIG
环境变量设置为指向此 .boto
文件:
ENV BOTO_CONFIG=/path/to/.boto
我使用 pip install gsutil