如何为Kubernetes SMB FlexVolume挂载点授予非root用户写入权限
Kubernetes挂载Windows SMB共享非root用户无写入权限解决方案
核心原因是你配置的CIFS挂载参数未生效,且CIFS作为网络文件系统不支持挂载后修改权限/属主,按以下步骤调整即可:
1. 修正flexVolume挂载参数
你之前配置的mountOptions多了不必要的cifs前缀,导致后续dir_mode、file_mode参数被系统忽略,最终挂载使用默认的0755权限。同时需要显式指定非root用户对应的uid/gid,强制CIFS将挂载点属主映射为目标用户:
- 先在你的镜像内执行
id nobody确认nobody用户的uid和gid,CentOS系统默认nobody的uid/gid均为65534 - 调整Deployment的volume配置如下:
volumes: - name: windows-mount flexVolume: driver: microsoft.com/smb secretRef: name: centos-credentials options: mountOptions: 'dir_mode=0777,file_mode=0777,uid=65534,gid=65534,forceuid,forcegid' source: //100.200.300.400/windows-share
新增的forceuid、forcegid参数会强制CIFS使用你指定的uid/gid作为挂载点的属主,不会被服务端的权限配置覆盖。
2. 可选:配合Pod SecurityContext统一用户配置
如果你的非root用户不固定,可在Pod级别配置securityContext统一指定运行用户,和挂载参数的uid/gid保持一致即可:
spec: template: spec: securityContext: runAsUser: 65534 runAsGroup: 65534 fsGroup: 65534 # 其余配置保持不变
验证效果
重新apply部署后,进入Pod执行mount | grep windows-share,可以看到挂载参数已变为file_mode=0777,dir_mode=0777,uid=65534,gid=65534,此时nobody用户即可正常写入挂载目录。
内容的提问来源于stack exchange,提问作者Eyal Azran
相关产品推荐
相关产品推荐

