403: у запроса недостаточно областей аутентификации - get-учетные данные кластеров контейнера gcloud - PullRequest
0 голосов
/ 01 апреля 2019

Мне нужно подключиться к кластеру 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, происходит сбой?

...