有没有办法限制不受信任的容器调度?
我有一个应用程序,我想授予启动短期任务的权限,并将其作为docker容器安排。 我只是想通过docker run
来做这个。
由于我想使攻击面尽可能小,所以我将该应用程序视为不可信。 因此,它可以运行任意的docker run
命令(如果代码库包含bug或容器被入侵,input不正确地在某处逃脱等)。
这就是为什么我想在某些方面限制该应用程序(有效的调度程序):
- 防止 –
--privileged
使用 - 强制执行
--read-only
标志 - 强制执行内存和CPU限制
我看了几个选项:
- SELinux的
- 需要在主机级别设置selinux策略,然后通过
daemon
级别的--selinux-enabled
标志在容器内传播。 然而,调度程序可以通过run --privileged
覆盖这个。
- 需要在主机级别设置selinux策略,然后通过
- seccompconfiguration文件
- 这些仅在启动容器时应用(seccomp标志可用于docker
docker run
)
- 这些仅在启动容器时应用(seccomp标志可用于docker
- 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理的处理器数量。