CentOS Stream 9
Sponsored Link

Kubernetes : Private Registry の設定2023/10/20

 

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

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

+----------------------+   +----------------------+
|   [ mgr.srv.world ]  |   |   [ dlp.srv.world ]  |
|     Manager Node     |   |     Control Plane    |
+-----------+----------+   +-----------+----------+
        eth0|10.0.0.25             eth0|10.0.0.30
            |                          |
------------+--------------------------+-----------
            |                          |
        eth0|10.0.0.51             eth0|10.0.0.52
+-----------+----------+   +-----------+----------+
| [ node01.srv.world ] |   | [ node02.srv.world ] |
|     Worker Node#1    |   |     Worker Node#2    |
+----------------------+   +----------------------+

[1]

Registry Pod を起動したいノードで こちらを参考に、認証有効 + HTTPS (正規の証明書) で Registry を起動しておきます
当例では Manager ノード上に Registry を起動します。

[2] 認証トークンを Kubernetes に登録します。
[root@mgr ~]#
podman ps

CONTAINER ID  IMAGE                         COMMAND               CREATED             STATUS             PORTS                   NAMES
de3fb2145bb3  docker.io/library/registry:2  /etc/docker/regis...  About a minute ago  Up About a minute  0.0.0.0:5000->5000/tcp  nifty_booth

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

[root@mgr ~]#
podman login mgr.srv.world:5000

Username:
serverworld

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

[root@mgr ~]#
ll /run/user/0/containers/auth.json

-rw-------. 1 root root 91 Oct 20 13:20 /run/user/0/containers/auth.json
# ファイルを BASE64 エンコード

[root@mgr ~]#
cat /run/user/0/containers/auth.json | base64

ewoJImF1dGhzIjogewoJCSJjdHJsLnNy.....
[root@mgr ~]#
vi regcred.yml
# 新規作成

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

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

[root@mgr ~]#
kubectl apply -f regcred.yml

secret "regcred" created
[root@mgr ~]#
kubectl get secrets

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

REPOSITORY                  TAG          IMAGE ID      CREATED      SIZE
quay.io/centos/centos       stream9      0dc5b436b6ca  2 days ago   160 MB
mgr.srv.world:5000/nginx    my-registry  bc649bab30d1  8 days ago   191 MB
docker.io/library/registry  2            0ae1560ca86f  2 weeks ago  26 MB

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

[root@mgr ~]#
kubectl apply -f private-nginx.yml

pod "private-nginx" created
[root@mgr ~]#
kubectl get pods

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

[root@mgr ~]#
kubectl describe pods private-nginx

Name:             private-nginx
Namespace:        default
Priority:         0
Service Account:  default
Node:             node02.srv.world/10.0.0.52
Start Time:       Fri, 20 Oct 2023 13:28:22 +0900
Labels:           <none>
Annotations:      cni.projectcalico.org/containerID: 12faabd4ee02acbaf7683e147912bd15c94a1d4dc15280e871135f8c698734b6
                  cni.projectcalico.org/podIP: 192.168.241.137/32
                  cni.projectcalico.org/podIPs: 192.168.241.137/32
Status:           Running
IP:               192.168.241.137
IPs:
  IP:  192.168.241.137
Containers:
  private-nginx:
    Container ID:   cri-o://0aea8f2a9eeefa43d2c2affacd09aecc89aa38dced40e845f48f1df9bfe07350
    Image:          mgr.srv.world:5000/nginx:my-registry
    Image ID:       mgr.srv.world:5000/nginx@sha256:3a12fc354e3c4dd62196a809e52a5d2f8f385b52fcc62145b0efec5954bb8fa1
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Fri, 20 Oct 2023 13:28:24 +0900
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-vlncf (ro)
.....
.....
関連コンテンツ