Help us understand the problem. What is going on with this article?

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 にデプロイした時はおそらく発生しない。 

hidekuro
雑食。私がQiitaで公開する独自コードは、特に記載がない限り CC0 https://creativecommons.org/publicdomain/zero/1.0/deed.ja とします。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away