首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于权限不足,Katib实验无法访问GCS桶

由于权限不足,Katib实验无法访问GCS桶
EN

Stack Overflow用户
提问于 2020-07-25 11:24:55
回答 2查看 470关注 0票数 0

作为连续部署的一部分,我试图在kubeflow集群上运行Google构建的Kubeflow管道。

我已经创建了一个服务帐户,并允许访问GCS桶。

在Kubeflow管道中,我将服务帐户的用户-gcp应用于所有管道步骤。管道的第一步是在kubeflow命名空间中启动katib实验。然而,实验失败的理由如下。

流程如下:云构建触发一个python文件,该文件创建一个KFP客户端,然后使用客户机上传管道并运行一个实验。

第一个管道步骤启动一个katib实验,并等待它完成。实验成功启动,并创建了运行试验的吊舱,但由于以下原因而失败,实验总体上失败。

消息:“主目录:/命名空间/.svc.id.goog具有附加声明,没有storage.objects.get访问Google”

如果我允许allUsers访问GCS桶,那么这个实验就能正常工作。

我还按照下面的链接进行故障排除- https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity

我对此几乎没有什么疑问-

  1. 哪个服务帐户被用于从katib实验中访问GCS桶?
  2. 如何解决上述问题?

任何故障排除步骤都会有帮助。

EN

回答 2

Stack Overflow用户

发布于 2020-07-28 21:24:22

我认为消息指向的是您在容器中通过身份验证的用户,并且该用户没有访问GCS桶所需的权限。

".svc.id.goog"是在GKE集群中启用工作负载标识时创建的工作负载标识命名空间。工作负载标识的目的是将Kubernetes服务帐户(KSA)配置为充当谷歌服务帐户(GSA)。为了在您的豆荚中使用GSA进行身份验证,您需要创建所有用于在指定的K8s_namespace中在GCS中执行操作的荚,以及使用您配置的带有工作负载标识的KSA,这将自动创建从您的KSA到您的容器中的GSA的绑定。

请确保GSA具有访问存储桶的正确权限,例如存储管理,其中包含所有存储权限,这里是预定义权限不同的桶权限

正如这个链接所提到的,您需要创建一个GSAKSA,这3个资源将为auth外部创建绑定,作为GSA,但在内部(在集群中)作为KSA创建绑定。

如果您不记得在工作负载标识中配置的k8s-命名空间、KSA和GSA,那么请尝试遵循:。

  1. 进入GKE集群,查找不同的名称空间:

默认设置

库贝-节点租赁

库贝-公众

库贝系统

使用命令kubectl get ns获取名称空间,这里是输出的示例:

代码语言:javascript
复制
gilbertoa@cloudshell:~ (Project_ID)$ kubectl get ns
NAME              STATUS   AGE
default           Active   25d
kube-node-lease   Active   25d
kube-public       Active   25d
kube-system       Active   25d
wlins             Active   25d

在本例中,我确实记得在工作负载标识中配置的wlins k8s_namespace。

  1. 检查标识名称空间中的服务帐户:

使用命令kubectl get sa -n IDENTIFIED_NAMESPACE,这里是输出的示例:

代码语言:javascript
复制
gilbertoa@cloudshell:~ (Project_ID)$ kubectl get sa -n wlins
NAME      SECRETS   AGE
default   1         25d
wlisa     1         25d

在本例中,我确实记得在工作负载标识中配置的KSA是wlisa

  1. 检查在工作负载标识配置期间所做的KSA注释:

使用命令kubectl describe sa YOUR_KSA -n IDENTIFIED_NAMESPACE,这里是输出的示例:

代码语言:javascript
复制
gilbertoa@cloudshell:~ (Project_ID)$ kubectl describe sa wlisa -n wlins
Name:                wlisa
Namespace:           wlins
Labels:              <none>
Annotations:         iam.gke.io/gcp-service-account: wli-sa@Project_ID.iam.gserviceaccount.com
Image pull secrets:  <none>
Mountable secrets:   wlisa-token-8jpq2
Tokens:              wlisa-token-8jpq2
Events:              <none>

在本例中,我确实记得在工作负载标识中配置的GSA是wli-sa@project_ID.iam.gserviceaccount.com

  1. 验证..。

通过运行next命令(它位于您共享的文档的步骤9上),并替换ksa-namek8s-namespace

代码语言:javascript
复制
kubectl run -it \
  --image google/cloud-sdk:slim \
  --serviceaccount ksa-name \
  --namespace k8s-namespace \
  workload-identity-test

以下是我所做的测试:

代码语言:javascript
复制
  gilbertoa@cloudshell:~ (Project_ID)$ **kubectl run -it \
    >   --image google/cloud-sdk:slim \
    >   --serviceaccount wlisa \
    >   --namespace wlins \
    >   workload-identity-test**
    If you don't see a command prompt, try pressing enter.

下面是使用上述命令自动获得的容器接口,您可以看到活动帐户是在工作负载标识中配置的GSA:

代码语言:javascript
复制
root@workload-identity-test:/#
root@workload-identity-test:/# gcloud auth list
                Credentialed Accounts
ACTIVE  ACCOUNT
*       wli-sa@Project_ID.iam.gserviceaccount.com
To set the active account, run:
    $ gcloud config set account `ACCOUNT`
root@workload-identity-test:/#

最后是。如果您使用不同的KSA和k8s_namespace来创建您的荚/容器,那么您将不会被认证为GSA。

下面是我使用的命令,其中不使用任何k8s_namespace KSA并使用不同的(默认名称空间)。当我检查活动帐户时,它会显示工作负载标识Project_ID.svc.id.goog名称空间,它没有任何IAM权限,如果我试图更新一个桶,我将得到一条拒绝权限的消息。

代码语言:javascript
复制
gilbertoa@cloudshell:~ (Project_ID)$   kubectl run -it \
>   --image google/cloud-sdk:slim \
>   --namespace default \
>   workload-identity-test-bad

root@workload-identity-test-bad:/# gcloud auth list
      Credentialed Accounts
ACTIVE  ACCOUNT
*       Project_ID.svc.id.goog
To set the active account, run:
    $ gcloud config set account `ACCOUNT`
root@workload-identity-test-bad:/#

我知道这是一个很长的回应,但我希望这能帮助你解决你的问题。

票数 3
EN

Stack Overflow用户

发布于 2020-09-10 15:08:32

您可能只需要在Katib实验中的作业模板中向Pod规范添加以下内容

代码语言:javascript
复制
...
spec:
  serviceAccountName: default-editor
  ...

背景:“默认编辑器”服务帐户由Kubeflow在每个用户名称空间中显式创建,以允许通过工作负载标识访问GCP API(如Google ),但它不是所有豆荚的默认服务帐户。阿里尔·帕拉西奥斯的详细回答帮助我解决了这个问题。

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

https://stackoverflow.com/questions/63087745

复制
相关文章

相似问题

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