部署Openpai后,我使用了nfs-server-alpine镜像为深度学习环境搭建数据存储服务。不使用Openpai的storage-manager的原因是,当需要升级Openpai时,storage-manager也会一并关闭升级,这就导致所有运行中的服务由于IO错误而被迫中断。另一方面,考虑到数据存储服务与Openpai耦合性也没那么高,完全可以自己部署。
但是这样部署存在的问题是,nfs-server-alpine直接将共享目录暴露于IP:/
下。那么,只要黑客使用nfs挂载命令扫描到你的IP,那么你的所有数据均暴露无疑。
刚开始的时候直接使用nfs-server-alpine介绍里面的方法限制客户端IP,但是发现,除了使用'*'以外,使用其他配置,客户端都无法挂载。
思考:在保证nfs服务器没问题的情况下,客户端IP又在共享列表中,但是却无法挂载。那么可能的原因是,是否客户端到服务器的链路中存在NAT转换,导致实际到达服务器的IP已经不是客户端的IP了。
启发:我的所有节点都在同一个网段中,本身不存在NAT。那另一个存在NAT的地方也只有docker了。
问题:客户端到服务器的链路是正确的,但是服务器接收到客户端的请求后将请求提交给容器时使用NAT转换。
解决方案:nfs容器使用主机网络(host network)可去除NAT转换。
最后docker-compose.yml配置文件如下:
1 | version: "2.1" |