Artifact Registry를 워크로드 이미지의 비공개 레지스트리로 사용

이 페이지에서는 VMware용 Google Distributed Cloud (소프트웨어만 해당) 관리자 클러스터가 Google의 Artifact Registry를 워크로드 이미지를 저장할 수 있는 비공개 Docker 레지스트리로 사용하도록 구성하는 방법을 설명합니다. 워크로드 이미지를 저장하도록 비공개 레지스트리를 구성하면 클러스터를 만들거나 업그레이드할 때 Google Distributed Cloud 시스템 이미지도 비공개 레지스트리에 저장됩니다.

Artifact Registry는 여러 가지 인증 방법을 지원하지만 Artifact Registry를 비공개 저장소로 사용하려면 인증에 서비스 계정 키를 사용해야 합니다. 이 페이지의 단계에서는 관리자 클러스터 구성 파일의 privateRegistry 섹션에 필요한 주소, 사용자 인증 정보, CA 인증서를 가져오는 방법을 설명합니다.

사용자 인증 정보 파일 구성

  1. 레지스트리에 대한 인증을 구성하지 않은 경우 Docker용 Artifact Registry에 대한 인증 구성의 단계에 따라 서비스 계정을 사용하여 인증을 구성합니다. 인증에는 JSON 키 파일이 있는 서비스 계정을 사용해야 합니다.

  2. 다음 예와 같이 사용자 인증 정보 구성 파일 admin-creds.yaml을 만듭니다. username"_json_key"여야 합니다. name 필드에는 privateRegistry.entry 필드에 추가할 값과 일치하는 값을 사용할 수 있습니다.

    apiVersion: v1
    kind: "CredentialFile"
    items:
    - name: "private-registry-creds"
      username: "_json_key"
      password:
    
  3. 레지스트리의 서비스 계정에 대한 JSON 키 파일이 있는 디렉터리에서 키 파일에서 cat를 실행하여 콘텐츠를 출력합니다.

  4. 전체 JSON 키 콘텐츠를 복사하여 password 필드에 붙여넣습니다. 콘텐츠에 큰따옴표가 포함되어 있으므로 JSON 키 콘텐츠를 단일 따옴표로 묶어야 합니다. 예를 들면 다음과 같습니다.

    apiVersion: v1
    kind: "CredentialFile"
    items:
    - name: "private-registry-creds"
      username: "_json_key"
      password: '{
    "type": "service_account",
    "project_id": "example-project-12345",
    "private_key_id": "d2661ccb21e686658c6552cf1e0166b857091b2e",
    "private_key": "-----BEGIN PRIVATE ... -----END PRIVATE KEY-----\n",
    "client_email": "test-537@example-project-12345.iam.gserviceaccount.com",
    "client_id": "111772984510027821291",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test-537%40example-project-12345.iam.gserviceaccount.com",
    "universe_domain": "googleapis.com"
    }
    '
    

관리자 클러스터 구성 파일에서 privateRegistry 구성

비공개 레지스트리를 사용하려면 관리자 클러스터를 만들 때 privateRegistry 섹션을 구성해야 합니다. 클러스터를 만든 후에는 privateRegistry.address를 변경할 수 없지만 다른 설정은 변경 가능하며 필요한 경우 업데이트할 수 있습니다.

  1. 다음 명령어를 실행하여 레지스트리 주소를 가져옵니다.

    gcloud artifacts repositories describe REGISTRY_NAME \
        --project=PROJECT_ID
        --location=REGION
    

    다음을 바꿉니다.

    • REGISTRY_NAME: 레지스터의 이름입니다.
    • PROJECT_ID: 레지스트리가 생성된 프로젝트의 ID입니다.
    • LOCATION: 레지스트리가 생성된 리전입니다(예: us-west2).

    출력은 다음과 비슷합니다.

    Encryption: Google-managed key
    Repository Size: 0.000MB
    cleanupPolicyDryRun: true
    createTime: '2025-01-28T03:27:57.701672Z'
    dockerConfig: {}
    format: DOCKER
    mode: STANDARD_REPOSITORY
    name: projects/example-project-12345/locations/us-west2/repositories/test
    registryUri: us-west2-docker.pkg.dev/example-project-12345/test
    satisfiesPzi: true
    updateTime: '2025-01-28T03:27:57.701672Z'
    vulnerabilityScanningConfig:
      enablementConfig: INHERITED
      enablementState: SCANNING_ACTIVE
      lastEnableTime: '2025-01-28T03:27:49.385246079Z'
    

    privateRegistry.address의 출력에서 registryUri 값을 사용합니다.

  2. 다음 명령어를 실행하여 Artifact Registry 엔드포인트의 CA 인증서를 추출하고 ar-ca.pem 파일에 저장합니다.

    true | openssl s_client -connect REGION-docker.pkg.dev:443 -showcerts 2>/dev/null| sed -ne '/-BEGIN/,/-END/p' > ar-ca.pem
    
  3. 다음과 같이 privateRegistry 섹션을 작성합니다.

    privateRegistry:
      address: "REGISTRY_ADDRESS"
      credentials:
        fileRef:
          path: "CREDENTIAL_FILE_PATH"
          entry: "private-registry-creds"
      caCertPath: "CA_CERT_PATH"
    componentAccessServiceAccountKeyPath: "COMPONENT_ACCESS_KEY_PATH"
    

    다음을 바꿉니다.

    • REGISTRY_ADDRESS: registryUri 값입니다.
    • CREDENTIAL_FILE_PATH: admin-creds.yaml 파일의 전체 경로 또는 상대 경로입니다.
    • CA_CERT_PATH: ar-ca.pem 파일의 전체 경로 또는 상대 경로입니다.
    • COMPONENT_ACCESS_KEY_PATH: 구성요소 액세스 서비스 계정 키 파일의 전체 경로 또는 상대 경로입니다.