LoginSignup
2
1

More than 3 years have passed since last update.

[k8s]DockerHub の PrivateRegistry のイメージを Pod で利用する時のメモ

Posted at

メモです。

DockerHub の PrivateRegistry を使う時の方法について確認した時のメモで以下を参考にやってみた

Pull an Image from a Private Registry

環境

$kubectl version
Client Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.6-beta.0", GitCommit:"e7f962ba86f4ce7033828210ca3556393c377bcc", GitTreeState:"clean", BuildDate:"2020-01-15T08:26:26Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"15+", GitVersion:"v1.15.11-eks-af3caf", GitCommit:"af3caf6136cd355f467083651cc1010a499f59b1", GitTreeState:"clean", BuildDate:"2020-03-27T21:51:36Z", GoVersion:"go1.12.17", Compiler:"gc", Platform:"linux/amd64"}

前提確認

DockerHub の PrivateRegistry について確認する。

# PrivateRegistry なので認証なしでは Pull 出来ない
$docker pull toshihirock/privatenginx
Using default tag: latest
Error response from daemon: pull access denied for toshihirock/privatenginx, repository does not exist or may require 'docker login'

# docker login する
$docker login

# pull 出来た
$docker pull toshihirock/privatenginx

こんな感じ。
k8s でも確認。

# 応答がなくなる
$kubectl run -i private-test --image=toshihirock/privatenginx --generator=run-pod/v1 --rm --restart=Never --command -- echo 'hi'

# 別ウィンドウで見ると以下のように ImagePullBackOff になっている
$kubectl get pods |grep private-test
private-test                        0/1     ImagePullBackOff   0

やってみる

kubernetes.io/dockerconfigjson type のシークレットを作る

k8s で DockerHub の PrivateRegistry のイメージを使う方法として認証情報を予め kubernetes.io/dockerconfigjson タイプの `Secret として作成しておき、利用する方法がある。
docker login コマンドが成功している場合 ~/.docker/config.json に認証時に必要な設定があるのでこれを使う。

# ファイルの確認
$ cat ~/.docker/config.json
{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "xxxx"
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.06.1-ce (linux)"
        }
}

# json から kubernetes.io/dockerconfigjson タイプの Secret を作成
$kubectl create secret generic regcred \
    --from-file=.dockerconfigjson=<path/to/.docker/config.json> \
    --type=kubernetes.io/dockerconfigjson

Pod を起動してみる

kubectl run コマンドのオプションで imagePullSecrets の指定はできなさそうなのでマニュフェストを作って検証する。

# ある程度のテンプレを作る
$kubectl run private-test --image=toshihirock/privatenginx --generator=run-pod/v1 --restart=Never --dry-run -o yaml --command -- echo 'hi' > private-test.yaml

imagePullSecrets を追加して作成した Secret の regcred を指定する。
マニュフェストはこんな感じ。

private-test.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: private-test
  name: private-test
spec:
  imagePullSecrets:
  - name: regcred
  containers:
  - command:
    - echo
    - hi
    image: toshihirock/privatenginx
    name: private-test
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

やってみる。

# マニュフェストを適用し、Pod の作成
$kubectl apply -f private-test.yaml

#  Pod の確認
$kubectl get pods |grep private-test
private-test                        0/1     Completed          0          100s

# echo 文が実行されていることを確認
$kubectl logs private-test
hi

無事成功

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1