【发布时间】:2018-04-03 01:59:27
【问题描述】:
在 kubernetes 中,我可以使用 PersistentVolumeClaim 创建一些存储,以后可以将其挂载到某个容器中。
但是,如果容器中的用户不是 root,则该用户将无法访问该目录,因为它归 root 所有。
访问此类卷的正确方法是什么? (在创建和挂载该卷时,我没有找到任何用户/权限选项。)
【问题讨论】:
标签: permissions kubernetes google-kubernetes-engine
在 kubernetes 中,我可以使用 PersistentVolumeClaim 创建一些存储,以后可以将其挂载到某个容器中。
但是,如果容器中的用户不是 root,则该用户将无法访问该目录,因为它归 root 所有。
访问此类卷的正确方法是什么? (在创建和挂载该卷时,我没有找到任何用户/权限选项。)
【问题讨论】:
标签: permissions kubernetes google-kubernetes-engine
首先,找出您的进程正在运行的 UID 号。
然后您可以通过添加.spec.securityContext.fsGroup 来告诉 Kubernetes 为您的 pod chown(某种程度)卷的挂载点:
spec:
...
securityContext:
fsGroup: 2000
fsGroup: integer:一个特殊的补充组,适用于一个 pod 中的所有容器。一些卷类型允许 Kubelet 将该卷的所有权更改为由 pod 拥有: 1. 拥有 GID 将是 FSGroup 2. setgid 位已设置(在卷中创建的新文件将归 FSGroup 所有) 3 . 权限位与 rw-rw 进行 OR'd---- 如果未设置,Kubelet 将不会修改任何卷的所有权和权限。
【讨论】:
我在 GKE 环境中也遇到了同样的问题。 securityContext 未修复权限问题。这是我所做的。
RUN adduser -s /bin/sh -u 1100 --disabled-password foo RUN apk add sudo RUN mkdir /app RUN mkdir /app/logs RUN chown -R foofoo /app /app/logs RUN chmod -R 777 /app/logs/ USER foo WORKDIR /app
将 PVC 挂载到部署 yaml 文件中的 pod 中
在 GKE 工作节点中创建相同的用户并授予挂载路径所需的权限。
/var/lib/docker/volumes/47aa3xxxxxxxxxxxxxxxxxxxx19dc2c864ed99676b/_data
【讨论】: