Container Registry Migration

Container Registry Migration

개요

  • SCP(Samsung Cloud Platform) 의 Container Registry 에 위치한 Container Image를 SCP V2로 이전하기 위한 Skopeo 사용에 대한 절차와 작업을 안내합니다.
  • Skopeo는 Container Registry 간에 Container Image를 다운로드하지 않고 직접 복사할 수 있는 CLI 도구입니다.

제약사항

  • Skopeo는 Container Image 자체만 복사하며, 연관된 메타데이터나 빌드 기록은 포함되지 않습니다.
  • 인증이 필요한 Container Registry의 경우 로그인 정보 또는 인증 토큰이 사전에 필요합니다.
  • 복제 대상이 되는 레지스트리에 접근할 수 있도록 설정이 필요합니다.
  • 이미지가 대량일 경우 복사 속도에 영향을 줄 수 있습니다.

사전작업

  • Skopeo 작업을 위한 Bastion Host(OS:Ubuntu 24.04 / vCPU:2Cores, Memory: 4GB 권고) 필요

  • Skopeo 설치

    sudo apt-get install skopeo
    
  • 방화벽/Security Group

    • Bastion Host에서 SCP/SCP v2의 Container Regstry에 접속할 수 있도록 접속/인증 경로 통신이 가능하게 합니다(443 Port).
  • 소스/타켓 Registry 접근을 위한 인증키 발급

    • SCP v2 환경
      • SCP v2의 Object storage는 접근 권한이 있는 사용자의 access key를 발급하여 사용할 수 있습니다.
        1. All Services > Management > IAM 메뉴를 클릭합니다.
        2. My Info. 메뉴를 클릭하고 Authentication Key Management 탭을 클릭합니다.
        3. 인증키를 사용하기 위해 Security settings를 수정합니다.
        4. Security settings의 Update 버튼을 클릭합니다.
        5. Edit security settings 화면에서 Authentication method 항목을 Auth key로 선택합니다.
        6. OK 버튼을 클릭하여 저장합니다.
          • IP access control을 사용하면 인증키를 사용할 수 있는 IP를 제한할 수 있습니다.
          • Enable로 설정할 경우 V1 SKE의 worker nodes, V2 SKE의 worker nodes의 IP 주소를 반드시 포함하여야 합니다.
        7. Authentication key management 탭 화면에서 Create auth key 버튼을 클릭합니다.
        8. Expiration period에는 Permanent로 체크하고, Purpose에는 적당한 문구를 입력합니다.
        9. OK 버튼을 클릭하여 생성합니다.
        10. access key와 secret key를 확인하기 위해 생성한 인증 키를 클릭하여 확인합니다.
        11. Auth key의 View 버튼을 클릭합니다.
        12. 콘솔 계정의 비밀번호를 입력한 다음 OK 버튼을 클릭합니다.
        13. Access key와 Secret key를 복사한 다음 메모장 등에 기록합니다.
    • SCP 환경
      • SCP 환경에서는 사용자 정보 설정에서 비슷한 방식으로 accesskey와 secretkey를 확인할 수 있습니다.
  • 접근제어 등록

    • SCP와 SCP v2환경의 Registry에 접속하기 위해서는 Registry 상세 정보에 있는 접근제어에 Bastion Host를 등록해줘야 합니다.
    • v1→ v2 또는 v1 ← v2 Registry를 VPC Endpoint를 활용하여 접속할 경우, 프라이빗 접근 허용 리소스 추가 > VPC Endpoint에서 해당 VPC Endpoint를 추가해주어야합니다.

Container Registry 마이그레이션 절차

1. 인증을 위한 파일 생성: Registry 접속용

  • SCP SCR과 SCP v2 SCR에 접근하기 위해 auth.json 파일을 구성합니다.
v1_registry='<v1 registry URL>'
v1_accesskey='<v1 accesskey>'
v1_secretkey='<v1 secretkey>'
v1_auth_b64=$(printf '%s:%s' "$v1_accesskey" "$v1_secretkey" | base64 -w 0)

v2_registry='<v2 registry URL>'
v2_accesskey='<v2 accesskey>'
v2_secretkey='<v2 secretkey>'
v2_auth_b64=$(printf '%s:%s' "$v2_accesskey" "$v2_secretkey" | base64 -w 0)

cat <<EOF > auth.json
{
  "auths": {
    "$v1_registry": {
      "auth": "$v1_auth_b64"
    },
    "$v2_registry": {
      "auth": "$v2_auth_b64"
    }
  }
}
EOF
* Registry URL, accesskey와 secretkey를 실제 값으로 변경 후 사용

2. 로그인 확인

skopeo login <v1 registry URL> --authfile auth.json
skopeo login <v2 registry URL> --authfile auth.json

3. 이미지 정보 조회

skopeo inspect docker://<Source Registry 주소>/<Source Image 명> --authfile auth.json
* SCP v2환경에서는 <Registry 주소>/<Repository 명>/<Image 명>을 사용함

4. 이미지 복사 명령 실행

skopeo copy docker://<Source Registry 주소>/<Source Image 명>:<Source Tag 명> docker://<Target Registry 주소>/<Target Image 명>:<Target Tag 명> --authfile auth.json

Note

포맷 종류설명
container-storage:podman, cri-o, buildah 등에서 사용하는 로컬 컨테이너 이미지 저장소
docker://도커 레지스트리
dir:로컬 디렉토리
docker-archive:docker save 등으로 만들어진 이미지 파일
docker-daemon:docker daemon 내부에 저장된 이미지
oci:OCI
oci-archive:OCI 파일

5. 이미지 확인

skopeo inspect docker://<Target Registry 주소>/<Target Image 명>:<Target Tag 명> --authfile auth.json