这篇文章发布已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。

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 驱动程序。这是通过 NodeStageVolumeRequestNodePublishVolumeRequest 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 中指定的策略,对这些卷中的文件执行所有权和权限更改。