gpt4 book ai didi

go - 无法从 Google Kubernetes Engine 集群访问 Google Cloud Datastore

转载 作者:IT王子 更新时间:2023-10-29 01:17:38 26 4
gpt4 key购买 nike

我有一个简单的应用程序,可以从数据存储中获取和放入信息。

它无处不在,但是当我从 Kubernetes Engine 集群内部运行它时,我得到了这个输出:

Error from Get()
rpc error: code = PermissionDenied desc = Request had insufficient authentication scopes.
Error from Put()
rpc error: code = PermissionDenied desc = Request had insufficient authentication scopes.

我正在使用 cloud.google.com/go/datastore 包和 Go 语言。

我不知道为什么会收到此错误,因为该应用程序在其他任何地方都运行良好。

更新:

在寻找答案时,我在 Google 网上论坛上找到了这条评论:

In order to use Cloud Datastore from GCE, the instance needs to be configured with a couple of extra scopes. These can't be added to existing GCE instances, but you can create a new one with the following Cloud SDK command:

gcloud compute instances create hello-datastore --project --zone --scopes datastore userinfo-email

这是否意味着默认情况下我无法使用 GKE 中的 Datastore?

更新 2:

我可以看到,在创建我的集群时,我没有启用任何权限(默认情况下,大多数服务都是禁用的)。我想这就是导致问题的原因:

奇怪的是,我可以很好地使用 CloudSQL,即使它被禁用(使用 cloudsql_proxy 容器)。

最佳答案

那么我在调试这个问题的过程中了解到的是:

  • 在创建 Kubernetes 集群期间,您可以为将要创建的 GCE 节点指定权限。

  • 例如,如果您在创建期间在集群节点上启用数据存储访问,您将能够直接从 Pod 访问数据存储,而无需进行任何其他设置。

  • 如果您的集群节点权限像我一样对大多数事情(默认设置)禁用,您将需要为每个想要使用 GCP 资源(如数据存储)的应用程序创建一个适当的服务帐户。

  • 另一种方法是使用 gcloud 命令创建一个新的节点池,设置所需的权限范围,然后将所有部署迁移到新的节点池(相当繁琐)。

所以在一天结束时,我通过为我的应用程序创建一个服务帐户、下载 JSON 身份验证 key 、创建一个包含该 key 的 Kubernetes secret 来解决这个问题,对于数据存储,我设置了 GOOGLE_APPLICATION_CREDENTIALS 环境变量到已安装的 secret JSON key 的路径。

这样,当我的应用程序启动时,它会检查 GOOGLE_APPLICATION_CREDENTIALS 变量是否存在,并根据该变量指向的 JSON key 验证 Datastore API 访问权限。

部署 YAML 片段:

  ...
containers:
- image: foo
name: foo
env:
- name: GOOGLE_APPLICATION_CREDENTIALS
value: /auth/credentials.json
volumeMounts:
- name: foo-service-account
mountPath: "/auth"
readOnly: true
volumes:
- name: foo-service-account
secret:
secretName: foo-service-account

关于go - 无法从 Google Kubernetes Engine 集群访问 Google Cloud Datastore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47613623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com