![](/img/trans.png)
[英]EFS mount on ECS Fargate - Read/write permissions denied for non root user
[英]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 访问,因为我们指定fsGroup
和fsGroupChangePolicy
。 我想这也行得通,因为在其中一个安装的文件夹中运行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.