好吧,我的头已经撞到墙上好几天了。。。
我的用例:我在我自己的裸金属云上,我运行ubuntu机器,并在4台机器上设置kubernetes,一台掌握3名工人。我创建了一个私人注册中心和证书管理器等
nfs共享也在工作节点上
我有一个必须在pod中以root身份运行的软件,现在我希望这个root用户将数据存储在nfs共享上的presistent卷上。
root_squash在咬我,但是。。。
我已经创建了卷和声明,如果我不是pod的根,所有的工作都可以。当nfs共享上的root文件被压缩到nobody时:nogroup和pod中的root用户就不能再使用它们了。。。
该怎么办?
1( 使用no_rootsquash选项导出nfs共享,但考虑到安全问题,这似乎是一个非常糟糕的主意,不确定是否可以仅通过防火墙规则来缓解?
2( 我为fsGroup和uid-en-gid装载选项提供了各种安全上下文选项,只要你不是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
正如您所看到的,我使用uid1023创建了一个专用的nfsuser,并使用它使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这样的替代方案?
我将尝试用非常简单的步骤回答:
1.你甚至可以让root_squash为k8s工作:
- run your containers as non root user: 1023 in your case
- chown -R 1023:1023 <nfs dir>
2.您可以使no_root_squash为k8s:工作
- run your containers as root user: 0
- chown -R root:root <nfs dir>
我已经从nfs存储转移到了kubernetes中的本地存储声明选项。这可以进行注释,以便每次重新创建需要PV的吊舱时都能降落在同一节点上。。。