本文已发布超过一年。较早的文章可能包含过时内容。请检查页面中的信息自发布以来是否已发生变化。
Kubernetes 1.26: 支持在挂载时将 Pod 的 fsGroup 传递给 CSI Driver
fsGroup
对 CSI 驱动的委托功能首次在 Kubernetes 1.22 中以 Alpha 状态引入,并在 Kubernetes 1.25 中升级到 Beta。对于 Kubernetes 1.26,我们很高兴地宣布此功能已升级到正式可用 (GA)。
在此版本中,如果你为(Linux)Pod 在安全上下文中指定了 fsGroup
,则 Pod 中所有容器内的进程都属于你指定的附加组。
在之前的 Kubernetes 版本中,kubelet 会总是根据你在 Pod 的 .spec.securityContext.fsGroupChangePolicy
字段中指定的策略,对卷中的文件应用 fsGroup
所有权和权限更改。
从 Kubernetes 1.26 开始,CSI 驱动可以选择在卷挂载时应用 fsGroup
设置,这使得 kubelet 无需更改这些卷中文件和目录的权限。
工作原理是什么?
支持此功能的 CSI 驱动应声明其支持 VOLUME_MOUNT_GROUP
节点能力。
在识别此信息后,kubelet 在 Pod 启动期间通过 NodeStageVolumeRequest
和 NodePublishVolumeRequest
CSI 调用将 fsGroup
信息传递给 CSI 驱动。
因此,CSI 驱动应使用挂载选项将 fsGroup
应用于卷中的文件。例如,Azure File CSIDriver 利用 gid
挂载选项将 fsGroup
信息映射到卷中的所有文件。
需要注意的是,在上面的例子中,kubelet 没有直接更改该卷文件中文件和目录的权限。此外,两个策略定义不再生效:CSIDriver 对象的 .spec.fsGroupPolicy
和 Pod 的 .spec.securityContext.fsGroupChangePolicy
。
有关此功能内部工作原理的更多详细信息,请查看增强提案以及 CSI 开发者文档中的CSI 驱动 fsGroup 支持。
为什么重要?
如果没有此功能,在某些存储环境中无法将 fsGroup 信息应用于文件。
例如,Azure 文件不支持 POSIX 风格的文件所有权和权限概念。CSI 驱动只能在卷级别设置文件权限。
如何使用它?
此功能对用户应该是基本透明的。如果你维护一个应支持此功能的 CSI 驱动,请阅读CSI Driver fsGroup
支持以获取更多关于如何在你的 CSI 驱动中支持此功能的信息。
现有的不支持此功能的 CSI 驱动将继续正常工作:它们不会从 kubelet 接收任何 fsGroup
信息。此外,对于这些卷,kubelet 将继续根据 CSIDriver 中 .spec.fsGroupPolicy
和相关 Pod 中 .spec.securityContext.fsGroupChangePolicy
中指定的策略对文件执行所有权和权限更改。