json key file を認証情報として docker desktop の kubernetes で gcr から image を pull 出来るようにする。
json key file の作成
サービスアカウントの json key file は有効な認証情報なのでこちらを gcp console からダウンロードする。
secretの作成
gcr から docker image を pull するとき、認証情報として json key file を使用することを secret名 gcr-json-key として kubernetes に教える。
kubectl create secret docker-registry gcr-json-key \
--docker-server=<your-registry-server> \
--docker-username=<your-name> \
--docker-password=<your-pword> -\
-docker-email=<your-email>
オプションは下記の通り:
-
<your-registry-server>
:private docker registry のFQDN -
<your-name>
: docker username -
<your-pword>
: docker password -
<your-email>
: docker email
gcrの場合は下記のようになる
-
<your-registry-server
: https://gcr.io -
<your-name>
: __json_key 固定値 -
<your-pword>
: json key file を cat した文字列 -
<your-email>
: サービスアカウントのメールアドレス
例:
kubectl --namespace=$NAMESPACE create secret docker-registry gcr-json-key \
--docker-server=https://gcr.io \
--docker-username=_json_key \
--docker-password="$(cat $PATH_TO_JSON)" \
--docker-email="$MAIL_ADDRESS" \
作成したsecretの確認
> kubectl get secret --namespace=$NAMESPACE
NAME TYPE DATA AGE
gcr-json-key kubernetes.io/dockerconfigjson 1 19d
serviceaccountから認証用secretを参照
デフォルトのサービスアカウントに ImagePullSecret
として secret に登録する。
kubectl --namespace=$NAMESPACE patch serviceaccount default -p '{"imagePullSecrets": [{"name": "gcr-json-key"}]}'
単一のpodからsecretを参照する
特定のpodだけ使用したい場合はyamlファイルにsecret参照を追加する
apiVersion: v1
kind: Pod
metadata:
name: empty-debian
spec:
containers:
- name: empty-debian-container
image: eu.gcr.io/lian-empty-project/empty-debian-container
imagePullSecrets:
- name: gcr-secret