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 позволил их модулям направляться к узлу с меткой, чтобы мы могли направить его в определенный пул узлов, который мы создали с идентификацией рабочей нагрузки...
Надеюсь, это поможет!