본문 바로가기
kubenetes

kubernetes에서 private harbor 이미지 pull 하는 방법

by kyeongseo.oh 2024. 9. 4.

CONTAINER-RUNTIME으로 containerd을 사용중이며, private container registry에서 이미지 pull 시 tls 에러가 나는 현상이 발생하여, 이를 해결하는 과정을 정리한다.

pod가 어느 노드에서 생성될 지 알 수 없기 때문에 아래 과정은 모든 kubernetes worker에서 진행해야 한다.

 

1. hosts 파일 수정

/etc/hosts에 harbor의 hostname과 ip를 작성한다.

10.0.1.117 registry.dd.io

2. Docker 인증서 디렉토리에 인증서 추가

`/etc/docker/certs.d/registry.dd.io/` 디렉토리에 harbor 레지스트리 서버의 ca.crt 파일을 추가한다.

`/registry.dd.io` 디렉토리는 실제 harbor 레지스트리의 FQDN으로, 디렉토리가 없다면 생성 후 ca.crt를 넣어준다.

mkdir -p /etc/docker/certs.d/registry.dd.io/
cp ca.crt /etc/docker/certs.d/registry.dd.io/

3.  시스템 인증서 저장소에 인증서 추가

`/etc/pki/ca-trust/source/anchors/`에 harbor 레지스트리 서버의 ca.crt 파일을 추가한다.

그 후 `update-ca-trust` 명령을 실행하여 시스템 인증서 저장소를 업데이트한다.

cp ca.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust

4. Containerd 설정

`containerd config default > /etc/containerd/config.toml` 명령으로 기본 설정 파일을 생성한다.

그 후 config.toml 파일에 private registry 관련 설정을 추가한다. 151번 라인을 수정했다.

아래에서 `registry.dd.io`를 개인이 사용중인 private cr 주소로 변경해주면 된다.

username과 password 또한 적절히 변경한다.

      [plugins."io.containerd.grpc.v1.cri".registry.configs]
        [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.dd.io".auth]
          username = "admin"
          password = "Changeme$9"

      [plugins."io.containerd.grpc.v1.cri".registry.headers]

      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.dd.io"]
          endpoint = ["https://registry.dd.io"]

 

5. crictl 설정

crictl이 containerd와 통신할 수 있도록 설정한다.

cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 0
debug: false
pull-image-on-create: false
EOF

 

6. Containerd 서비스 재시작

systemctl restart containerd

 

7. private cr에서 image pull 테스트

crictl을 사용해 image pull을 테스트한다.

[root@kw2 ~]# crictl pull registry.dd.io/shared/nginx
Image is up to date for sha256:5ef79149e0ec84a7a9f9284c3f91aa3c20608f8391f5445eabe92ef07dbda03c

댓글