이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

클라우드/containerD

02. ContainerD private Registry image pull

이쿠우우 2022. 1. 13. 21:36
반응형
 

ContainerD private Registry image pull

 

 

목표

 
harbor private registry에 있는 image를 containerD를 통해 pull 받아보는 과정을 정리.
harbor private registry는 https 설정이 되어있음.
 

 

Test 환경

 
[private registry server ]
OS : CentOS 7.5
IP : 10.0.2.5
domain : iksoon.registry.com
Harbor version : 2.4.1
push 되어있는 image 항목 : iksoon.registry.com/testproject/tomcat:1.0.0
 
[containerD server]
OS : CentOS 7.5
IP : 10.0.2.4
containerD version : 1.4.12
 
 

 

containerD에서 image pull 오류 상태 확인

 
containerD 초기 상태.
private registry에서 images를 pull해봄.
 
[결과]
추가 설정 없이 image pull을 하게 되면
인증관련 오류가 발생하며 image pull이 되지 않음.
해당 문제를 해결해보도록 함
 
[crictl 을 사용한 경우]

 

 

containerD private registry 설정

 

private registry dns name 설정

/etc/hosts 파일에 private registry domain 추가
에) 10.0.2.5 iksoon.registry.com
 

containerd 설정 파일 확인

[containerD 설정 파일]
/etc/containerd/config.toml
해당 파일 내용을 수정해서 private registry를 등록해야함.
만약 /etc/containerd/config.toml 파일이 없거나 내용이 없다면
containerd config default > /etc/containerd/config.toml
명령으로 설정파일 생성해줘야함.
 
 

private registry 주소 등록

 

/etc/containerd/config.toml 파일 수정
 
[plugins."io.containerd.grpc.v1.cri".registry]
항목 하위의 mirrors 설정이 private registry 주소 등록하는 부분임.
 
아래 그림과 같은 부분에 private registry 주소를 넣어줌.
예제에서 private registry 주소 = iksoon.registry.com 
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."iksoon.registry.com"]
          endpoint = ["https://iksoon.registry.com"]
 
 

private registry 접속 id, password 설정

 
[plugins."io.containerd.grpc.v1.cri".registry]
항목 하위에
[plugins."io.containerd.grpc.v1.cri".registry.configs]
를 추가함. 해당 항목으로 registry 환경설정을 할 수 있음.
그리고 해당 항목 하위의 auth 설정이 private registry 접속 id,pw 설정임.
 
예제에서 harbor registry 접속 id,pw는 admin, Harbor12345 임.
아래와 같이 추가
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
        [plugins."io.containerd.grpc.v1.cri".registry.configs."iksoon.registry.com".auth]
          username = "admin"
          password = "Harbor12345"
 

private registry 접속 https 인증(tls) 설정

 
[plugins."io.containerd.grpc.v1.cri".registry]
항목 하위에
[plugins."io.containerd.grpc.v1.cri".registry.configs]
를 추가함. 해당 항목으로 registry 환경설정을 할 수 있음.
그리고 해당 항목 하위의 tls 설정이 private registry 접속 id,pw 설정임.
 
[tls 인증서 설정] 
Harbor 서버 구축 시 사용했던 key들을 가져와서 아래와 같이 설정함.
각 키의 경로를 넣어줘야함.
        [plugins."io.containerd.grpc.v1.cri".registry.configs."iksoon.registry.com".tls]
          ca_file = "/root/certs/ca.crt"
          cert_file = "/root/certs/server.cert"
          key_file = "/root/certs/server.key"
 

 
[tls 설정을 제외하는 경우] 
insecure_skip_verify = true 설정을 추가함.
아래와 같이 추가
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
        [plugins."io.containerd.grpc.v1.cri".registry.configs."iksoon.registry.com".tls]
          insecure_skip_verify = true
 
 

설정 파일 최종 상태 

    [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."iksoon.registry.com"]
          endpoint = ["https://iksoon.registry.com"]
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
        [plugins."io.containerd.grpc.v1.cri".registry.configs."iksoon.registry.com".auth]
          username = "admin"
          password = "Harbor12345"
        [plugins."io.containerd.grpc.v1.cri".registry.configs."iksoon.registry.com".tls]
          ca_file = "/root/certs/ca.crt"
          cert_file = "/root/certs/server.cert"
          key_file = "/root/certs/server.key"
 
 

containerD restart

systemctl restart containerd

 

 

결과 확인

harbor private registry로 부터 정상적으로 images 를 받아옴.

 

주의

containerD cli 사용시 crictl 이 아닌 ctr을 사용할 경우 해당 설정이 적용되지 않음.
 

이유

/etc/containerd/config.toml
ctr 명령어가 containerd 프로세스와 상호작용하지만 
containerd 의 설정파일(수정하지 않은 경우 기본값. /etc/contaienrd/config.toml) 자체는 
ctr 과 연관이 없음. 
 

해결책

ctr의 경우 
또 docker와 달리 별도의 로그인 명령을 지원하지 않으므로 
ctr로 이미지를 pull, push 할 경우 명령어에 계정 정보를 입력 해줘야함. 
또한 private registry 를 사용하는데 https를 지원하지 않는 경우에는 
'--plain-http' 플래그가 필요함.
ctr images pull --user USERID:PASSWORD IMAGE_PATH
와 같이 별도의 명령어를 적용해줘야함.
 

 
참고
 

 

반응형

'클라우드 > containerD' 카테고리의 다른 글

01. ContainerD crictl tool 설치  (0) 2022.01.09
00. containerd 설치  (2) 2021.10.05