这篇文章发布已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。
Kubernetes 1.26:在挂载时支持将 Pod 的 fsGroup 传递给 CSI 驱动程序
将 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 启动期间将 fsGroup 信息传递给 CSI 驱动程序。这是通过 NodeStageVolumeRequest 和 NodePublishVolumeRequest CSI 调用完成的。
因此,CSI 驱动程序应使用挂载选项将 fsGroup 应用于卷中的文件。例如,Azure 文件 CSIDriver 利用 gid 挂载选项将 fsGroup 信息映射到卷中的所有文件。
应该注意的是,在上面的示例中,kubelet 避免直接将权限更改应用到该卷文件中的文件和目录。此外,两个策略定义不再起作用:CSI 驱动程序对象的 .spec.fsGroupPolicy 和 Pod 的 .spec.securityContext.fsGroupChangePolicy 都不起作用。
有关此功能内部运作的更多详细信息,请查看 增强提案 和 CSI 开发文档中的 CSI 驱动程序 fsGroup 支持。
为什么它很重要?
如果没有此功能,在某些存储环境中无法将 fsGroup 信息应用于文件。
例如,Azure 文件不支持 POSIX 风格的文件所有权和权限概念。CSI 驱动程序只能在卷级别设置文件权限。
如何使用它?
此功能对用户来说应该是大部分透明的。如果您维护一个应该支持此功能的 CSI 驱动程序,请阅读 CSI 驱动程序 fsGroup 支持,了解有关如何在 CSI 驱动程序中支持此功能的更多信息。
不支持此功能的现有 CSI 驱动程序将继续照常工作:它们不会从 kubelet 接收任何 fsGroup 信息。除此之外,kubelet 将继续根据 CSIDriver 的 .spec.fsGroupPolicy 和相关 Pod 的 .spec.securityContext.fsGroupChangePolicy 中指定的策略,对这些卷中的文件执行所有权和权限更改。