4.2.6 设置 Pod 对象的安全上下文
Pod 对象的安全上下文用于设定 Pod 或容器的权限和访问控制功能,其支持设置的常用属性包括以下几个方面:
- 基于用户ID(UID)和组ID(GID)控制访问对象(如文件)时的权限。
- 以特权或非特权的方式运行。
- 通过Linux Capabilities为其提供部分特征。
- 基于 Seccomp 过滤进程的系统调用。
- 基于 SELinux 的安全标签。
- 是否能够进行权限升级。
Pod 对象的安全上下文定义在 spec.securityContext 字段中,而容器的安全上下文则定义在 spec.containers[].securityContext 字段中,且二者可嵌套使用的字段还有所不同。下面的配置清单示例为 busybox 容器定义了安全上下文,它以 uid 为 1000 的非特权用户运行容器,并禁止权限升级:
apiVersion: v1
kind: Pod
metadata:
name: pod-with-securitycontext
spec:
containers:
- name: busybox
image: busybox
command: ["/bin/sh", "-c", "sleep 86400"]
securityContext:
runAsNonRoot: true
runAsUser: 1000
allowPrivilegeEscalation: false
将上面的配置清单保存与配置文件(如 pod-with-securitycontext.yaml 文件)中,而后创建于集群中即可验证容器进程的运行者身份:
**[terminal]
**[delimiter $ ]**[command kubectl apply -f pod-with-securitycontext.yaml]
**[delimiter $ ]**[command exec pod-with-securitycontext -- ps aux]
PID USER TIME COMMAND
1 1000 0:00 sleep 86400
6 1000 0:00 ps aux
另外,可设置的安全上下文属性还有 fsGroup、seLinuxOptions、supplementalGroups、sysctls、capabilities 和 privileged 等,且 Pod 和容器各自支持的字段也有所不同,感兴趣的读者可按需对各属性进行测试。