我需要从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集群上启动的同一映像上都能正常工作?