为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
为1000
runAsGroup: 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
类型卷生效。