您可以在 Cloud Run 容器中运行沙盒容器吗?
Posted
技术标签:
【中文标题】您可以在 Cloud Run 容器中运行沙盒容器吗?【英文标题】:Can you run a sandbox container within a Cloud Run container? 【发布时间】:2020-08-12 14:50:03 【问题描述】:假设我要让用户上传一些 python 或 bash 脚本,在云运行中执行它并返回结果。为此,我将使用无权访问项目资源的服务帐户创建一个 Cloud Run 服务。我也想在嵌套容器中运行脚本,这样用户就不会干扰服务器代码并操纵来自其他用户的连续请求。
如何使 gvisor runsc 或其他一些沙盒运行时在 Cloud Run 上运行的容器中可用?
我发现一些资源提到在原始容器上使用特权标志,但这在 Cloud Run 中是不可能的。此外,我找不到有关如何使用 runsc 运行无根容器的任何信息。让我知道我是否走在正确的轨道上,或者这是否可以通过云运行实现,或者我应该使用其他服务吗?
谢谢。
【问题讨论】:
【参考方案1】:目前,Cloud Run(完全托管)本身在 gVisor 沙箱上运行,因此它可能无法支持使用 cgroup 或 Linux 命名空间 API 创建更多容器环境的低级 Linux API。
但是,由于 gVisor 在技术上是一种用户空间沙盒技术(尽管我不确定它需要什么级别的权限),您也许可以在 gVisor 中运行 gVisor 沙盒,尽管我不抱太大希望因为它可能不是为此而设计的。我猜 gVisor 沙盒不提供 ptrace
功能让嵌套沙盒工作,尽管您可以在 gVisor 自己的 GitHub 存储库上询问这个问题。
对于这样的用例,我建议查看 GKE 上的 Cloud Run for Anthos,它与 Cloud Run 的开发人员体验类似,但在具有完整 Linux 系统调用套件的 GKE 节点(即 GCE 虚拟机)上运行您的应用程序可供他们使用。由于 Kubernetes podspec 在那里可用,您实际上可以创建特权容器,并在其中运行虚拟机等。
通常容器本身应该是沙箱,因此尝试创建更多沙箱 (like you asked earlier) 将是大量依赖于平台的工作,即使您可以以某种方式使其运行。
【讨论】:
也许我来晚了,但是这篇文章解释了如何创建一个沙箱 pod 来实现完全隔离cloud.google.com/kubernetes-engine/docs/concepts/sandbox-pods 根据第二代运行时环境,现在应该可以使用 gVisor (cloud.google.com/run/docs/about-execution-environments) 运行不受信任的代码。但是,我没有找到任何关于它应该如何工作的解决方案或文档(在此处询问第二代运行时:***.com/questions/69846927/…)。以上是关于您可以在 Cloud Run 容器中运行沙盒容器吗?的主要内容,如果未能解决你的问题,请参考以下文章
Python 线程在 Docker 容器中并行运行,但在容器在 Google Cloud Run 上运行时按顺序运行
输入使用 Google Cloud Run 运行的 docker 容器
Cloud Run Flask API 容器运行 shutit 进入休眠循环
在构建期间将文件从 GCS 复制到 Cloud Run docker 容器中
将 env 变量从 Google 的 Secret Manager 加载到在 Google Cloud Run 上运行但未通过 Cloud Build 部署的 Docker 容器中?