Ops/Kubernetes

[K8S] Containerd에 Registry 설정하기 ( with Harbor )

록흐 2025. 6. 4. 18:43
반응형

 

Containerd로 생성된 컨테이너가 특정 Registry에서 이미지를 가져오도록 설정해보자. 

 

 

https://github.com/containerd/containerd/blob/main/docs/cri/registry.md#using-self-signed-certificates

 

containerd/docs/cri/registry.md at main · containerd/containerd

An open and reliable container runtime. Contribute to containerd/containerd development by creating an account on GitHub.

github.com

 

 

공식문서에는 deprecated된 방법이 메인으로 작성되어 있어서 혼란이 있을 수 있다. 공식문서 상단에 명시된 방법으로 Registry를 설정해야 한다.

 

 

Deprecated 된 방식 ( 예시 )

[plugins."io.containerd.grpc.v1.cri".registry]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
      endpoint = ["https://registry-1.docker.io"]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
      endpoint = ["https://gcr.io"]
  [plugins."io.containerd.grpc.v1.cri".registry.configs]
    [plugins."io.containerd.grpc.v1.cri".registry.configs."gcr.io".auth]
      username = "_json_key"
      password = 'paste output from jq'

 

 

deprecated된 방식은 containerd의 /etc/containerd/config.toml에 직접 설정해주는 방식이다. 이와 같이 직접 설정하면 관리가 어려우므로 개선된 방식으로 설정해보자. 

 

 

개선된 방식 

 

/etc/containerd/config.toml에 "/etc/containerd/certs.d" 경로 설정하기

[plugins."io.containerd.grpc.v1.cri".registry]
   config_path = "/etc/containerd/certs.d"

 

/etc/containerd/config.toml에 config_path 값으로 "/etc/containerd/certs.d"  경로만 설정하면 된다. ( 다른 설정 X )

 

 

certs.d 디렉토리 생성하기

root@test-205:/etc/containerd$ ls -rlt
total 16
-rw-r--r-- 1 root root 8410 May 15 04:34 config.toml
drwxr-xr-x 3 root root 4096 May 15 04:34 certs.d

 

 

certs.d 디렉토리 아래에 특정 registry 전용 디렉토리 생성하기 

root@test-205:/etc/containerd/certs.d$ ls -rlt
total 4
drwxr-xr-x 2 root root 4096 May 15 04:34 harbor.mingu.com
drwxr-xr-x 2 root root 4096 Jun  4 09:36 192.168.12.34:5000

 

registry의 url이나 ip 및 포트로 디렉토리를 생성한다. 

 

 

hosts.toml 파일 생성하기 

root@test-205:/etc/containerd/certs.d/harbor.mingu.com$ cat  hosts.toml
server = "https://harbor.mingu.com"

[host."https://harbor.mingu.com"]
 capabilities = ["pull", "resolve"]
 skip_verify = true
 [host."https://harbor.mingu.com".header]
  authorization = "Basic aW5mcmEwewqqwe6VDdqwewnqazI5TG1Rdw=="

 

 

registry와 containerd가 어떤 작업을 할건지(pull, resolve), TLS 검증은 skip할 건지, 이미지가 저장된 레지스트리에 접근할 수 있는 권한을 가진 토큰은 무엇인지를 설정한다.

 

자세한 설정 방법은 아래 공식문서를 참고하면 된다.

https://github.com/containerd/containerd/blob/main/docs/hosts.md

 

 

containerd 재시작하기

sudo systemctl restart containerd

 

 

 

참고자료

https://github.com/containerd/containerd/discussions/6468

https://github.com/containerd/containerd/blob/main/docs/hosts.md

https://github.com/containerd/containerd/blob/main/docs/cri/registry.md#using-self-signed-certificates

https://github.com/containerd/cri/blob/release/1.4/docs/registry.md

반응형