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

Rad*_*mko 17 security containers docker

我有一个应用程序,我希望有权启动短期任务并将这些任务安排为docker容器.我想通过简单的方式做到这一点docker run.

由于我想使攻击面尽可能小,我将应用程序视为不可信.因此,它可以docker run针对预定义的docker API端点运行任意命令(如果代码库包含bug或容器被泄露,输入在某处等地被不正确地转义).

这就是为什么我想在某些方面限制该应用程序(实际上是一个调度程序):

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

我看了几个选项:

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

似乎Docker默认设计为信任容器调度程序.有谁知道这是否是一个设计决定?

有没有其他可能的解决方案,我错过了当前最新的Docker版本?


我还查看了Kubernetes及其限制范围资源配额,它可以应用于K8S命名空间,这看起来很有趣,假设有一种方法可以强制某些调度程序只使用某些命名空间.但是,这会增加运行K8S群集的问题范围.

kpi*_*pie 1

在unix平台上运行docker应该与兼容nice 或者所以我认为首先仔细观察一下,看起来你需要类似的东西 -cpuset-cpus="0,1"

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