将 Artifact Registry 用作工作负载映像的私有注册表

本页介绍了如何配置 Google Distributed Cloud for VMware(纯软件)管理员集群,以使用 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_ADDRESSregistryUri 值。
    • CREDENTIAL_FILE_PATHadmin-creds.yaml 文件的完整路径或相对路径。
    • CA_CERT_PATHar-ca.pem 文件的完整路径或相对路径。
    • COMPONENT_ACCESS_KEY_PATH:组件访问服务账号密钥文件的完整路径或相对路径。