Cloud Run 沙盒提供快速、安全且隔离的环境,可在第二代环境中的现有服务内执行不可信的代码或运行 AI 智能体等工具。沙盒经过高度优化,可实现低延迟,并且与容器在同一实例中运行,共享容器分配的 CPU 和内存。
本页介绍如何在容器上配置沙盒。 如需详细了解如何编写代码以使用 CLI 与沙盒互动,请参阅 Cloud Run 中的代码执行。
准备工作
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- 安装并初始化 gcloud CLI。
- 在第二代执行环境中部署 Cloud Run 服务。
所需的角色
如需获得配置和部署 Cloud Run 服务所需的权限,请让您的管理员为您授予以下 IAM 角色:
- Cloud Run 服务的 Cloud Run Developer (
roles/run.developer) 角色 - 服务身份的 Service Account User (
roles/iam.serviceAccountUser) 角色
如果您要从源代码部署服务或函数,则还必须向您授予项目和 Cloud Build 服务账号的其他角色。
如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色和 Cloud Run IAM 权限。如果您的 Cloud Run 服务与Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限和管理访问权限。
启用沙盒
任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。
启用沙盒后,您的 Cloud Run 服务将部署在第二代执行环境中。如需在 Cloud Run 服务中启用沙盒,请使用 Google Cloud CLI 或 YAML 配置:
gcloud
如需部署或更新服务,请指定 --sandbox-launcher 标志:
如需部署新服务,请运行以下命令:
gcloud beta run deploy SERVICE --image IMAGE_URL --sandbox-launcher
替换以下内容:
- SERVICE:Cloud Run 服务的名称。
- IMAGE_URL:对容器映像的引用,例如
us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址采用LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG格式
如需更新现有服务,请运行以下命令:
gcloud beta run services update SERVICE --sandbox-launcher
YAML
如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置:
gcloud run services describe SERVICE --format export > service.yaml
更新 YAML 文件,以在容器配置中添加设置为
true的sandboxLauncher属性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/launch-stage: BETA spec: template: spec: containers: - name: CONTAINER image: IMAGE_URL sandboxLauncher: true port: 8080替换以下内容:
- SERVICE:Cloud Run 服务的名称。
- CONTAINER:容器的名称。
- IMAGE_URL:对容器映像的引用,例如
us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址采用LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG格式
使用以下命令创建或更新服务:
gcloud run services replace service.yaml
gcloud run services replace命令默认使用service.yaml文件(如果存在)。
沙盒会共享分配给宿主容器的 CPU 和内存。请确保主容器的 CPU 和内存限制能够同时满足应用和任何正在运行的有效沙盒的需求。
停用沙盒
如需禁止在服务中启动沙盒,请使用 Google Cloud CLI 或 YAML 配置:
gcloud
使用 --no-sandbox-launcher 标志运行以下命令来更新服务:
gcloud beta run services update SERVICE --no-sandbox-launcher
将 SERVICE 替换为服务的名称。
YAML
如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置:
gcloud run services describe SERVICE --format export > service.yaml
更新 YAML 文件,以移除容器配置中的
sandboxLauncher属性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - name: CONTAINER image: IMAGE_URL port: 8080替换以下内容:
- SERVICE:Cloud Run 服务的名称。
- CONTAINER:容器的名称。
- IMAGE_URL:对容器映像的引用,例如
us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址采用LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG格式
使用以下命令创建或更新服务:
gcloud run services replace service.yaml
gcloud run services replace命令默认使用service.yaml文件(如果存在)。
查看沙盒设置
如需查看 Cloud Run 服务的当前沙盒设置,请执行以下操作:
控制台
在 Google Cloud 控制台中,前往 Cloud Run 服务页面:
点击相应服务以打开其服务详情页面。
点击修订历史记录标签页。
在容器标签页中,找到沙盒启动器设置,查看沙盒容器是处于启用状态还是停用状态。
gcloud
使用以下命令:
gcloud beta run services describe SERVICE
将 SERVICE 替换为服务的名称。
如需验证沙盒容器是否已启用,请在返回的配置中找到
sandboxLauncher: true属性。
如需在沙盒中运行来自服务的不受信任的代码,请参阅 Cloud Run 中的代码执行。