繁体   English   中英

如何为我的非 root 用户授予对 kube.netes 卷挂载的写入权限?

[英]How can I give my non-root user write permissions on a kubernetes volume mount?

根据我的理解(基于本指南https://snyk.io/blog/10-kube.netes-security-context-settings-you-should-understand/ ),如果我为某些 kube 指定了以下安全上下文。网荚

securityContext:
  # Enforce to be run as non-root user
  runAsNonRoot: true
  # Random values should be fine
  runAsUser: 1001
  runAsGroup: 1001
  # Automatically convert mounts to user group
  fsGroup: 1001
  # For whatever reasons this is not working
  fsGroupChangePolicy: "Always"

我希望这个 pod 以用户 1001 和组 1001 的身份运行。这是按预期工作的,因为在容器中运行id会导致: uid=1001 gid=1001 groups=1001

所有挂载的文件系统应该自动被用户组 1001 访问,因为我们指定fsGroupfsGroupChangePolicy 我想这也行得通,因为在其中一个安装的文件夹中运行ls -l时,我可以看到文件的访问权限如下所示: -rw-r--r-- 1 50004 50004 所有权仍然属于初始化时使用的 uid 和 gid,但我可以看到该文件现在可供其他人读取。

现在的问题是如何为我的fsGroup添加写权限,这些权限似乎仍然缺失?

您需要在 pod/deployment/{supported_kinds} 中添加一个额外的init_container ,并使用命令将安装在 pod 上的卷的权限授予/更改为容器在运行时使用的用户 ID。

 initContainers:
  - name: volumepermissions
    image: busybox ## any image having linux utilities mkdir,echo,chown will work.
    imagePullPolicy: IfNotPresent
    env:
      - name: "VOLUME_DATA_DIR"
        value: mountpath_for_the_volume
    command:
      - sh
      - -c
      - |
        mkdir -p $VOLUME_DATA_DIR
        chown -R 1001:1001 $VOLUME_DATA_DIR 

        echo 'Volume permissions OK ✓'
    volumeMounts:
      - name: data
        mountPath: mountpath_for_the_volume

当 pod 中的容器以 root 以外的用户身份运行并且需要对已安装卷的写入权限时,这是必需的。

如果这是一个 helm 模板,这个 init 容器可以创建为一个模板,并在所有 pod/deployments/{supported kinds} 中使用以更改卷权限。

更新:如@The Fool 所述,如果您使用的是 Kube.netes v1.23 或更高版本,它应该按照当前设置工作。 在 v1.23 securityContext.fsGroup 和 securityContext.fsGroupChangePolicy功能进入 GA/stable 之后。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM