Debian 12 bookworm
Sponsored Link

Kubernetes : Private Registry の設定2023/07/28

 

自身の Private Registry からコンテナーイメージを Pull できるよう設定します。

当例では以下のように 3 台のノードを使用して Kubernetes クラスターを構成しています。

-----------+---------------------------+--------------------------+------------
           |                           |                          |
       eth0|10.0.0.25              eth0|10.0.0.71             eth0|10.0.0.72
+----------+-----------+   +-----------+-----------+   +-----------+-----------+
|  [ ctrl.srv.world ]  |   |  [snode01.srv.world]  |   |  [snode02.srv.world]  |
|     Control Plane    |   |      Worker Node      |   |      Worker Node      |
+----------------------+   +-----------------------+   +-----------------------+

[1]
Registry Pod を起動したいノードで こちらを参考に、認証有効 + HTTPS (正規の証明書) で Registry を起動しておきます
当例では Control Plane ノード上に Registry を起動します。
[2] 認証トークンを Kubernetes に登録します。
root@ctrl:~#
podman ps

CONTAINER ID  IMAGE                         COMMAND               CREATED         STATUS             PORTS                   NAMES
551b0044ab60  docker.io/library/registry:2  /etc/docker/regis...  15 seconds ago  Up 15 seconds ago  0.0.0.0:5000->5000/tcp  trusting_yalow

# 任意のユーザーで Registry にログイン

root@ctrl:~#
podman login ctrl.srv.world:5000

Username:
debian

Password:
Login Succeeded!
# ログインすると下記ファイルが生成される

root@ctrl:~#
ll /run/user/0/containers/auth.json

-rw------- 1 root root 83 Jul 28 00:30 /run/user/0/containers/auth.json
# ファイルを BASE64 エンコード

root@ctrl:~#
cat /run/user/0/containers/auth.json | base64

ewoJImF1dGhzIjogewoJCSJjdHJsLnNy.....
root@ctrl:~#
vi regcred.yml
# 新規作成

# [.dockerconfigjson] 行に BASE64 エンコードで表示された内容を一行にして貼り付け

apiVersion: v1
kind: Secret
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJjdHJsLnNy.....
metadata:
  name: regcred
type: kubernetes.io/dockerconfigjson

root@ctrl:~#
kubectl apply -f regcred.yml

secret "regcred" created
root@ctrl:~#
kubectl get secrets

NAME      TYPE                             DATA   AGE
regcred   kubernetes.io/dockerconfigjson   1      4s
[3] Private Registry から Pull するには 登録した Secret と Private Registry の image を指定して Pod をデプロイします。
root@ctrl:~#
podman images

REPOSITORY                  TAG          IMAGE ID      CREATED      SIZE
docker.io/library/nginx     latest       89da1fb6dcb9  3 hours ago  191 MB
ctrl.srv.world:5000/nginx   my-registry  89da1fb6dcb9  3 hours ago  191 MB
docker.io/library/registry  2            4bb5ea59f8e0  6 weeks ago  24.6 MB

root@ctrl:~#
vi private-nginx.yml
apiVersion: v1
kind: Pod
metadata:
  name: private-nginx
spec:
  containers:
  - name: private-nginx
    # Private Registry の image
    image: ctrl.srv.world:5000/nginx:my-registry
  imagePullSecrets:
  # 登録した Secret 名
  - name: regcred

root@ctrl:~#
kubectl apply -f private-nginx.yml

pod "private-nginx" created
root@ctrl:~#
kubectl get pods

NAME            READY   STATUS    RESTARTS   AGE
private-nginx   1/1     Running   0          8s

root@ctrl:~#
kubectl describe pods private-nginx

Name:             private-nginx
Namespace:        default
Priority:         0
Service Account:  default
Node:             snode02.srv.world/10.0.0.72
Start Time:       Fri, 28 Jul 2023 00:37:05 -0500
Labels:           <none>
Annotations:      cni.projectcalico.org/containerID: 66ed5e1eda39db0df3c2b7ece965fb2a6021ab8321eb25ca4f6f06d1783acf27
                  cni.projectcalico.org/podIP: 192.168.211.133/32
                  cni.projectcalico.org/podIPs: 192.168.211.133/32
Status:           Running
IP:               192.168.211.133
IPs:
  IP:  192.168.211.133
Containers:
  private-nginx:
    Container ID:   containerd://b7358c3d60d6ed43a3fcca35248fbe04b70521973d23c1f573fbf94d16166a7c
    Image:          ctrl.srv.world:5000/nginx:my-registry
    Image ID:       ctrl.srv.world:5000/nginx@sha256:a126fb9d849c27d0dffa6d6a3b2b407d1184042f8291b8369579d8cd2b325db0
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Fri, 28 Jul 2023 00:37:06 -0500
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-cf6pg (ro)
.....
.....
関連コンテンツ