Kubernetes SecurityContext 安全上下文之 容器使用不同用户运行时共享存储卷

容器使用不同用户运行时共享存储卷


使用存储卷在pod的不同容器中共享数据。可以顺利地在一个容器中写入数据,在另 一个容器中读出这些数据。

但这只是因为两个容器都以root用户运行,对存储卷中的所有文件拥有全部权限。

现在假设使用前面介绍的runAsUser选项。你可能需要在一个pod中用两个不同的用户运行两个容器(可能是两个第三方的容器,都以它们自己的特定用户运行进程)。如果这样的两个容器通过存储卷共享文件,它们不一定能够读取或写入另 一个容器的文件。
 

因此,Kubemetes允许为pod中所有容器指定supplemental组,以允许它们无论以哪个用户ID运行都可以共享文件 。这可以通过以下两个属性设置:

• fsGroup : 卷内创建的任何文件都将使用 GID (由于fsGroup参数))
• supplementalGroups

解释它们的效果的最好方法是使用例子说明,下面来看一 下如何在pod中使用它们,以及它们效果。以下代码清单描述了一个拥有两个共享同一存储卷的容器的pod。
 

两个容器使用同一存储卷:

[root@master ~]# cat  volume-fsgroup.yaml 
apiVersion: v1
kind: Pod
metadata: 
  name: pod-with-shared-volume-fsgroup
spec:
  securityContext:
    fsGroup: 555
    supplementalGroups: [666, 777]
  containers:
  - name: first
    image: alpine
    command: ["/bin/sleep","999999"]
    securityContext:
      runAsUser: 1111
    volumeMounts:
    - name: shared-volume
      mountPath: /volume
      readOnly: false
  - name: second
    image: alpine
    command: ["/bin/sleep","999999"]
    securityContext:
      runAsUser: 2222
    volumeMounts:
    - name: shared-volume
      mountPath: /volume
      readOnly: false

  volumes:
  - name: shared-volume
    emptyDir: {}


# fsGroup和supplementalGroups在pod级别的安全上下文中定义
  securityContext:
    fsGroup: 555
    supplementalGroups: [666, 777]


#    securityContext:
      runAsUser: 1111
第一个容器用户ID为1111

创建这个pod之后, 进入第一个容器查看它的用户ID和组ID:

[root@master ~]# kubectl get pod
NAME                                      READY   STATUS    RESTARTS   AGE
pod-with-shared-volume-fsgroup            2/2     Running   0          29m

[root@master ~]# kubectl exec -it pod-with-shared-volume-fsgroup -c first sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
/ $ id
uid=1111 gid=0(root) groups=555,666,777

id命令显示, 这个pod运行在ID为1111 的用户下, 它的用户组为0 (root),但用户组555、 666、 777也关联到了该用户下。

在pod的定义中, 将fsGroup设置成了555, 因此, 存储卷属千用户组ID为555 的用户组

/ $ ls -ld /volume
drwxrwsrwx    2 root     555           4096 Aug 12 02:16 /volume

该容器在这个存储卷所在目录中创建的文件, 所属的用户ID为1111,即该容器运行时使用的用户ID),所属的用户组ID为555 :

/ $ echo foo > /volume/foe
/ $ ls -l /volume/
total 4
-rw-r--r--    1 1111     555              4 Aug 12 02:49 foe

这个文件的所属用户情况与通常设置下的新建文件不同。 在通常情况下, 某一用户新创建文件所属的用户组ID,与该用户的所属用户组ID相同,在这种情下是0。在这个容器的根文件系统中创建一个文件, 可以验证这一点:

/ $ ls -l /tmp/
total 4
-rw-r--r--    1 1111     root             4 Aug 12 02:54 foo

如你所见, 安全上下文中的fsGroup属性当进程在存储卷中创建文件时起作用, 而supplementalGroups属性定义了某个用户所关联的额外的用户组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值