将 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:组件访问服务账号密钥文件的完整路径或相对路径。