GKEでは特に何も設定しなくても、同一プロジェクトのGCRのDockerイメージをpullできる。GCRはプライベートレジストリなので当然だが、プロジェクト外では認証が必要となる。今回は、ローカルのKubernetesでGCRのイメージをpullしたかったので、その手順を残す。

サービスアカウントのキーを作成

まず、GCRの読み取り権限を持つサービスアカウントのキーをつくる。

  1. GCPのメニューから”API & Services” > “Credentials” > “Create Credentials” > “Service account key” > と進む。
  2. “Service account”には”New service account”を、”Role”には”Storage Object Viewer”を、”Key type”には”JSON”を設定して、キーを作成する。

Kubernetesのsecretの作成

続いて、以下のコマンドでsecretを作成する。

kubectl create secret docker-registry gcr-puller \
  --docker-server=gcr.io \
  --docker-username=_json_key \
  --docker-password="$(cat /path/to/service_account_key.json)" \
  [email protected]

YAMLにエクスポートする場合は、以下のコマンドを実行する。

kubectl get secret gcr-puller -o yaml > secret.yaml

deploymentのimagePullSecretsを設定

最後に、deploymentのimagePullSecretsに作成したsecretを指定する。自分の場合、Kustomizeでローカル環境のみimagePullSecretsを設定したかったので、以下のようなpatchを書いた。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: target-deployment
spec:
  template:
    spec:
      imagePullSecrets:
      - name: gcr-puller

参考