メモです。
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
無事成功