Edited at

minikube内からECR/GCR/プライベートレジストリにあるイメージをpullする

More than 1 year has passed since last update.


課題

minikube にデプロイする Deployment のコンテナイメージに gcr.io に置いてるモノを指定した時にこんなエラーが出た。

Failed to pull image "gcr.io/your-project/your-image:your-tag": rpc error: code = Unknown 

desc = Error response from daemon: pull access denied for gcr.io/your-project/your-image, repository does not exist or may require 'docker login'

gcr.io からの pull 時に認証で弾かれている。 1


対応

k8s 的には、次の設定がされればOK。

手動でやると大変だが、 minikube の registry-creds アドオン を使えば簡単に適用してくれる。

まずはアドオンを有効化する。

$ minikube addons enable registry-creds

続けて認証設定をする。

ECR / GCR / Docker プライベートレジストリの3つに対応しており、それぞれ設定方法が異なる。

下記は GCR から pull できるようにする例。

アプリケーションデフォルト認証情報ファイルを使うので、まだ作成していない場合は

$ gcloud auth application-default login

で生成しておく。

生成したらアドオンの設定を更新する。

$ minikube addons configure registry-creds

Do you want to enable AWS Elastic Container Registry? [y/n]: n

Do you want to enable Google Container Registry? [y/n]: y
-- Enter path to credentials (e.g. /home/user/.config/gcloud/application_default_credentials.json):[application_default_credentials.jsonのフルパス]
-- Do you want to change the GCR URL (Default https://gcr.io)? [y/n]: n

Do you want to enable Docker Registry? [y/n]: n
registry-creds was successfully configured

これで minikube 内に Pod が生成される時、 gcr.io に置いたイメージも pull できるようになる。

minikube dashboard からシークレットを確認してみると、アドオンで設定した認証情報が登録されている。


以上





  1. 正確には アプリケーションのデフォルト認証情報(ADC) が通っていない。GCE / GKE / GAE / Cloud Function からの場合は暗黙的に認証情報が検出されるとあるので、 GKE にデプロイした時はおそらく発生しない。