web-dev-qa-db-ja.com

GCRからGKEへの画像のプル

今日は、GCRとGKEで遊ぶ最初の日です。だから私の質問が幼稚に聞こえるなら謝罪します。

そこで、GCRに新しいレジストリを作成しました。プライベートです。 this documentationを使用して、コマンドを使用してアクセストークンを取得しました

gcloud auth print-access-token
#<MY-ACCESS_TOKEN>

ユーザー名がoauth2accesstoken

試したときにローカルのラップトップで

docker login https://eu.gcr.io/v2
Username: oauth2accesstoken
Password: <MY-ACCESS_TOKEN>

私は得る:

Login Successful

それでは、docker-registry Kubernetesの秘密。

以下のコマンドを実行しました:

kubectl create secret docker-registry eu-gcr-io-registry --docker-server='https://eu.gcr.io/v2' --docker-username='oauth2accesstoken' --docker-password='<MY-ACCESS_TOKEN>' --docker-email='<MY_EMAIL>'

そして、私のポッドの定義は次のようになります。

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
  - name: my-app
    image: eu.gcr.io/<my-gcp-project>/<repo>/<my-app>:latest
    ports:
    - containerPort: 8090
  imagePullSecrets:
  - name: eu-gcr-io-registry

しかし、ポッドをスピンアップすると、エラーが発生します:

Warning  Failed                 4m (x4 over 6m)   kubelet, node-3  Failed to pull image "eu.gcr.io/<my-gcp-project>/<repo>/<my-app>:latest": rpc error: code = Unknown desc = Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication

YAMLファイルをチェックし、base64 --decode上の.dockerconfigjsonそしてそれは正しい。

だから私はここで何を見逃しましたか?

8
user4889345

GKEクラスターとGCRレジストリが同じプロジェクトにある場合:認証を設定する必要はありません。 GKEクラスターは、設定なしで同じプロジェクトのプライベートGCRレジストリからプルすることを許可されています。 (おそらくあなたはこれだ!)


GKEクラスターとGCRレジストリが異なるGCPプロジェクトにある場合:以下の手順に従って、GKEクラスターの「サービスアカウント」にプライベートイメージを読み込むアクセス権を付与します。 GCRクラスター: https://cloud.google.com/container-registry/docs/access-control#granting_users_and_other_projects_access_to_a_registry

一言で言えば、これは次の方法で実行できます。

gsutil iam ch  serviceAccount:[PROJECT_NUMBER][email protected]:objectViewer gs://[BUCKET_NAME]

どこ [BUCKET_NAME]は、GCR画像を保存するGCSバケットです(artifacts.[PROJECT-ID].appspot.com)および[PROJECT_NUMBER]は、GKEクラスターをホストするnumericGCPプロジェクトIDです。

14
AhmetB - Google