【发布时间】:2018-11-23 19:14:38
【问题描述】:
好吧,我现在正在用头撞墙好几天......
我的用例: 我在自己的裸机云上,我正在运行 ubuntu 机器并在 4 台机器上设置 kubernetes,一台主机 3 台工人。我创建了一个私有注册表和证书管理器等。
nfs 共享也在工作节点上
我有一个软件必须在 pod 中以 root 身份运行现在我希望这个 root 用户将数据存储在 nfs 共享上的持久卷上。
root_squash 咬我但是...
我已经创建了卷和声明,如果我不是 pod 内的根,则一切正常。当 root 时,nfs 共享上的文件被压缩到nobody:nogroup 并且 pod 内的 root 用户不能再使用它们...
怎么办?
1) 使用 no_root_squash 选项导出 nfs 共享,但考虑到安全问题,这似乎是一个非常糟糕的主意,不确定仅通过防火墙规则是否可以缓解这种情况?
2) 我为 fsGroup 和 uid en gid 挂载选项尝试了各种 securityContext 选项,只要你不是 de pod 的 root,一切都可以正常工作......但我不确定我是否完全理解这一点所以
我的电脑 yaml:
apiVersion: v1
kind: PersistentVolume
metadata:
name: s03-pv0004
annotations:
pv.beta.kubernetes.io/gid: "1023"
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /data/k8s/pv0004
server: 212.114.120.61
如您所见,我创建了一个具有 uid 1023 的专用 nfsuser 并使用它来使 pod 以该用户身份存储数据...只要我不在 pod 内就可以正常工作...
我正在运行的 pod 是有状态集合中的 MarkLogic pod,如下所示:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: marklogic
namespace: default
spec:
selector:
matchLabels:
app: marklogic
serviceName: "ml-service"
replicas: 3
template:
metadata:
labels:
app: marklogic
spec:
securityContext:
fsGroup: 1023
... more
runAsUser: 1023 有效,但如果我想成为 pod 内的 root,则再次无效...
我的问题:可以做到吗,以 root 身份运行 pod 并仍然使用 nfs 作为具有安全 nfs 共享的持久卷(即不使用 no_root_squash)???
还是我需要放弃 nfs 的想法并转向像 glusterfs 这样的替代方案?
【问题讨论】:
-
我有类似的设置,并且个人使用 no_root_squash,但可能会尝试使用动态 NFS 客户端配置器:github.com/helm/charts/tree/master/stable/… 它似乎创建具有 0777 权限的文件 - 不确定它会如何不过反映在您的 NFS 驱动器上:github.com/kubernetes-incubator/external-storage/blob/master/… 此外,您可以在 /etc/exports 文件中指定 NFS 驱动器的客户端 IP,因此 imo no_root_squash 应该不是一个大的安全问题。
标签: kubernetes root nfs persistent-volumes