403:请求的身份验证范围不足-gcloud容器群集获取凭据

时间:2019-04-01 20:28:41

标签: google-cloud-platform gitlab roles gcloud gitlab-ci-runner

我需要从gitlabRunner连接到GKE kubernetes集群,但是我不想使用AutoDevops功能,我想自行设置所有这些功能。因此,基本上,我想在gitlab运行程序上安装gcloud sdk,然后将gcloud帐户设置为我的服务帐户,使用生成的密钥进行授权,最后执行“ gcloud容器群集get-credentials ...”命令以获取有效的kubernetes配置-能够与kubernetes集群进行交互。

有趣的事实是,我尝试使用具有相同映像的docker在本地计算机上执行整个过程-并且在这里有效!我不仅在gitlabRunner上工作。唯一的区别是gitlabRunner不是在docker executor上运行,而是在kubernetes上运行(在我要与之交互的同一k8上)。

因此,工作案例是:

$ winpty docker run -it --entrypoint=sh lachlanevenson/k8s-kubectl:latest
# apk add python
# wget https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz
# tar zxvf google-cloud-sdk.tar.gz && ./google-cloud-sdk/install.sh --usage-# # reporting=false --path-update=true > /dev/null
# PATH="google-cloud-sdk/bin:${PATH}"
# gcloud config set account <my-service-account>
# gcloud auth activate-service-account --key-file=key.json --project=<my_project>
# gcloud container clusters get-credentials cluster1 --zone europe-west2-b --project <my_project>
# kubectl get all

但是当我尝试对gitlabRunner做同样的事情时: gitlab-ci-yml:

deployment_be:
  image: lachlanevenson/k8s-kubectl:latest
  stage: deploy
  only:
    - master
  tags:
    - kubernetes
  before_script:
    - apk add python
  script:
    # Download and install Google Cloud SDK
    - wget https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz
    - tar zxvf google-cloud-sdk.tar.gz && ./google-cloud-sdk/install.sh --usage-reporting=false --path-update=true
    - PATH="google-cloud-sdk/bin:${PATH}"
    # Authorize with service account and fetch k8s config file
    - gcloud config set account <my_service_account>
    - gcloud auth activate-service-account --key-file=key.json --project=<my_project>
    - gcloud container clusters get-credentials cluster1 --zone europe-west2-b --project <my_project>
    # Interact with kubectl
    - kubectl get all

我收到以下错误:

$ gcloud config set account <my_service_account>
Updated property [core/account].
$ gcloud auth activate-service-account --key-file=key.json --project=<my_project>
Activated service account credentials for: [<my_service_account>]
$ gcloud container clusters get-credentials cluster1 --zone europe-west2-b --project <my_project>
Fetching cluster endpoint and auth data.
ERROR: (gcloud.container.clusters.get-credentials) ResponseError: code=403, message=Request had insufficient authentication scopes.
ERROR: Job failed: command terminated with exit code 1

我试图为此服务帐户设置所有可能的角色,包括:Compute Administrator, Kubernetes引擎管理员, Kubernetes Engine群集管理员, 容器管理员 编辑, 所有者

为什么此服务帐户在隔离的docker映像上以及在kubernetes集群上启动的同一映像上都能正常工作?

0 个答案:

没有答案