我正在使用两个带有Atomic Host的VM(1个Master,1个Node; Centos Image)。我想使用来自另一个VM(Ubuntu Server 16.04)的NFS共享作为我的pod的持久卷。我可以手动挂载它们并在Kubernetes(版本1.5.2)中成功创建持久卷并绑定到我的PVC。它们也安装在我的吊舱中。 但是当我尝试写入或甚至从pod中的相应文件夹中读取时,我收到错误Permission denied
。从我的研究中我认为,问题在于文件夹权限/所有者/我的NFS主机上的组。
我在Ubuntu VM上的导出文件(/etc/exports
)有10个共享,具有以下模式(两个IP是我的Atomic Host Master和Node的IP):
/home/user/pv/pv01 192.168.99.101(rw,insecure,async,no_subtree_check,no_root_squash) 192.168.99.102(rw,insecure,async,no_subtree_check,no_root_squash)
在我的pod的图像中,我创建了一个名为guestbook
的新用户,这样容器就不会使用特权用户,因为这种不安全。我阅读了许多帖子,如this one,该状态,您必须将权限设置为全局可写或使用相同的UID和GID作为共享文件夹。因此,在我的Dockerfile中,我创建了具有UID guestbook
的{{1}}用户和一个名称相同且GID为1003
的组:
1003
在我的NFS主机上,我还有一个名为RUN groupadd -r guestbook -g 1003 && useradd -u 1003 -r -g 1003 guestbook
的用户,其中UID guestbook
是GID 1003
的群组nfs
的成员。共享文件夹(1003
)的权限如下:
ls -l
(世界可写,所有者留言簿,组nfs)。在我的Pod中,我可以看到已安装文件夹drwxrwxrwx 2 guestbook nfs 4096 Feb 19 11:23 pv01
(再次使用/data
)的权限为:
ls -l
使用模式为
的YAML文件创建持久卷drwxrwxrwx. 2 guestbook guestbook 4096 Feb 9 13:37 data
使用此YAML文件创建Pod:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv01
annotations:
pv.beta.kubernetes.io/gid: "1003"
spec:
capacity:
storage: 200Mi
accessModes:
- ReadWriteOnce
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /home/user/pv/pv01
server: 192.168.99.104
带有YAML文件的PVC:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: get-started
spec:
replicas: 3
template:
metadata:
labels:
app: get-started
spec:
containers:
- name: get-started
image: docker.io/cebberg/get-started:custom5
ports:
- containerPort: 2525
env:
- name: GET_HOSTS_FROM
value: dns
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: redis
key: database-password
volumeMounts:
- name: log-storage
mountPath: "/data/"
imagePullPolicy: Always
securityContext:
privileged: false
volumes:
- name: log-storage
persistentVolumeClaim:
claimName: get-started
restartPolicy: Always
dnsPolicy: ClusterFirst
我为文件夹的所有者/组尝试了不同的配置。如果我使用我的普通用户(在所有系统上都是相同的)作为所有者和组,我可以手动挂载并在文件夹中读写。但我不想使用我的普通用户,而是使用其他用户(尤其不是特权用户)。
我必须设置哪些权限,以便我在Pod中创建的用户可以写入NFS卷?
答案 0 :(得分:1)
我找到了解决问题的方法: 我偶然发现了每次尝试从我的pod访问NFS卷时出现的日志条目。他们说,由于安全性不同,SELinux已经阻止了对该文件夹的访问。
要解决此问题,我只需使用命令
打开相应的SELinux布尔virt_use_nfs
setsebool virt_use_nfs on
必须在所有节点上完成此操作才能使其正常工作。
编辑:
我记得,我现在在sec=sys
中使用/etc/exports
作为挂载选项。这提供了基于创建文件的用户的UID和GID的访问控制(这似乎是默认的)。如果您使用sec=none
,则还必须打开SELinux布尔值nfsd_anon_write
,以便用户nfsnobody
具有创建文件的权限。