我想从docker容器访问Windows文件共享共享(SMB3),但我不想危及主机的安全性。我读过的所有指南都指出,我需要使用--privileged
标志或--cap-add SYS_ADMIN
能力。
mount -t cifs -o用户名="some_account@mydomain.internal",密码="some_password"//192.168.123.123/MyShare/mnt/MyShare
结果是消息:
无法应用新的功能集。
当我应用--cap-add SYS_ADMIN
功能时,mount命令工作正常,但我理解这使主机暴露于明显的安全漏洞。
我也读了这个StackOverflow问题中的建议(在Docker容器内挂载SMB/CIFS共享)在运行Docker的服务器上本地挂载卷。这是不可取的,有两个原因,首先,容器是由Rancher Kubernetes集群编排的,我不知道如何使用Rancher实现nPcomp所描述的内容,其次,这意味着卷可以被docker主机访问。我宁愿只容器访问这个共享通过凭证给它通过秘密。
我的问题是:有没有办法在docker容器(在Kubernetes内)中挂载CIFS/SMB3共享,而不会将主机暴露于特权升级漏洞和保护凭据?多谢。
经过更多的研究,我已经找到了如何做到这一点。SMB有一个容器存储接口(CSI)驱动程序,名为SMB CSI driver for Kubernetes(https://github.com/kubernetes-csi/csi-driver-smb) .
使用helm (https://github.com/kubernetes-csi/csi-driver-smb/tree/master/charts)安装CSI驱动程序后,您可以在https://github.com/kubernetes-csi/csi-driver-smb/blob/master/deploy/example/e2e_usage.md (选项#2创建PV/PVC)来创建挂载SMB3共享的持久卷(PV)和持久卷声明(PVC)。
然后你创建你的容器,并给它相应的持久卷声明,指定你想挂载它作为/mnt/myshare等。
我对此进行了测试,它被自动部署到多个工作节点并且工作良好,而不需要将privileged
标志或--cap-add SYS_ADMIN
给予容器。
支持SMB3甚至身份验证&加密。要启用加密,请转到Windows服务器>文件和存储服务,选择共享,属性>设置在加密数据访问。
Wireshark显示所有SMB流量都是加密的。我唯一不记得的是,如果你必须首先手动安装cifs-utils
,因为我已经在我所有的节点上这样做了,我无法测试。
希望这能帮助到一些人。