시스템 아티팩트 수정

시스템 아티팩트는 Google Distributed Cloud (GDC) 에어 갭 적용 어플라이언스 시스템을 지원하고 GDC 배포를 관리합니다. GDC 비공개 Artifact Registry는 시스템 아티팩트를 저장합니다. 시스템 아티팩트에는 다음을 포함하되 이에 국한되지 않는 다양한 형식이 있습니다.

  • Anthos, KubeVirt, GDC 관리 서비스용 컨테이너 이미지
  • 운영체제 (OS) 이미지
  • 펌웨어 형식
  • 골든 가상 머신 (VM) 템플릿
  • Helm 차트

Artifact Registry는 안전하고 확장 가능하며 변조 방지 방식으로 설치, 업그레이드, 리소스 수명 주기와 같은 다양한 GDC 시스템 작업에 참여합니다.

시작하기 전에

시스템 아티팩트를 수정하려면 진단 액세스 권한을 얻어야 합니다. 진단 액세스는 고객이 문제를 겪을 때 안전하게 지원하는 데 필요한 권한 액세스 모드입니다. 이 액세스 권한을 부여받으려면 티켓을 만들어야 합니다.

Docker 이미지 업로드

시스템 아티팩트를 수정하려면 새 Docker 이미지를 업로드해야 합니다. 업로드 방법은 컨테이너 이미지를 푸시하는 다음 두 레지스트리 중 하나에 따라 달라집니다.

다음 섹션에서는 두 레지스트리 유형의 업로드 안내를 보여줍니다.

부트스트랩 머신의 Artifact Registry

부트스트랩 머신의 Artifact Registry에 컨테이너 이미지를 업로드하려면 다음 단계를 완료하세요.

  1. 호환성 문제가 해결된 수정된 Docker 이미지가 있는지 확인합니다.

  2. 에어갭 환경의 부트스트랩 노드로 새 이미지를 전송합니다.

  3. 부트스트랩 노드에 로그인합니다.

  4. 부트스트랩 시간에 부트스트랩 머신에서 Artifact Registry의 주소를 찾아 REGISTRY_IP 환경 변수로 설정합니다.

    REGISTRY=$(kubectl get harborcluster harbor -n harbor-system -o=jsonpath='{.spec.externalURL}')
    
    REGISTRY_IP=${REGISTRY#https://}
    
  5. Artifact Registry에 액세스하기 위한 사용자 인증 정보를 가져옵니다. 다음 명령어를 사용하여 관리자 계정과 비밀번호를 가져옵니다.

    ADMIN_PASS=$(kubectl -n harbor-system get secret harbor-admin \
        -o jsonpath="{.data.secret}" | base64 -d)
    
  6. Artifact Registry에 로그인합니다.

    docker login $REGISTRY_IP -u admin -p $ADMIN_PASS
    

    Artifact Registry에 성공적으로 로그인했는지 확인하기 위해 Login Succeeded 메시지가 출력됩니다.

  7. 새 이미지에 태그를 지정합니다.

    docker image tag CONTAINER_IMAGE_URL \
        $REGISTRY_IP/PROJECT_NAME/IMAGE_NAME:TAG
    

    다음을 바꿉니다.

    • CONTAINER_IMAGE_URL: 로컬 컨테이너 이미지 URL입니다(예: gcr.io/repository/image:tag).
    • PROJECT_NAME: Artifact Registry 프로젝트 이름입니다.
    • IMAGE_NAME: 컨테이너 이미지 이름입니다.
    • TAG: 컨테이너 이미지 태그입니다.
  8. 새 이미지를 Artifact Registry로 푸시합니다.

    docker image push $REGISTRY_IP/PROJECT_NAME/IMAGE_NAME:TAG
    

관리자 클러스터의 Artifact Registry

관리자 클러스터의 Artifact Registry에 컨테이너 이미지를 업로드하려면 다음 단계를 완료하세요.

  1. 호환성 문제가 해결된 수정된 Docker 이미지가 있는지 확인합니다.

  2. 새 이미지를 오프라인 환경의 관리자 클러스터에 루트 액세스 권한이 있고 루트 kubeconfig 파일이 있는 노드로 전송합니다.

  3. 관리자 클러스터 kubeconfig 파일 경로를 환경 변수로 내보냅니다.

    export ADMIN_CLUSTER_KUBECONFIG=KUBECONFIG_FILE_PATH
    

    KUBECONFIG_FILE_PATHkubeconfig 파일의 경로로 바꿉니다.

  4. 클러스터 내 Artifact Registry 주소를 찾아 REGISTRY_IP 환경 변수로 설정합니다.

    REGISTRY=$(kubectl --kubeconfig $ADMIN_CLUSTER_KUBECONFIG get harborcluster harbor -n harbor-system -o=jsonpath='{.spec.externalURL}')
    
    REGISTRY_IP=${REGISTRY#https://}
    
  5. REGISTRY_IP10.200.0.36:10443과 같은 유효한 URL이 포함되어 있는지 확인합니다.

    echo ${REGISTRY_IP}
    
  6. 인증 기관 (CA) 인증서가 있는지 확인합니다.

    ls -al /etc/docker/certs.d/${REGISTRY_IP}/ca.crt
    

    인증서가 없는 경우 인증서를 만들고 구성합니다.

    mkdir -p /etc/docker/certs.d/${REGISTRY_IP}/
    
    chmod 755  /etc/docker/certs.d/${REGISTRY_IP}/
    
    echo $(kubectl get secret harbor-cert-secret -n istio-system -o jsonpath='{.data.ca\.crt}' --kubeconfig $ADMIN_CLUSTER_KUBECONFIG) | openssl base64 -A -d >  /etc/docker/certs.d/${REGISTRY_IP}/ca.crt
    
    chmod 755  /etc/docker/certs.d/${REGISTRY_IP}/ca.crt
    
  7. Artifact Registry에 액세스하기 위한 사용자 인증 정보를 가져옵니다. 다음 명령어를 사용하여 관리자 계정과 비밀번호를 가져옵니다.

    ADMIN_PASS=$(kubectl --kubeconfig $ADMIN_CLUSTER_KUBECONFIG \
        -n harbor-system get secret harbor-admin \
        -o jsonpath="{.data.secret}" | base64 -d)
    
  8. Artifact Registry에 로그인합니다.

    docker login $REGISTRY_IP -u admin -p $ADMIN_PASS
    

    Artifact Registry에 성공적으로 로그인했는지 확인하기 위해 Login Succeeded 메시지가 출력됩니다.

  9. 새 이미지에 태그를 지정합니다.

    docker image tag CONTAINER_IMAGE_URL \
        $REGISTRY_IP/PROJECT_NAME/IMAGE_NAME:TAG
    

    다음을 바꿉니다.

    • CONTAINER_IMAGE_URL: 로컬 컨테이너 이미지 URL입니다(예: gcr.io/repository/image:tag).
    • PROJECT_NAME: Artifact Registry 프로젝트 이름입니다.
    • IMAGE_NAME: 컨테이너 이미지 이름입니다.
    • TAG: 컨테이너 이미지 태그입니다.
  10. 새 이미지를 Artifact Registry로 푸시합니다.

    docker image push $REGISTRY_IP/PROJECT_NAME/IMAGE_NAME:TAG