架構
儘管NetApp ONTAP支援的 Red Hat OpenShift 和Trident預設不提供工作負載之間的隔離,但它們提供了可用於配置多租用戶的廣泛功能。為了更好地理解在由NetApp ONTAP支援的Trident的 Red Hat OpenShift 叢集上設計多租用戶解決方案,讓我們考慮一個具有一組需求的範例並概述圍繞它的配置。
假設一個組織在 Red Hat OpenShift 叢集上執行兩個工作負載,這是兩個不同團隊正在進行的兩個專案的一部分。這些工作負載的資料駐留在由Trident在NetApp ONTAP NAS 後端動態配置的 PVC 上。該組織需要為這兩個工作負載設計一個多租戶解決方案,並隔離用於這些專案的資源,以確保維護安全性和效能,主要專注於為這些應用程式提供服務的資料。
下圖描述了由NetApp ONTAP支援的具有Trident的 Red Hat OpenShift 叢集上的多租用戶解決方案。
技術要求
-
NetApp ONTAP儲存叢集
-
Red Hat OpenShift 叢集
-
Trident
Red Hat OpenShift – 叢集資源
從 Red Hat OpenShift 叢集的角度來看,首先要啟動的頂層資源是專案。 OpenShift 專案可以看作是一個叢集資源,它將整個 OpenShift 叢集劃分為多個虛擬叢集。因此,專案層級的隔離為配置多租戶提供了基礎。
接下來是在叢集中設定 RBAC。最佳實務做法是將所有參與單一專案或工作負載的開發人員設定到身分識別提供者 (IdP) 中的單一使用者群組。Red Hat OpenShift 支援 IdP 整合和使用者群組同步,因此可以將 IdP 中的使用者和群組匯入叢集中。這有助於叢集管理員將專用於特定專案的叢集資源存取隔離給參與該專案的使用者群組,從而限制對任何叢集資源的未授權存取。若要深入瞭解 IdP 與 Red Hat OpenShift 的整合,請參閱 "了解身分提供者"。
NetApp ONTAP
隔離作為 Red Hat OpenShift 叢集的持久性儲存提供者的共用儲存非常重要,以確保在每個專案的儲存上建立的磁碟區對於主機來說就像是在單獨的儲存空間上建立的一樣。為此,請在NetApp ONTAP上建立與專案或工作負載數量相同的 SVM(儲存虛擬機器),並將每個 SVM 專用於一個工作負載。
Trident
在 NetApp ONTAP 上為不同專案建立不同的 SVM 後,您必須將每個 SVM 對應到不同的 Trident 後端。Trident 上的後端組態決定了持續儲存設備對 OpenShift 叢集資源的分配,因此需要提供要對應的 SVM 詳細資訊。這至少應該是後端的協定驅動程式。此外,您還可以選擇定義如何在儲存設備上配置 Volume,並設定 Volume 大小或 Aggregate 使用量等的限制。有關 Trident 後端定義的詳細資訊,請參閱 "配置後端"。
Red Hat OpenShift – 儲存資源
設定 Trident 後端之後,下一步是設定 StorageClasses。設定與後端數量相同的儲存類別,讓每個儲存類別僅能在一個後端上存取以增加磁碟 Volume。我們可以在定義儲存類別時,使用 storagePools 參數將 StorageClass 對應到特定的 Trident 後端。定義儲存類別的詳細資訊可在 "建立儲存類別" 中找到。因此,從 StorageClass 到 Trident 後端存在一對一的對應關係,而該後端會指向回一個 SVM。這可確保透過分配給該專案的 StorageClass 所提出的所有儲存宣告,都僅由專用於該專案的 SVM 提供服務。
由於儲存設備類別並非命名空間資源,我們如何確保一個專案中的 Pod 對另一個命名空間或專案中的儲存設備類別的聲明被拒絕?答案是使用 ResourceQuotas。ResourceQuotas 是控制每個專案資源總使用量的物件。它可以限制專案中物件可以使用的資源數量和總量。幾乎所有專案的資源都可以使用 ResourceQuotas 進行限制,有效地使用此功能可以幫助組織降低成本,並減少因過度資源配置或過度消耗資源而導致的停機。如需更多資訊,請參閱 "為每個專案設定資源配額"。
對於這種用例,我們需要限制特定專案中的 pod 從非專用於其專案的儲存類別中聲明儲存。為此,我們需要透過設定來限制其他儲存類別的持久性卷聲明 `<storage-class-name>.storageclass.storage.k8s.io/persistentvolumeclaims`為 0。此外,叢集管理員必須確保專案中的開發人員無權修改資源配額。