Мне нужно подключиться к кластеру GKE kubernetes из gitlab runner, но я не хочу использовать функцию AutoDevops, я хотел бы настроить все эти вещи самостоятельно. Итак, в основном я хотел бы установить gcloud sdk на gitlab runner, затем установить учетную запись gcloud для моей учетной записи службы, авторизоваться с помощью сгенерированного ключа и, наконец, выполнить команду «get-credentials контейнерных кластеров gcloud ...», чтобы получить действительную конфигурацию kubernetes. - иметь возможность взаимодействовать с кластером kubernetes.
Интересен тот факт, что я попытался выполнить всю процедуру на своей локальной машине, используя докер с тем же образом - и это работает здесь! Я не работаю только на Gitlab Runner. Единственное отличие состоит в том, что gitlab runner работает не с docker executor, а с kubernetes one (на тех же k8s, с которыми я хочу взаимодействовать).
Итак, рабочий случай:
$ 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
но когда я пытаюсь сделать то же самое с gitlab runner:
gitlab-СI-ут:
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 Engine,
Администратор Kubernetes Engine Clusters,
Администратор контейнера,
Редактор,
Владелец
Почему эта учетная запись службы работает нормально на изолированном образе докера, и на том же образе, запущенном в кластере kubernetes, происходит сбой?