kubernetes支持很多种Volume,比如NFS,甚至AWS的EBS,阿里云的OSS等。某些时候,我们可能需要针对不同的容器,挂载一个存储卷的不同子目录,以达到控制权限等目的。比如将用户数据放在一个NFS文件系统上,不同的用户区分不同的子目录。如果每个用户的容器,都直接挂载了整个NFS,同时又不能封禁容器的外网访问,那么这样是不安全的,如果被反弹Shell之后,会存在安全隐患。我们可以通过subPath来解决这个问题。以hostPath类型的Volume为例,假设我们需要挂载/srv/aaa/bbb这个目录到/mnt/aaa/bbb,以及/srv/ccc/ddd目录到/mnt/ccc/ddd,而/srv下面的其他目录和文件,希望在容器中不可见,那么这样就可以做到:
1 | apiVersion: v1 |
启动容器之后,我们通过kubectl exec -it nginx /bin/bash
连进去查看是否达到我们想要的效果。
而在节点上的/srv是这样的:
确实实现了只挂载特定子目录。