반응형
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 을 사용한 경우]
crictl pull iksoon.registry.com/testproject/tomcat:1.0.0
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 |