为Pod配置安全上下文
set-the-security-context-for-a-pod
通过在Pod声明中添加securityContext字段,为Pod指定安全设置。
securityContext字段是一个PodSecurityContext对象。
为Pod指定的安全设置适用于Pod中的所有容器。下面是一个Pod的配置文件,它包含一个securityContext和一个emptyDir卷:
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
command: [ "sh", "-c", "sleep 1h" ]
volumeMounts:
- name: sec-ctx-vol
mountPath: /data/demo
securityContext:
allowPrivilegeEscalation: false
创建Pod
kubectl apply -f https://k8s.io/examples/pods/security/security-context.yaml
针对上述配置,说明如下:
runAsUser: 1000: 指定Pod中的所有容器内进程UID为1000runAsGroup: 3000: 指定Pod中的所有容器内进程GID为3000,如果省略该字段GID将为root(0)
验证进程所属用户:
$ kubectl exec -it security-context-demo -- sh
/ $ ps -ef|grep sleep
1 1000 0:00 sleep 1h
23 1000 0:00 grep sleep
/ $
当指定runAsGroup时,新建文件权限为:1000:3000。
由于指定了fsGroup字段,因此容器中的volume /data/demo和在该卷中创建的任何文件的所有者将是GID 2000。
/ $ ls -l /data/
total 0
drwxrwsrwx 2 root 2000 6 Oct 27 02:35 demo
新建文件,并查看文件权限
/data $ cd demo
/data/demo $ echo hello > testfile
/data/demo $ ls -l
total 4
-rw-r--r-- 1 1000 2000 6 Oct 27 06:34 testfile
查看当前会话用户
/ $ id
uid=1000 gid=3000 groups=2000
返回值中gid是3000,与runAsGroup字段相同。
如果省略了runAsGroup,则gid将保持为0(根),并且进程将能够与根(0)组拥有的文件交互,这些文件具有根(0)组所需的组权限。
注意: fsGroup针对emptyDir类型卷生效。