privateなdockerレジストリからdocker image pullする時に困ったので手順を書き残しておく
AWS ecr上にあるimageをpullする時、当然だが普通にpullすると認証ではじかれる
kubernetesにsecretとかいうものを設定しなければならない
環境
- macOS: 10.12.6
- minikube: v0.19.1
- kubernetes: v1.6.4
1. kubernetesのsecret作成
概ね下のコマンドを参考にした https://github.com/whereisaaron/kubernetes-aws-scripts/blob/master/create-ecr-imagepullsecret.sh
create-ecr-imagepullsecret.sh
#
# Fetch token (which will expire in 12 hours)
#
TOKEN=`aws ecr --region=$REGION --profile $PROFILE get-authorization-token --registry-ids $ACCOUNT --output text --query authorizationData[].authorizationToken | base64 -D | cut -d: -f2`
#
# Create or repleace registry secret
#
kubectl delete secret --ignore-not-found $SECRET_NAME
kubectl create secret docker-registry $SECRET_NAME \
--docker-server=https://${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com \
--docker-username=AWS \
--docker-password="${TOKEN}" \
--docker-email="${EMAIL}"
12時間でtokenが期限切れになるので 毎回secretを削除&作成しなければならない・・・
もうちょっとうまいやり方がありそうだけど・・・
2. kubernetesのconfigでimagePullSecrets設定する
1.で作成したsecretを書いておく
pod.yml
apiVersion: v1
kind: Pod
metadata:
name: from-ecr
spec:
imagePullSecrets:
- name: $SECRET_NAME
containers:
- name: from-ecr
image: $ACCOUNT.dkr.ecr.$REGION.amazonaws.com/$IMAGE_NAME:$TAG
imagePullPolicy: Always
3. podの作成
各変数を設定し、
- 2.で作成したファイルを使って
chmod +x create-ecr-imagepullsecret.sh
./create-ecr-imagepullsecret.sh
kubectl create -f pod.yml
を実行すればpodが作成される
おまけ(設定する変数の説明)
- PROFILE:awscliで使用するプロファイル。ercからdocker image pullする権限があるprofileを指定する
- ACCOUNT:ecrのurl先頭にある数値列。おそらくレジストリに対して固有のもの
- REGION:awsのregion。ap-northeast-1など
- SECRET_NAME:kubernetesに登録するsecretの名前(任意の文字列)
- EMAIL:eメールアドレス(なんでもいいのかな?試してない)
- TAG:ecrに登録しているdocker imageのtag名