部署工作负载

工作负载操作员可以将选项传递给 Confidential Space 工作负载虚拟机实例,以在运行前确定其行为。虽然某些标志具有不会更改的必需值,但您仍需要做出以下选择:

  • 虚拟机实例是基于生产还是调试 Confidential Space 映像。

  • 是否使用 AMD SEV、Intel TDX 或 Intel TDX 与 NVIDIA 机密计算来帮助保护工作负载数据的私密性。

  • 需要传递哪些虚拟机元数据变量,包括要运行哪个工作负载容器映像、要使用哪个证明服务、是否要记录到 Cloud Logging 以及要设置哪些环境变量等详细信息。

  • 要将哪个服务账号关联到虚拟机以运行工作负载,以及该服务账号需要哪些权限才能访问其他项目中的机密数据并将结果写入某个位置。

  • 虚拟机实例应在哪个可用区中运行。

以下举例说明了如何创建机密虚拟机并运行名为 WORKLOAD_CONTAINER_NAME 的 Docker 容器:

基于 CPU 的工作负载

gcloud compute instances create INSTANCE_NAME \
    --confidential-compute-type=CONFIDENTIAL_COMPUTING_TECHNOLOGY \
    --machine-type=MACHINE_TYPE_NAME \
    --maintenance-policy=MAINTENANCE_POLICY \
    --shielded-secure-boot \
    --image-project=confidential-space-images \
    --image-family=IMAGE_FAMILY \
    --metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest" \
    --service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID. \
    --scopes=cloud-platform \
    --zone=ZONE_NAME \
    --project=PROJECT_ID

请提供以下值:

  • INSTANCE_NAME:新虚拟机实例的名称。

  • CONFIDENTIAL_COMPUTING_TECHNOLOGY:要使用的机密计算技术类型。请选择以下某个值:

    • SEV

    • TDX

  • MACHINE_TYPE_NAME:虚拟机机器类型,例如 n2d-standard-2。机密虚拟机实例的有效机器类型由您选择的机密计算技术(AMD SEV 或 Intel TDX)决定。请参阅机器类型。

  • MAINTENANCE_POLICY:对于使用 SEV 的 N2D 机器类型,请将其设置为 MIGRATE 以支持实时迁移。对于所有其他机器类型,请将此值设置为 TERMINATE,因为它们不支持实时迁移。

  • IMAGE_FAMILY_NAME:Confidential Space 映像的系列。请按以下方式之一操作:

    • confidential-space(适用于生产工作负载)

    • confidential-space-debug,用于调试工作负载

  • 其他元数据变量,用于更改虚拟机的行为,包括要使用的证明服务。

  • WORKLOAD_AUTHOR_PROJECT:托管存储工作负载容器的 Artifact Registry 代码库的项目的 ID。

  • REPOSITORY_NAME:存储工作负载容器的 Artifact Registry 代码库名称。

  • WORKLOAD_CONTAINER_NAME:工作负载容器的名称。

  • WORKLOAD_SERVICE_ACCOUNT_NAME:运行工作负载的服务账号的名称。

  • WORKLOAD_OPERATOR_PROJECT_ID:运行工作负载的项目的 ID。

  • ZONE_NAME:虚拟机实例运行所在的可用区,例如 us-west1-b。Confidential Space 需要以下服务,这些服务可在特定位置使用:

  • PROJECT_ID:可选。要在其中创建虚拟机实例的项目的 ID。

基于 GPU 的工作负载

准备工作

  • Confidential Space 仅支持 H100 GPU 上的 NVIDIA 机密计算。

  • 为确保您有足够的 GPU 配额可以用于请求的资源,请检查您的 GPU 配额。对于具有 GPU 的机密虚拟机实例,请申请抢占式 GPU 配额以使用这些资源。申请 GPU 配额时,您必须为要在每个区域中创建的 GPU 型号申请一个配额,并根据所有区域中所有类型的 GPU 总数另外申请一个全球配额 (GPUs (all regions))。

  • 如需了解配额用量,请参阅 GPU 虚拟机和抢占式分配配额。

  • 阅读在 MIG 中创建规模调整请求时的限制。

  • 如需安装 NVIDIA 机密计算所需的驱动程序,您必须传递值为 true 的元数据变量 tee-install-gpu-driver。

  • 对于 NVIDIA 驱动程序和 CUDA 工具包,建议使用空间不小于 30 GB 的虚拟机启动磁盘。

  • 如需使用 CUDA 应用,您使用的容器映像中必须提供 NVIDIA CUDA-X 库。如需添加库,请执行以下任一操作:

    • 使用预装了 NVIDIA CUDA-X 库的容器映像。例如,您可以使用 Google 的 Deep Learning Containers 来预安装数据科学框架、NVIDIA CUDA-X 库和其他工具。或者,您可以仅将 NVIDIA 的 CUDA 容器映像用于 NVIDIA CUDA-X 库。

    • 构建并使用您自己的容器映像。将 LD_LIBRARY_PATH 环境变量设置为 /usr/local/nvidia/lib64,其中必须包含 NVIDIA CUDA-X 库和设备驱动程序。

已知问题

  • 运行附加了 NVIDIA H100 GPU 的 Confidential Space 工作负载时,您可能会看到以下出错提示:

    failed to get launchspec, make sure you're running inside
    a GCE VM: GPU Driver installation is not supported.
    

    这是 Confidential Space 映像的一个已知问题。如需解决此问题,请重启机密虚拟机。

部署基于 GPU 的工作负载

如需部署基于 GPU 的工作负载,您必须使用 spot 或 灵活启动 预配模型创建机密虚拟机实例。

Spot

如需使用 Spot 预配模型,请创建加速器优化型虚拟机实例。

gcloud compute instances create INSTANCE_NAME \
    --provisioning-model=SPOT \
    --confidential-compute-type=TDX \
    --machine-type=a3-highgpu-1g \
    --maintenance-policy=TERMINATE \
    --shielded-secure-boot \
    --image-project=confidential-space-images \
    --image-family=IMAGE_FAMILY_NAME \
    --metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest~tee-install-gpu-driver=true" \
    --service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID. \
    --scopes=cloud-platform \
    --boot-disk-size=30G \
    --zone=ZONE_NAME \
    --project=PROJECT_ID

请提供以下值:

  • INSTANCE_NAME:新虚拟机实例的名称。

  • IMAGE_FAMILY_NAME:Confidential Space 映像的系列。请按以下方式之一操作:

    • confidential-space(适用于生产工作负载)

    • confidential-space-debug,用于调试工作负载

  • 其他元数据变量,用于更改虚拟机的行为,包括要使用的证明服务。

  • WORKLOAD_AUTHOR_PROJECT:运行工作负载的项目 ID。

  • REPOSITORY_NAME:Artifact Registry 仓库名称。

  • WORKLOAD_CONTAINER_NAME:工作负载容器的名称。

  • WORKLOAD_SERVICE_ACCOUNT_NAME:运行工作负载的服务账号的名称。

  • WORKLOAD_OPERATOR_PROJECT_ID:运行工作负载的项目的 ID。

  • ZONE_NAME:支持 NVIDIA 机密计算的可用区之一。

  • PROJECT_ID:可选。要在其中创建虚拟机实例的项目的 ID。

灵活启动

如需使用灵活启动预配模型,请先创建一个实例模板,然后创建一个托管式实例组 (MIG)。

  1. 创建实例模板。

    gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
        --provisioning-model=FLEX_START \
        --confidential-compute-type=TDX \
        --machine-type=a3-highgpu-1g \
        --maintenance-policy=TERMINATE \
        --shielded-secure-boot \
        --image-project=confidential-space-images \
        --image-family=IMAGE_FAMILY_NAME \
        --metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest~tee-install-gpu-driver=true" \
        --service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID. \
        --scopes=cloud-platform \
        --boot-disk-size=30G \
        --max-run-duration=RUN_DURATION \
        --instance-termination-action=DELETE \
        --project=PROJECT_ID
    

    请提供以下值:

    • INSTANCE_TEMPLATE_NAME:新虚拟机实例模板的名称。

    • IMAGE_FAMILY_NAME:Confidential Space 映像的系列。请按以下方式之一操作:

      • confidential-space(适用于生产工作负载)

      • confidential-space-debug,用于调试工作负载

    • WORKLOAD_AUTHOR_PROJECT:运行工作负载的项目 ID。

    • REPOSITORY_NAME:Artifact Registry 代码库名称。

    • WORKLOAD_CONTAINER_NAME:工作负载容器的名称。

    • WORKLOAD_SERVICE_ACCOUNT_NAME:运行工作负载的服务账号的名称。

    • WORKLOAD_OPERATOR_PROJECT_ID:运行工作负载的项目的 ID。

    • RUN_DURATION:您希望请求的虚拟机实例运行的时长。您必须将该值格式化为天、小时、分钟或秒数,并分别添加对应的后缀 d、h、m 或 s。例如,指定 30m 表示 30 分钟,或指定 1d2h3m4s 表示 1 天 2 小时 3 分钟 4 秒。该值必须介于 10 分钟到 7 天之间。

    • PROJECT_ID:可选。要在其中创建虚拟机实例的项目的 ID。

  2. 使用 instance-groups managed create 命令创建可用区级 MIG:

    gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
        --template=INSTANCE_TEMPLATE_NAME \
        --size=0 \
        --zone=ZONE_NAME \
        --default-action-on-vm-failure=do_nothing
    

    请提供以下值:

  3. 在 MIG 中,创建规模调整请求。指定所需的 GPU 虚拟机实例数量以及这些虚拟机实例的运行时长。

    gcloud compute instance-groups managed resize-requests create INSTANCE_GROUP_NAME \
        --resize-request=RESIZE_REQUEST_NAME \
        --resize-by=COUNT \
        --zone=ZONE_NAME
    

    请提供以下值:

    • INSTANCE_GROUP_NAME:MIG 的名称。

    • INSTANCE_TEMPLATE_NAME:GPU 虚拟机实例的实例模板的名称。

    • ZONE_NAME:支持 NVIDIA 机密计算的可用区之一。

    • RESIZE_REQUEST_NAME:规模调整请求的名称。

    • COUNT:要在实例组中一次性添加的所有虚拟机实例的数量。

    您创建的规模调整请求会保持 ACCEPTED 状态,直到 MIG 创建了所有请求的 GPU 虚拟机实例。在实例组中创建所有 GPU 虚拟机实例后,请求的状态会更改为 SUCCEEDED。

  4. 当有足够的资源可用于规模调整请求时,系统会将虚拟机实例添加到 MIG 并启动这些实例以运行您的工作负载。如需列出 MIG 中存在的实例,请运行以下命令:

    gcloud compute instance-groups managed list-instances INSTANCE_GROUP_NAME \
        --zone=ZONE_NAME \
        --project=PROJECT_ID
    

    请提供以下值:

    • INSTANCE_GROUP_NAME:MIG 的名称。

    • ZONE_NAME:要从中获取虚拟机实例列表的受支持可用区。

    • PROJECT_ID:可选。要从中获取虚拟机实例列表的项目的 ID。

关联的服务账号

服务账号必须关联到工作负载的机密虚拟机,才能运行工作负载。服务账号必须按以下方式设置:

  • 具有以下角色:

  • 拥有对数据协作者存储其机密数据的位置(例如 Cloud Storage 存储桶或 BigQuery 表)的读取权限。

  • 对工作负载输出数据的位置(例如 Cloud Storage 存储桶)具有写入权限。数据协作者必须对此位置具有读取权限。

此外,数据协作者和工作负载操作员需要设置以下内容:

  • 如果数据协作者使用服务账号模拟而不是直接资源访问权限,则必须将服务账号作为特性条件添加到其工作负载身份池提供方:

    'WORKLOAD_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.' in assertion.google_service_accounts
    
  • 工作负载操作员需要 roles/iam.serviceAccountUser 角色才能模拟服务账号。这样,他们就可以将其挂接到工作负载虚拟机实例,以便运行工作负载。

元数据变量

您可以在创建虚拟机时通过将变量传递到 --metadata 选项来更改 Confidential Space 工作负载虚拟机行为。

如需传入多个变量,请首先在 --metadata 值前面添加 ^~^ 来设置分隔符。这会将分隔符设置为 ~,因为变量值中使用了 ,。

例如:

metadata="^~^tee-restart-policy=Always~tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest"

下表详细介绍了您可以为工作负载虚拟机设置的元数据变量。

元数据键 类型 说明和值

tee-image-reference

互动对象:

字符串

必需。这指向工作负载容器所在的位置。

示例
tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest

ita-api-key

字符串

仅当您使用 Intel Trust Authority 作为证明服务时,才需要执行此操作。将值设置为您的 Intel Trust Authority API 密钥。

如需了解如何创建 Intel Trust Authority API 密钥,请参阅 Intel 的文档。

Intel Trust Authority 支持 Intel TDX 虚拟机实例,这些实例可选择配备 NVIDIA H100 GPU。如果存在 GPU,系统还会验证其证据。

示例
ita-api-key=API_KEY

ita-region

字符串

仅当您使用 Intel Trust Authority 作为证明服务时,才需要执行此操作。将该值设置为您希望 Intel Trust Authority 在其中运行的区域。有效区域包括:

  • 美国:https://api.trustauthority.intel.com
  • 欧洲: https://api.eu.trustauthority.intel.com

Intel Trust Authority 支持 Intel TDX 虚拟机实例,这些实例可选择配备 NVIDIA H100 GPU。如果存在 GPU,系统还会验证其证据。

示例
ita-region=REGION_NAME

tee-added-capabilities

互动对象:

JSON 字符串数组

向工作负载容器添加额外的 Linux 功能。

示例
tee-added-capabilities="[\"CAP_SYS_ADMIN\", \"CAP_SYS_CHROOT\"]"

tee-cgroup-ns

互动对象:

布尔值

默认为 false。设置为 true 时,在 /sys/fs/cgroup 处启用命名空间 cgroup 装载。

示例
tee-cgroup-ns=true

tee-cmd

互动对象:

JSON 字符串数组

替换工作负载容器的 Dockerfile 中指定的 CMD 指令。

示例
tee-cmd="[\"params1\", \"params2\"]"

tee-container-log-redirect

互动对象:

枚举

使用 confidential-space-launcher 字段将 STDOUT 和 STDERR 从工作负载容器输出到 Cloud Logging 或串行控制台。

有效值为:

  • false:(默认)不进行日志记录。
  • true:输出到串行控制台和 Cloud Logging。
  • cloud_logging:仅输出到 Cloud Logging。
  • serial:仅输出到串行控制台。

串行控制台中的日志量过高可能会影响工作负载性能。

示例
tee-container-log-redirect=true

tee-dev-shm-size-kb

整数

设置 /dev/shm 共享内存装载的大小(以 kB 为单位)。

示例
tee-dev-shm-size-kb=65536

tee-env-ENVIRONMENT_VARIABLE_NAME

互动对象:

字符串

在工作负载容器中设置环境变量。 工作负载作者还必须将环境变量名称添加到 allow_env_override 发布政策中,否则无法设置这些变量。

示例
tee-env-example-env-1='value-1'~tee-env-example-env-2='value-2'

tee-impersonate-service-accounts

互动对象:

字符串

工作负载操作员可以模拟的服务账号列表。工作负载操作员必须 能够模拟服务账号。

可以列出多个服务账号(以英文逗号分隔)。

示例
tee-impersonate-service-accounts=SERVICE_ACCOUNT_NAME_1@WORKLOAD_OPERATOR_PROJECT_ID.,SERVICE_ACCOUNT_NAME_2@WORKLOAD_OPERATOR_PROJECT_ID.

tee-install-gpu-driver

互动对象:

布尔值

是否安装 NVIDIA 的机密计算 GPU 驱动程序。 需要支持 NVIDIA 机密计算的机器类型。

示例
tee-install-gpu-driver=true

tee-monitoring-memory-enable

互动对象:

布尔值

默认为 false。设置为 true 时,会启用内存用量监控。机密虚拟机收集的指标属于 guest/memory/bytes_used 类型,可在 Cloud Logging 或 Metrics Explorer 中查看。

示例
tee-monitoring-memory-enable=true

tee-mount

互动对象:

字符串

以英文分号分隔的装载定义列表。装载定义由逗号分隔列表的键值对组成,需要 type、source 和 destination。destination 必须是绝对路径,type/source 必须是 tmpfs。

示例
type=tmpfs,source=tmpfs,destination=/tmp/tmpfs,size=12345;type=tmpfs,source=tmpfs,destination=/run/workload

tee-nonroot-container

互动对象:

布尔值

默认为 false。设置为 true 时,容器会在隔离的用户命名空间中作为主机虚拟机上的非根用户运行。如果工作负载作者将 tee.launch_policy.nonroot_container 设置为 nonrootonly,则此变量必须设置为 true。

示例
tee-nonroot-container=true

tee-restart-policy

互动对象:

枚举

工作负载停止时容器启动器的重启政策。

有效值为:

  • Never(默认)
  • Always
  • OnFailure

此变量仅受生产 Confidential Space 映像支持。

示例
tee-restart-policy=OnFailure

tee-signed-image-repos

互动对象:

字符串

以逗号分隔的容器代码库列表,用于存储由 Sigstore Cosign 生成的签名。

示例
tee-signed-image-repos=us-docker.pkg.dev/projectA/repo/example,us-docker.pkg.dev/projectB/repo/example,us-docker.pkg.dev/projectC/repo/example

扩缩

如需了解生产 Confidential Space 工作负载的伸缩和高可用性,请参阅托管式实例组。