你能在Cloud Run容器内运行沙盒容器吗?

6
假设我想让用户上传一些Python或Bash脚本,将其在云运行中执行并得到结果。为此,我会创建一个具有无权访问项目资源的服务帐号的Cloud Run服务。同时,我会在嵌套容器内运行脚本,以防止用户干扰服务器代码并操纵其他用户的连续请求。
如何在运行在Cloud Run上的容器中使用gvisor runsc或其他沙箱运行时?我发现一些资源提到了在原始容器上使用特权标志,但在Cloud Run上不可能这样做。此外,我找不到有关如何使用runsc运行无根容器的任何信息。请告诉我是否正确以及云运行是否支持此功能,或者我应该使用其他服务?
谢谢。
1个回答

6

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

然而,由于gVisor技术上是一个用户空间隔离技术(尽管我不确定它需要什么级别的特权),您可能可以在gVisor内部运行gVisor沙箱,但我不会抱有太高的希望,因为它可能并非为此而设计。我猜想,gVisor沙箱不提供ptrace功能,无法使嵌套沙箱工作,但您可能可以在gVisor自己的GitHub存储库上询问这个问题。

对于这样的用例,我建议查看GKE上的Anthos Cloud Run,它与Cloud Run类似,但在GKE节点(即GCE VM)上运行应用程序,这些节点具有完整的Linux系统调用套件。由于Kubernetes podspec可用,因此您实际上可以创建特权容器,并在其中运行VM等。

通常容器本身就应该是沙盒,因此尝试创建更多的沙盒(如您之前提出的问题)将会涉及到很多依赖于平台的工作,即使您可以以某种方式运行它。

也许我来晚了,但这篇文章解释了如何创建沙盒Pods以实现完全隔离。https://cloud.google.com/kubernetes-engine/docs/concepts/sandbox-pods - Abdelouahab
根据第二代运行时环境,现在应该可以使用gVisor运行不受信任的代码(https://cloud.google.com/run/docs/about-execution-environments)。然而,我没有找到任何关于它如何工作的解决方案或文档(在这里询问第二代运行时:https://dev59.com/6Kv2oIgBc1ULPQZFWJCT)。 - fls0815

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接