gpt4 book ai didi

docker - 在原子主机 : Permission Denied 上为 Kubernetes 1.5 配置 NFS 共享

转载 作者:行者123 更新时间:2023-12-02 12:21:33 27 4
gpt4 key购买 nike

我正在使用两个带有 Atomic Host 的 VM(1 个 Master,1 个 Node;Centos Image)。我想使用来自另一个 VM(Ubuntu Server 16.04)的 NFS 共享作为我的 pod 的持久卷。我可以手动挂载它们,并且在 Kubernetes(版本 1.5.2)中,持久卷已成功创建并绑定(bind)到我的 PVC。它们也安装在我的 pods 中。 但是当我尝试从 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 中,我创建了 guestbook具有 UID 1003 的用户和具有相同名称和 GID 的组 1003 :
RUN groupadd -r guestbook -g 1003 && useradd -u 1003 -r -g 1003 guestbook

在我的 NFS 主机上,我还有一个名为 guestbook 的用户。带有 UID 1003作为小组成员 nfs带 GID 1003 .共享文件夹(带有 ls -l )的权限如下:
drwxrwxrwx 2 guestbook nfs 4096 Feb 19 11:23 pv01

(世界可写,所有者留言簿,组nfs)。在我的 Pod 中,我可以看到已安装文件夹的权限 /data (再次使用 ls -l )为:
drwxrwxrwx. 2 guestbook guestbook 4096 Feb 9 13:37 data

持久卷是使用具有以下模式的 YAML 文件创建的:
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

Pod 是使用此 YAML 文件创建的:
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

以及带有 YAML 文件的 PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: get-started
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Mi

我为文件夹的所有者/组尝试了不​​同的配置。如果我使用我的普通用户(在所有系统上都相同)作为所有者和组,我可以手动挂载并在文件夹中读写。但我不想使用我的普通用户,而是使用另一个用户(尤其是不是特权用户)。

我必须设置什么权限,以便我在 Pod 中创建的用户可以写入 NFS 卷?

最佳答案

我找到了解决问题的方法:
偶然我发现了日志条目,每次我尝试从我的 pod 访问 NFS 卷时都会出现这些条目。他们说,SELinux 由于不同的安全上下文而阻止了对该文件夹的访问。

为了解决这个问题,我只需要打开相应的 SELinux bool 值 virt_use_nfs用命令

setsebool virt_use_nfs on

这必须在所有节点上完成才能使其正常工作。

编辑:
我记得,我现在使用 sec=sys作为 /etc/exports 中的挂载选项.这提供了基于创建文件的用户的 UID 和 GID 的访问控制(这似乎是默认设置)。如果您使用 sec=none您还必须打开 SELinux bool 值 nfsd_anon_write , 这样用户 nfsnobody有创建文件的权限。

关于docker - 在原子主机 : Permission Denied 上为 Kubernetes 1.5 配置 NFS 共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48989176/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com