为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中的所有容器内进程UID1000
  • runAsGroup: 3000: 指定Pod中的所有容器内进程GID3000,如果省略该字段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

返回值中gid3000,与runAsGroup字段相同。

如果省略了runAsGroup,则gid将保持为0(根),并且进程将能够与根(0)组拥有的文件交互,这些文件具有根(0)组所需的组权限。

注意: fsGroup针对emptyDir类型卷生效。

Copyright © weiliang 2021 all right reserved,powered by Gitbook本书发布时间: 2024-04-22 16:03:41

results matching ""

    No results matching ""