我想从 docker 容器访问 Windows 文件共享共享 (SMB3),但我不想损害主机的安全性。我读过的所有指南都表明我需要使用--privileged
旗帜或--cap-add SYS_ADMIN
能力。
这是我使用的命令:
挂载-t cifs -o
用户名='[电子邮件受保护] /cdn-cgi/l/email-protection',password='some_password'
//192.168.123.123/MyShare /mnt/myshare
结果是消息:
无法应用新的功能集。
当我应用--cap-add SYS_ADMIN
mount 命令工作正常,但我知道这会使主机面临明显的安全漏洞。
我还阅读了此 StackOverflow 问题中的建议(在 Docker 容器内挂载 SMB/CIFS 共享 https://stackoverflow.com/questions/27989751/mount-smb-cifs-share-within-a-docker-container) 将卷本地安装到运行 docker 的服务器上。这是不可取的,原因有两个,首先,容器是由 Rancher Kubernetes 集群编排的,我不知道如何使用 Rancher 实现 nPcomp 所描述的内容,其次,这意味着 docker 主机可以访问该卷。我希望只有容器可以通过秘密提供的凭据访问此共享。
我的问题是:有没有办法在 docker 容器(在 Kubernetes 内)中挂载 CIFS/SMB3 共享,而不会让主机面临权限提升漏洞并保护凭据?非常感谢。
经过更多研究后,我已经弄清楚如何做到这一点。有一个用于 SMB 的容器存储接口 (CSI) 驱动程序,称为适用于 Kubernetes 的 SMB CSI 驱动程序 (https://github.com/kubernetes-csi/csi-driver-smb https://github.com/kubernetes-csi/csi-driver-smb).
使用 helm 安装 CSI 驱动程序后(https://github.com/kubernetes-csi/csi-driver-smb/tree/master/charts https://github.com/kubernetes-csi/csi-driver-smb/tree/master/charts)您可以按照以下示例进行操作https://github.com/kubernetes-csi/csi-driver-smb/blob/master/deploy/example/e2e_usage.md 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 Server > 文件和存储服务,选择共享、属性 > 设置 > 加密数据访问。
Wireshark 显示所有 SMB 流量均已加密。我唯一不记得的是是否必须安装cifs-utils
首先手动进行,因为我已经在我无法测试的所有节点上完成了此操作。
希望这对某人有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)