本篇文章已超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

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 File CSIDriver 利用 gid 掛載選項將 fsGroup 資訊對應到磁碟區中的所有檔案。

應注意,在上述範例中,kubelet 避免直接將權限變更套用至該磁碟區檔案中的檔案和目錄。此外,以下兩個策略定義不再有效:CSIDriver 物件的 .spec.fsGroupPolicy 和 Pod 的 .spec.securityContext.fsGroupChangePolicy

有關此功能內部運作的更多詳細資訊,請查看 增強提案 和 CSI 開發人員文件中的 CSI 驅動程式 fsGroup 支援

為何這很重要?

若沒有此功能,在某些儲存環境中,將 fsGroup 資訊套用至檔案是不可能的。

例如,Azure File 不支援 POSIX 樣式檔案所有權和權限的概念。CSI 驅動程式只能在磁碟區層級設定檔案權限。

我該如何使用它?

此功能對使用者而言應大致上是透明的。如果您維護應支援此功能的 CSI 驅動程式,請閱讀 CSI 驅動程式 fsGroup 支援,以取得有關如何在您的 CSI 驅動程式中支援此功能的更多資訊。

不支援此功能的現有 CSI 驅動程式將繼續照常運作:它們不會從 kubelet 接收任何 fsGroup 資訊。除此之外,kubelet 將繼續根據 .spec.fsGroupPolicy (針對 CSIDriver) 和 .spec.securityContext.fsGroupChangePolicy (針對相關 Pod) 中指定的策略,對這些磁碟區的檔案執行所有權和權限變更。