有没有办法限制不受信任的容器调度?

我有一个应用程序,我想授予启动短期任务的权限,并将其作为docker容器安排。 我只是想通过docker run来做这个。

由于我想使攻击面尽可能小,所以我将该应用程序视为不可信。 因此,它可以运行任意的docker run命令(如果代码库包含bug或容器被入侵,input不正确地在某处逃脱等)。

这就是为什么我想在某些方面限制该应用程序(有效的调度程序):

  • 防止 – --privileged使用
  • 强制执行--read-only标志
  • 强制执行内存和CPU限制

我看了几个选项:

  • SELinux的
    • 需要在主机级别设置selinux策略,然后通过daemon级别的--selinux-enabled标志在容器内传播。 然而,调度程序可以通过run --privileged覆盖这个。
  • seccompconfiguration文件
    • 这些仅在启动容器时应用(seccomp标志可用于docker docker run
  • AppArmor的
    • 这可以(再次)通过--privileged在调度程序级别上被覆盖
  • docker守护进程--exec-opts标志
    • 实际上只有一个选项可用于此标志( native.cgroupdriver

看起来Docker默认devise为信任容器调度器。 有谁知道这是否是一个devise决定?

是否有任何其他可能的解决scheme可用瓦特/当前最新的docker版本,我错过了?


我还研究了Kubernetes及其限制范围和资源配额 ,可以应用到K8S命名空间,这看起来很有趣,假设有一种方法来强制某些调度器只使用某些命名空间。 但是,这会将这个问题的范围扩大到运行K8S群集。

在unix平台上运行Docker应该兼容性nice所以我会先考虑一下,看起来像你需要一些像-cpuset-cpus="0,1"

从第二个链接看, “ – cpu-quota看起来与–cpuset-cpus类似……为一个进程分配一个或几个核心,只是时间pipe理而不是pipe理的处理器数量。