6

假设我要让用户上传一些 python 或 bash 脚本,在云运行中执行它并返回结果。为此,我将使用无权访问项目资源的服务帐户创建一个 Cloud Run 服务。我也会在嵌套容器中运行脚本,这样用户就不会干扰服务器代码并操纵来自其他用户的连续请求。

如何在 Cloud Run 上运行的容器中使 gvisor runsc 或其他一些沙盒运行时可用?

我发现一些资源提到在原始容器上使用特权标志,但使用 Cloud Run 是不可能的。此外,我找不到有关如何使用 runsc 运行无根容器的任何信息。让我知道我是否走在正确的轨道上,或者这是否可以通过云运行实现,或者我应该使用其他服务吗?

谢谢你。

4

1 回答 1

6

目前,Cloud Run(完全托管)本身在 gVisor 沙箱上运行,因此它可能无法支持使用 cgroups 或 Linux 命名空间 API 创建更多容器环境的低级 Linux API。

但是,由于 gVisor 在技术上是一种用户空间沙盒技术(尽管我不确定它需要什么级别的权限),您也许可以在 gVisor 中运行 gVisor 沙盒,尽管我不抱太大希望,因为它可能不是为此而设计的。我猜 gVisor 沙盒不提供ptrace嵌套沙盒工作的功能,尽管您可能会在 gVisor 自己的 GitHub 存储库上问这个问题。

对于这样的用例,我建议查看 GKE 上的 Cloud Run for Anthos,它与 Cloud Run 的开发人员体验相似,但在 GKE 节点(即 GCE 虚拟机)上运行您的应用程序,这些节点具有完整的 Linux 系统调用套件可供他们使用. 由于 Kubernetes podspec 在那里可用,您实际上可以创建特权容器,并在其中运行虚拟机等。

通常容器本身应该是沙箱,因此尝试创建更多沙箱(就像您之前问过的那样)将是大量依赖于平台的工作,即使您可以以某种方式使其运行。

于 2020-04-28T17:28:43.233 回答