Anu*_*ope 6 go google-cloud-datastore google-cloud-platform kubernetes
我有一个简单的应用程序,从数据存储区获取和提取信息.
它可以在任何地方使用,但是当我从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.
Run Code Online (Sandbox Code Playgroud)
我正在使用cloud.google.com/go/datastore包和Go语言.
我不知道为什么我收到此错误,因为应用程序在其他地方工作正常.
更新:
正在寻找答案,我在Google网上论坛中发现了这条评论:
为了从GCE使用Cloud Datastore,需要为实例配置一些额外的范围.这些不能添加到现有GCE实例,但您可以使用以下Cloud SDK命令创建新实例:
gcloud compute instances创建hello-datastore --project --zone --scopes datastore userinfo-email
这是否意味着默认情况下我无法使用GKE中的数据存储区?
更新2:
我可以看到,在创建我的集群时,我没有启用任何权限(默认情况下对大多数服务禁用).我想这就是造成这个问题的原因:

奇怪的是,即使它被禁用(使用cloudsql_proxy容器),我也可以使用CloudSQL .
Anu*_*ope 10
所以我在调试这个问题的过程中学到的是:
在创建Kubernetes群集期间,您可以为将要创建的GCE节点指定权限.
例如,如果您在创建期间在群集节点上启用数据存储访问,则可以直接从Pod访问数据存储,而无需设置任何其他内容.
如果对于像我这样的大多数事物(默认设置)禁用了群集节点权限,则需要为每个想要使用GCP资源(如数据存储区)的应用程序创建适当的服务帐户.
另一种方法是使用该gcloud命令创建新节点池,设置所需的权限范围,然后将所有部署迁移到新节点池(相当繁琐).
所以在一天结束时,我通过为我的应用程序创建服务帐户,下载JSON身份验证密钥,创建包含该密钥的Kubernetes秘密来解决问题,在数据存储的情况下,我将GOOGLE_APPLICATION_CREDENTIALS环境变量设置为路径挂载的秘密JSON密钥.
这样,当我的应用程序启动时,它会检查GOOGLE_APPLICATION_CREDENTIALS变量是否存在,并根据变量指向的JSON密钥对数据存储区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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2179 次 |
| 最近记录: |