GKE: служебная учетная запись для Config Connector не имеет разрешений

Я пытаюсь запустить Config Connector в моем проекте GKE и следую этому руководству по началу работы.

Пока что я включил соответствующие API:

> gcloud services enable cloudresourcemanager.googleapis.com

Создал свою учетную запись службы и добавил привязку политики:

> gcloud iam service-accounts create cnrm-system
> gcloud iam service-accounts add-iam-policy-binding ncnrm-system@test-connector.iam.gserviceaccount.com --member="serviceAccount:test-connector.svc.id.goog[cnrm-system/cnrm-controller-manager]" --role="roles/iam.workloadIdentityUser"
> kubectl wait -n cnrm-system --for=condition=Ready pod --all

Аннотировано мое пространство имен:

> kubectl annotate namespace default cnrm.cloud.google.com/project-id=test-connector

А затем выполните попытку применить гаечный ключ в примере:

~ >>> kubectl describe spannerinstance spannerinstance-sample                                                                                                                                                                                                                            
Name:         spannerinstance-sample
Namespace:    default
Labels:       label-one=value-one
Annotations:  cnrm.cloud.google.com/management-conflict-prevention-policy: resource
              cnrm.cloud.google.com/project-id: test-connector
API Version:  spanner.cnrm.cloud.google.com/v1beta1
Kind:         SpannerInstance
Metadata:
  Creation Timestamp:  2020-09-18T18:44:41Z
  Generation:          2
  Resource Version:    5805305
  Self Link:           /apis/spanner.cnrm.cloud.google.com/v1beta1/namespaces/default/spannerinstances/spannerinstance-sample
  UID:                 
Spec:
  Config:        northamerica-northeast1-a
  Display Name:  Spanner Instance Sample
  Num Nodes:     1
Status:
  Conditions:
    Last Transition Time:  2020-09-18T18:44:41Z
    Message:               Update call failed: error fetching live state: error reading underlying resource: Error when reading or editing SpannerInstance "test-connector/spannerinstance-sample": googleapi: Error 403: Request had insufficient authentication scopes.
    Reason:                UpdateFailed
    Status:                False
    Type:                  Ready
Events:
  Type     Reason        Age                      From                        Message
  ----     ------        ----                     ----                        -------
  Warning  UpdateFailed  6m41s        spannerinstance-controller  Update call failed: error fetching live state: error reading underlying resource: Error when reading or editing SpannerInstance "test-connector/spannerinstance-sample": googleapi: Error 403: Request had insufficient authentication scopes.

Я не совсем уверен, что здесь происходит, потому что моя учетная запись службы cnrm владеет проектом, в котором находится мой кластер, и у меня включены API, перечисленные в руководстве.

Сами стручки CC кажутся здоровыми:

~ >>> kubectl wait -n cnrm-system --for=condition=Ready pod --all                                                                                                                                                                                                                    
pod/cnrm-controller-manager-0 condition met
pod/cnrm-deletiondefender-0 condition met
pod/cnrm-resource-stats-recorder-58cb6c9fc-lf9nt condition met
pod/cnrm-webhook-manager-7658bbb9-kxp4g condition met

Мы будем очень благодарны за любое понимание этого!

2 ответа

Решение

Судя по опубликованному вами сообщению об ошибке, я должен предположить, что это может быть ошибка в ваших областях GKE.

Чтобы GKE мог получить доступ к другим API GCP, вы должны разрешить этот доступ при создании кластера. Вы можете проверить включенные области с помощью команды:

gcloud container clusters describe <cluster-name> и найти в результате для oauthScopes.

Здесь вы можете увидеть имя области для Cloud Spanner, вы должны включить область https://www.googleapis.com/auth/cloud-platform как минимум разрешение.

Чтобы проверить в графическом интерфейсе, вы можете увидеть разрешение в: Kubernetes Engine > <Cluster-name> > развернуть раздел permissions и найти для Cloud Platform

У меня было такое же сообщение об ошибке, за исключением того, что узел и пул узлов, к которому он принадлежал, не были включены.

Для проверки с помощьюkubectl, узнайте, на каких узлах находятся модули

      kubectl get pods -n cnrm-system -o wide

перейдите к кластеру в пользовательском интерфейсе GCP (так проще), затем на вкладку узлов, затем к пулу узлов, в котором находится каждый изcnrm-systemкапсулы работают. Проверьте нижеSecurityчтобы узнать, есть ли у нихGKE Metadata Serverвключен или нет. (3-й снизу на этой картинке)

Что я обнаружил - первые несколько раз - так это то, что у меня всегда было 1 или 2 пула узлов, в которых не был включен сервер метаданных, и всякий раз, когда один из модулей коннектора конфигурации оказывался на этом узле, это давало мне именно эта ошибка.

Примечание в документе о необходимости включения сервера метаданных (или идентификатора рабочей нагрузки) в каждом пуле узлов скрыто в крошечной строке.

Было бы неплохо, если бы GCP позволил их модулям направляться к узлу с меткой, чтобы мы могли направить его в определенный пул узлов, который мы создали с идентификацией рабочей нагрузки...

Надеюсь, это поможет!

Другие вопросы по тегам