比方说,我要让用户上传一些python或bash脚本,在云中运行它并返回结果。为此,我将使用没有访问项目资源权限的服务帐户创建一个Cloud Run服务。我最好在嵌套容器中运行脚本,这样用户就不会干扰服务器代码,也不会操纵来自其他用户的连续请求。
如何在Cloud Run上运行的容器中使gvisor runc或其他沙箱运行时可用?
我在原始容器上发现了一些使用特权标志的资源,但这在Cloud Run中是不可能的。另外,我找不到有关如何使用runsc运行无根容器的任何信息。让我知道我是否走在正确的道路上,或者即使通过云运行也可以做到这一点,还是应该使用其他服务?
谢谢。
答案 0 :(得分:4)
当前,Cloud Run(受完全管理)本身在gVisor沙箱上运行,因此可能无法支持使用cgroups或Linux名称空间API创建更多容器环境的低级Linux API。
但是,由于gVisor从技术上讲是一种用户空间沙箱技术(尽管我不确定它需要什么特权级别),因此尽管我不抱太大希望,但您仍可以在gVisor中运行gVisor沙箱。因为它可能不是为此设计的。我猜测gVisor沙箱无法提供ptrace
功能来使嵌套沙箱正常工作,尽管您可能会在gVisor自己的GitHub存储库中提出要求。
对于这样的用例,我建议在GKE上查看Cloud Run for Anthos,这与Cloud Run类似,但在具有完整Linux系统调用套件的GKE节点(即GCE VM)上运行应用程序提供给他们。由于在那里有Kubernetes podspec,您实际上可以创建特权容器,并在其中运行VM等。
通常,容器本身通常应该是沙箱,因此,即使您可以某种方式运行它,尝试创建更多的沙箱(like you asked earlier)也将取决于平台。