有时候在运行一个容器的时候,可能需要使用sysctl命令来修改内核参数,比如net、vm、kernel等参数,但是sysctl需要容器拥有超级权限才可以使用,在Docker容器启动的时候可以加上--privileged参数来使用特权模式,但是在k8s中应该如何来使用?
k8s中的Security Context,也就是常说的安全上下文,主要是限制容器非法操作宿主节点的系统级别的内容,使得节点的系统或者节点上其他容器组不会受到影响。k8s提供了三种配置安全上下文级别的方法:
- Container-level Security Context:仅应用到指定的容器。
- Pod-level Security Context:应用到Pod内所有容器以及Volume
- Pod Security Context(PSP):应用到集群内部所有的Pod以及Volume
如下几种方式来设置Securi Context:
- 访问权限控制:根据用户ID(UID)和组ID(GID)来限制对资源(比如:文件)的访问权限
- Security Enhanced Linux(SELinux):为对象分配SELinux标签
- 以privileged(特权)模式运行
- Linux Capabilities:给某个特定的进程超级权限,而不用给root用户所有的privileged权限
- AppArmor:使用程序文件来限制单个程序的权限
- Seccomp:过滤容器中进程的系统调用(system call)
- AllowprivilegeEscalation(允许特权扩大):此项配置是一个布尔值,定义了一个进程是否可以比其父进程获得更多的特权,直接效果是,容器的进程上是否被设置no_new_privs标记。当出现如下情况时,AllowprivilegeEscalation的值始终为true:
- 容器以
privileged模式运行 - 容器拥有
CAP_SYS_ADMIN的linux capability
- 容器以
