EKSを運用しているとAWS管理のECRから最新のkube-proxyやcorednsのイメージを取得したいという状況があったのですが、自分が管理していないアカウントのコンテナレジストリからイメージを取得する方法がわからなかったので調べてまとめました。

方法

まずは結果から、以下のような感じで対象アカウントを指定してログインを行い、イメージをpullする事で目的のイメージが存在しているかを確認する事ができます。

# アカウントIDが602401143452のECRへローカルのhogeプロファイルを使ってログイン
$(aws --profile hoge ecr get-login --no-include-email --region ap-northeast-1 --registry-ids 602401143452)

# 目的のイメージをpull
docker pull 602401143452.dkr.ecr.ap-northeast-1.amazonaws.com/eks/kube-proxy:v1.13.8

通常自己管理のECRからイメージを取得する際はわざわざアカウントを指定する必要はないのですが、今回のように他のアカウントからクロスアカウントでイメージをpullしたりする時には --registry-ids オプションでアカウントIDを指定する事で実際にリポジトリからイメージをローカルに落としてくることができました。

EKSのクラスターアップデートの際などにkube-proxyやcorednsのバージョンを上げる場合は、AWS公式ドキュメントに沿ってオペレーションを行うと us-west-2 にあるイメージを使う事になってしまうので、事前にEKSが立っているリージョンのイメージがあるか調べて、存在するのであれば同リージョンのECRのイメージを使うと良いと思います。

まとめ

クロスアカウントでECRからコンテナイメージをpullする場合は --registry-ids オプションを使ってECRヘログインする。