为Pod或容器配置安全上下文
为Pod或容器配置安全上下文
SecurityContext的内容:
- 自主访问控制:基于UID和GID判定对对象的访问权限
- SELinux: 为对象赋予安全性标签
- 特权模式或非特权模式运行
- Linux权能: 为进程赋予root用户的部分权限
- Apparmor:使用程序配置来限制个别程序的权能
- seccomp:过滤进程的系统调用
- allowPrivilegeEscalation:控制进程是否可以获得超出其父进程的特权,这个字段的值直接控制是否为容器进程设置no_new_privs标志。当容器满足以下条件之一时该值总为true:
- 以特权模式运行
- 具有CAP_SUS_ADMIN权限
- readOnlyRootFileSyste:以只读方式加载容器的根文件系统
为Pod设置安全上下文
主要是securityContext字段,从后面Pod中执行的结果来看,这里的三个参数:
- runAsUser:Linux中的uid
- runAsGroup: Linux中的gid
- fsGroup: Linux中的groups
securityContext字段是一个PodSecurityContext对象,为Pod配置的安全性配置会应用到这个Pod的所有容器上
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
volumes:
- name: sec-ctx-vol
emptyDir: {}
containers:
- name: sec-ctx-demo
image: busybox:1.28
command: ["sh", "-c", "sleep 1h"]
volumeMounts:
- name: sec-ctx-vol
mountPath: /data/demo
securityContext:
allowPrivilegeEscalation: false
该文件制定Pod中所有容器内的进程都适用用户ID1000,主组3000运行。
如果忽略runAsGroup字段,则容器的主组ID默认为root(0),设置该字段后,所有容器内创建的文件会划归用户1000和组3000。
fsGroup表示容器中所有的进程也会是附组ID 2000的一部分
Pod运行时权限
/data/demo下创建文件的权限
为Container设置Security Context
上面一个例子我们的SecurityContext字段写在spec下,与container字段同级,表示设置的securityContext将被应用于Pod的所有容器中,如果我们只想给某一个容器设置这个值,则需要将这个字段挪到container下设置
例如:
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo-2
spec:
securityContext:
runAsUser: 1000
containers:
- name: sec-ctx-demo-2
image: gcr.io/google-samples/node-hello:1.0
securityContext:
runAsUser: 2000
allowPrivilegeEscalation: false
此时设置的securityContext就只作用于sec-cix-demo-2这个容器中
为Container设置SELinux
...
securityContext:
seLinuxOptions:
level: "s0:c123,c456"
说明: 要指定 SELinux,需要在宿主操作系统中装载 SELinux 安全性模块

浙公网安备 33010602011771号