NFS/hostPath 在 kubernetes 中挂载为非 root

Posted

技术标签:

【中文标题】NFS/hostPath 在 kubernetes 中挂载为非 root【英文标题】:NFS/hostPath mount as non-root in kubernetes 【发布时间】:2021-07-02 14:05:29 【问题描述】:

如何以 Alejandra(1001) 用户身份挂载 NFS?

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: external-ns
  name: app1
  labels:
    app: app1
  annotations:
    pv.beta.kubernetes.io/gid: "1001"
spec:
  replicas: 1 
  selector:
    matchLabels:
      app: app1
  template:
    metadata:
      labels:
        app: app1
    spec:
      securityContext:
        runAsUser: 1001
        runAsGroup: 1001
        fsGroup: 1001
      nodeSelector:
        node-role.kubernetes.io/worker: worker 
      containers:
        - image: 192.168.1.1:5000/app1
          imagePullPolicy: Always
          name: app1
          volumeMounts:
            - mountPath: /app/var
              name: networkshared-fs-0
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: networkshared-fs-0
spec:
  capacity:
    storage: 80Gi
  accessModes:
    - ReadWriteMany
  mountOptions:
    - vers=4.0
  nfs:
    path: /var/lib/alejandra
    server: 192.168.1.2
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: alejandra-dashboard
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

当我执行 ls 时,我得到了这个:

kubectl exec -ti app1-XXX -- ls -al /var
total 12                                                                                     
drwxr-xr-x. 2 root   root   4096 Jul  1 12:48 .                                              
drwxr-xr-x. 1 alejandra alejandra 4096 Jul  2 11:20 .. 

NFS 服务器确实有这个 /etc/exports:

/var/lib/alejandra 10.0.0.13/32(rw,no_root_squash,no_subtree_check) /var/lib/alejandra 10.0.0.13/32(rw,no_root_squash,no_subtree_check)

谢谢

更新:hostPath 也是如此。

【问题讨论】:

嗨,你有没有看到类似的问题:serverfault.com/questions/1025819? nfs 卷允许将现有的 NFS(网络文件系统)共享挂载到 Pod 中。您是否尝试将Deployment 更改为Pod?您还可以找到有关卷权限的文档here 我无法切换到 pod,因为我使用了部署。无论如何,hostPath 存储也是如此。 你需要挂载hostPathnfs 而不是部署到你的pod中。 hostPath 卷将文件或目录从主机节点的文件系统安装到您的 Pod 中。 nfs 卷允许将现有的 NFS(网络文件系统)共享挂载到 Pod 中。你可以阅读更多here 【参考方案1】:

你需要使用provisioner,看看,仅仅设置NFS是不够的,你需要添加角色和角色绑定,SA等

https://github.com/kubernetes-sigs/nfs-ganesha-server-and-external-provisioner

【讨论】:

以上是关于NFS/hostPath 在 kubernetes 中挂载为非 root的主要内容,如果未能解决你的问题,请参考以下文章

K8S-PV和PVC的实践

K8S-PV和PVC的实践

在AWS上部署kubernetes

细数Kubernetes Service那些事——Kubernetes服务发布以及在eBay的实践

Kubernetes存储

Kubernetes In Action :2开始使用Kubernetes和Docker