Skip to main content
本繁體中文版使用機器翻譯,譯文僅供參考,若與英文版本牴觸,應以英文版本為準。

準備配置帶有ONTAP NAS 驅動程式的後端

貢獻者 netapp-aruldeepa

了解配置具有ONTAP NAS 驅動程式的ONTAP後端的要求、驗證選項和匯出策略。

要求

  • 對於所有ONTAP後端, Trident要求至少將一個聚合分配給 SVM。

  • 您可以執行多個驅動程序,並建立指向其中一個或另一個驅動程式的儲存類別。例如,您可以設定一個使用以下方式的 Gold 類別: `ontap-nas`駕駛員和使用青銅級的駕駛員 `ontap-nas-economy`一。

  • 所有 Kubernetes 工作節點都必須安裝對應的 NFS 工具。請參閱"這裡"更多詳情請見下文。

  • Trident僅支援掛載到執行在 Windows 節點上的 pod 的 SMB 磁碟區。參考 準備配置SMB卷 了解詳情。

對ONTAP後端進行身份驗證

Trident提供兩種ONTAP後端身分驗證方式。

  • 基於憑證:此模式需要對ONTAP後端擁有足夠的權限。建議使用與預先定義的安全登入角色關聯的帳戶,例如: `admin`或者 `vsadmin`確保與ONTAP版本最大程度相容。

  • 基於證書:此模式要求後端安裝證書,以便Trident才能與ONTAP叢集通訊。此處,後端定義必須包含用戶端憑證、金鑰和受信任 CA 憑證(如果使用,建議使用)的 Base64 編碼值。

您可以更新現有後端,以在基於憑證的方法和基於憑證的方法之間進行切換。但是,一次只能支援一種身份驗證方法。要切換到不同的身份驗證方法,必須從後端配置中刪除現有方法。

警告 如果您嘗試同時提供憑證和證書,則後端建立將會失敗,並出現錯誤,提示設定檔中提供了多個驗證方法。

啟用基於憑證的身份驗證

Trident需要 SVM 範圍/叢集範圍管理員的憑證才能與ONTAP後端通訊。建議使用標準的、預先定義的角色,例如: admin`或者 `vsadmin。這樣可以確保與未來ONTAP版本向前相容,這些版本可能會公開一些功能 API,供未來的Trident版本使用。雖然可以建立自訂安全登入角色並將其與Trident一起使用,但不建議這樣做。

後端定義範例如下圖所示:

YAML
---
version: 1
backendName: ExampleBackend
storageDriverName: ontap-nas
managementLIF: 10.0.0.1
dataLIF: 10.0.0.2
svm: svm_nfs
credentials:
  name: secret-backend-creds
JSON
{
  "version": 1,
  "backendName": "ExampleBackend",
  "storageDriverName": "ontap-nas",
  "managementLIF": "10.0.0.1",
  "dataLIF": "10.0.0.2",
  "svm": "svm_nfs",
  "credentials": {
        "name": "secret-backend-creds"
    }
}

請注意,後端定義是唯一以純文字形式儲存憑證的地方。後端建立完成後,使用者名稱/密碼將使用 Base64 進行編碼,並儲存為 Kubernetes 金鑰。後端建立/更新是唯一需要了解憑證的步驟。因此,這是一項僅限管理員執行的操作,由 Kubernetes/儲存管理員執行。

啟用基於憑證的身份驗證

新的和現有的後端都可以使用憑證與ONTAP後端通訊。後端定義需要三個參數。

  • clientCertificate:客戶端憑證的 Base64 編碼值。

  • clientPrivateKey:關聯私鑰的 Base64 編碼值。

  • trustedCACertificate:受信任 CA 憑證的 Base64 編碼值。如果使用受信任的 CA,則必須提供此參數。如果沒有使用受信任的憑證授權機構,則可以忽略此步驟。

典型的工作流程包括以下步驟。

步驟
  1. 產生客戶端憑證和金鑰。產生時,將通用名稱 (CN) 設定為要進行驗證的ONTAP使用者。

    openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -keyout k8senv.key -out k8senv.pem -subj "/C=US/ST=NC/L=RTP/O=NetApp/CN=vsadmin"
  2. 在ONTAP叢集中新增受信任的 CA 憑證。這可能已經由儲存管理員處理了。如果沒有使用受信任的憑證授權機構,則忽略此操作。

    security certificate install -type server -cert-name <trusted-ca-cert-name> -vserver <vserver-name>
    ssl modify -vserver <vserver-name> -server-enabled true -client-enabled true -common-name <common-name> -serial <SN-from-trusted-CA-cert> -ca <cert-authority>
  3. 在ONTAP叢集上安裝客戶端憑證和金鑰(來自步驟 1)。

    security certificate install -type client-ca -cert-name <certificate-name> -vserver <vserver-name>
    security ssl modify -vserver <vserver-name> -client-enabled true
  4. 確認ONTAP安全登入角色支持 `cert`身份驗證方法。

    security login create -user-or-group-name vsadmin -application ontapi -authentication-method cert -vserver <vserver-name>
    security login create -user-or-group-name vsadmin -application http -authentication-method cert -vserver <vserver-name>
  5. 使用產生的憑證進行身份驗證。請將 < ONTAP管理 LIF> 和 <vserver 名稱> 替換為管理 LIF IP 位址和 SVM 名稱。您必須確保 LIF 的服務策略已設定為 default-data-management

    curl -X POST -Lk https://<ONTAP-Management-LIF>/servlets/netapp.servlets.admin.XMLrequest_filer --key k8senv.key --cert ~/k8senv.pem -d '<?xml version="1.0" encoding="UTF-8"?><netapp xmlns="http://www.netapp.com/filer/admin" version="1.21" vfiler="<vserver-name>"><vserver-get></vserver-get></netapp>'
  6. 使用 Base64 對憑證、金鑰和受信任的 CA 憑證進行編碼。

    base64 -w 0 k8senv.pem >> cert_base64
    base64 -w 0 k8senv.key >> key_base64
    base64 -w 0 trustedca.pem >> trustedca_base64
  7. 使用上一步獲得的值建立後端。

    cat cert-backend-updated.json
    {
    "version": 1,
    "storageDriverName": "ontap-nas",
    "backendName": "NasBackend",
    "managementLIF": "1.2.3.4",
    "dataLIF": "1.2.3.8",
    "svm": "vserver_test",
    "clientCertificate": "Faaaakkkkeeee...Vaaalllluuuueeee",
    "clientPrivateKey": "LS0tFaKE...0VaLuES0tLS0K",
    "storagePrefix": "myPrefix_"
    }
    
    #Update backend with tridentctl
    tridentctl update backend NasBackend -f cert-backend-updated.json -n trident
    +------------+----------------+--------------------------------------+--------+---------+
    |    NAME    | STORAGE DRIVER |                 UUID                 | STATE  | VOLUMES |
    +------------+----------------+--------------------------------------+--------+---------+
    | NasBackend | ontap-nas      | 98e19b74-aec7-4a3d-8dcf-128e5033b214 | online |       9 |
    +------------+----------------+--------------------------------------+--------+---------+

更新身份驗證方法或輪換憑證

您可以更新現有後端,以使用不同的身份驗證方法或輪換其憑證。這種方法是雙向的:使用使用者名稱/密碼的後端可以更新為使用憑證;使用憑證的後端可以更新為基於使用者名稱/密碼的後端。為此,您必須刪除現有的身份驗證方法並新增新的身份驗證方法。然後使用包含所需參數的更新後的 backend.json 檔案來執行 tridentctl update backend

cat cert-backend-updated.json
{
"version": 1,
"storageDriverName": "ontap-nas",
"backendName": "NasBackend",
"managementLIF": "1.2.3.4",
"dataLIF": "1.2.3.8",
"svm": "vserver_test",
"username": "vsadmin",
"password": "password",
"storagePrefix": "myPrefix_"
}
#Update backend with tridentctl
tridentctl update backend NasBackend -f cert-backend-updated.json -n trident
+------------+----------------+--------------------------------------+--------+---------+
|    NAME    | STORAGE DRIVER |                 UUID                 | STATE  | VOLUMES |
+------------+----------------+--------------------------------------+--------+---------+
| NasBackend | ontap-nas      | 98e19b74-aec7-4a3d-8dcf-128e5033b214 | online |       9 |
+------------+----------------+--------------------------------------+--------+---------+
註 輪換密碼時,儲存管理員必須先更新ONTAP上使用者的密碼。接下來將進行後端更新。輪換證書時,可以為使用者新增多個證書。然後更新後端以使用新證書,之後即可從ONTAP叢集中刪除舊證書。

更新後端不會中斷對已建立磁碟區的訪問,也不會影響之後建立的磁碟區連線。後端更新成功表明Trident可以與ONTAP後端通訊並處理未來的磁碟區操作。

為Trident建立自訂ONTAP角色

您可以建立一個具有最低權限的ONTAP叢集角色,這樣您就不必使用ONTAP管理員角色在Trident中執行操作。在Trident後端設定中包含使用者名稱時, Trident將使用您建立的ONTAP叢集角色來執行操作。

請參閱"Trident自訂角色產生器"有關建立Trident自訂角色的詳細資訊。

使用ONTAP CLI
  1. 使用以下命令建立新角色:

    security login role create <role_name\> -cmddirname "command" -access all –vserver <svm_name\>

  2. 為Trident用戶建立使用者名稱:

    security login create -username <user_name\> -application ontapi -authmethod <password\> -role <name_of_role_in_step_1\> –vserver <svm_name\> -comment "user_description"

  3. 將角色映射到使用者:

    security login modify username <user_name\> –vserver <svm_name\> -role <role_name\> -application ontapi -application console -authmethod <password\>

使用系統管理員

在ONTAP系統管理員中執行下列步驟:

  1. 建立自訂角色

    1. 若要在叢集層級建立自訂角色,請選擇「叢集 > 設定」。

      (或)若要在 SVM 層級建立自訂角色,請選擇「儲存」>「儲存虛擬機器」> required SVM > 設定 > 使用者和角色*。

    2. 選擇“使用者和角色”旁邊的箭頭圖示()。

    3. 在“角色”下選擇“+添加”。

    4. 定義角色規則,然後點選「儲存」。

  2. 將角色對應到Trident使用者: + 在「使用者和角色」頁面上執行下列步驟:

    1. 在「使用者」下方選擇「新增」圖示 +

    2. 選擇所需的使用者名,然後在「角色」下拉式選單中選擇角色。

    3. 點選“儲存”。

更多資訊請參閱以下頁面:

管理 NFS 導出策略

Trident使用 NFS 匯出策略來控制對其所配置磁碟區的存取。

Trident在處理出口策略時提供兩種選擇:

  • Trident可以動態管理匯出策略本身;在這種操作模式下,儲存管理員指定 CIDR 區塊列表,這些 CIDR 區塊代表可接受的 IP 位址。 Trident會在發佈時自動將屬於這些範圍的適用節點 IP 新增至匯出原則。或者,如果沒有指定 CIDR,則會將發布捲的節點上找到的所有全域範圍的單播 IP 新增至匯出策略。

  • 儲存管理員可以建立匯出策略並手動新增規則。除非在組態中指定了不同的導出策略名稱,否則Trident將使用預設導出策略。

動態管理出口策略

Trident提供了動態管理ONTAP後端匯出策略的功能。這樣,儲存管理員就可以指定工作節點 IP 的允許位址空間,而無需手動定義明確的規則。它大大簡化了導出策略管理;對導出策略的修改不再需要對儲存叢集進行人工幹預。此外,這有助於將對儲存叢集的存取限制在僅允許掛載磁碟區且 IP 位址在指定範圍內的節點上,從而支援細粒度和自動化管理。

註 使用動態匯出策略時,請勿使用網路位址轉換(NAT)。使用 NAT 時,儲存控制器看到的是前端 NAT 位址而不是實際的 IP 主機位址,因此在匯出規則中找不到匹配項時,存取將被拒絕。

例子

必須使用兩種配置選項。以下是一個後端定義範例:

---
version: 1
storageDriverName: ontap-nas-economy
backendName: ontap_nas_auto_export
managementLIF: 192.168.0.135
svm: svm1
username: vsadmin
password: password
autoExportCIDRs:
  - 192.168.0.0/24
autoExportPolicy: true
註 使用此功能時,必須確保 SVM 中的根連接點具有先前建立的匯出策略,該策略的匯出規則允許節點 CIDR 區塊(例如預設匯出策略)。始終遵循NetApp推薦的最佳實踐,為Trident專用一個 SVM。

以下以上述範例為例,說明此功能的工作原理:

  • autoExportPolicy`設定為 `true。這表示Trident會為使用從後端配置的每個磁碟區建立一個匯出策略。 `svm1`使用 SVM 處理規則的新增和刪除 `autoexportCIDRs`地址塊。在磁碟區連接到節點之前,該磁碟區使用空的匯出策略,沒有任何規則來防止對該磁碟區的未經授權的存取。當磁碟區發佈到節點時, Trident會建立一個匯出策略,該策略的名稱與包含指定 CIDR 區塊內節點 IP 的底層 qtree 的名稱相同。這些 IP 位址也會加入到父FlexVol volume所使用的匯出策略中。

    • 例如:

      • 後端 UUID 403b5326-8482-40db-96d0-d83fb3f4daec

      • autoExportPolicy`設定為 `true

      • 儲存前綴 trident

      • PVC UUID a79bcf5f-7b6d-4a40-9876-e2551f159c1c

      • 名為 trident_pvc_a79bcf5f_7b6d_4a40_9876_e2551f159c1c 的 qtree 為名為FlexVol的 FlexVol 建立了一個匯出策略。 trident-403b5326-8482-40db96d0-d83fb3f4daec ,名為 qtree 的匯出策略
        `trident_pvc_a79bcf5f_7b6d_4a40_9876_e2551f159c1c`以及一個名為「空的匯出策略」的 `trident_empty`在支援向量機上。 FlexVol導出策略的規則將是 qtree 導出策略中包含的任何規則的超集。任何未附加的磁碟區都將重複使用空匯出策略。

  • `autoExportCIDRs`包含地址塊列表。此字段為可選字段,預設值為 ["0.0.0.0/0", "::/0"]。如果未定義, Trident會新增在工作節點上找到的所有具有發佈的全域作用域的單播位址。

在這個例子中, `192.168.0.0/24`已提供地址空間。這意味著,位於此位址範圍內且已發佈 Kubernetes 節點 IP 的節點將被加入到Trident建立的匯出策略中。當Trident註冊它運行所在的節點時,它會檢索該節點的 IP 位址,並將其與提供的位址區塊進行比對。 `autoExportCIDRs`在發佈時, Trident在過濾 IP 位址後,會為它要發佈到的節點的用戶端 IP 位址建立匯出政策規則。

您可以更新 `autoExportPolicy`和 `autoExportCIDRs`建立後端之後,需要進行以下操作。您可以為自動管理的後端新增新的 CIDR,或刪除現有的 CIDR。刪除 CIDR 時要格外小心,確保現有連線不會中斷。您也可以選擇停用 `autoExportPolicy`對於後端,如果出現問題,則回退到手動建立的匯出策略。這將需要進行設置 `exportPolicy`後端配置中的參數。

Trident建立或更新後端後,您可以使用下列指令檢查後端: `tridentctl`或相應的 `tridentbackend`CRD:

./tridentctl get backends ontap_nas_auto_export -n trident -o yaml
items:
- backendUUID: 403b5326-8482-40db-96d0-d83fb3f4daec
  config:
    aggregate: ""
    autoExportCIDRs:
    - 192.168.0.0/24
    autoExportPolicy: true
    backendName: ontap_nas_auto_export
    chapInitiatorSecret: ""
    chapTargetInitiatorSecret: ""
    chapTargetUsername: ""
    chapUsername: ""
    dataLIF: 192.168.0.135
    debug: false
    debugTraceFlags: null
    defaults:
      encryption: "false"
      exportPolicy: <automatic>
      fileSystemType: ext4

當一個節點被移除時, Trident會檢查所有匯出策略,以移除與該節點對應的存取規則。透過從受管後端匯出政策移除此節點 IP, Trident可以防止惡意掛載,除非叢集中的新節點重新使用此 IP。

對於先前存在的後端,使用以下方式更新後端: `tridentctl update backend`確保Trident自動管理出口策略。這樣,當需要時,就會建立兩個以以後端 UUID 和 qtree 名稱命名的新匯出策略。後端存在的磁碟區在卸載並重新掛載後,將使用新建立的匯出策略。

註 刪除具有自動管理匯出策略的後端將刪除動態建立的匯出策略。如果後端被重新創建,它將被視為一個新的後端,並將導致創建一個新的匯出策略。

如果正在執行中的節點的 IP 位址更新,則必須重新啟動該節點上的Trident pod。 Trident隨後將更新其管理的後端的匯出策略,以反映此 IP 變更。

準備配置SMB卷

稍作準備,您就可以使用以下方式設定 SMB 卷 `ontap-nas`司機。

警告 您必須在 SVM 上同時設定 NFS 和 SMB/CIFS 協定才能建立 `ontap-nas-economy`適用於ONTAP本地叢集的 SMB 磁碟區。如果未能配置這些協定中的任何一個,都會導致 SMB 磁碟區建立失敗。
註 `autoExportPolicy`不支援 SMB 磁碟區。
開始之前

在配置 SMB 磁碟區之前,您必須具備以下條件。

  • 一個 Kubernetes 叢集,包含一個 Linux 控制器節點和至少一個執行 Windows Server 2022 的 Windows 工作節點。 Trident僅支援掛載到執行在 Windows 節點上的 pod 的 SMB 磁碟區。

  • 至少有一個包含您的 Active Directory 憑證的Trident金鑰。生成秘密 smbcreds

    kubectl create secret generic smbcreds --from-literal username=user --from-literal password='password'
  • 配置為 Windows 服務的 CSI 代理程式。要配置 csi-proxy,請參閱"GitHub:CSI代理"或者"GitHub:適用於 Windows 的 CSI 代理"適用於在 Windows 上執行的 Kubernetes 節點。

步驟
  1. 對於本地部署的ONTAP,您可以選擇建立 SMB 共享,或者Trident可以為您建立一個。

    註 Amazon FSx for ONTAP需要 SMB 共用。

    您可以透過以下兩種方式之一建立 SMB 管理共用:"Microsoft 管理控制台"共用資料夾管理單元或使用ONTAP CLI。使用ONTAP CLI 建立 SMB 共享:

    1. 如有必要,請建立共用的目錄路徑結構。

      這 `vserver cifs share create`此指令檢查在建立共用時 -path 選項中指定的路徑。如果指定的路徑不存在,則命令執行失敗。

    2. 建立與指定 SVM 關聯的 SMB 共用:

      vserver cifs share create -vserver vserver_name -share-name share_name -path path [-share-properties share_properties,...] [other_attributes] [-comment text]
    3. 確認共享已建立:

      vserver cifs share show -share-name share_name
      註 請參閱"建立 SMB 共享"了解詳細資訊。
  2. 建立後端時,必須配置以下內容以指定 SMB 磁碟區。有關所有 FSx for ONTAP後端設定選項,請參閱"FSx for ONTAP設定選項和範例"

    範圍 描述 例子

    smbShare

    您可以指定以下一項:使用 Microsoft 管理控制台或ONTAP CLI 建立的 SMB 共用的名稱;允許Trident建立 SMB 共用的名稱;或者您可以將參數留空以防止對磁碟區的公共共用存取。對於本地部署的ONTAP,此參數是可選的。此參數是Amazon FSx for ONTAP後端所必需的,不能為空。

    smb-share

    nasType

    *必須設定為 smb.*如果為空,則預設為空。 nfs

    smb

    securityStyle

    新磁碟區的安全樣式。 *必須設定為 `ntfs`或者 `mixed`適用於 SMB 卷。 *

    `ntfs`或者 `mixed`適用於 SMB 卷

    unixPermissions

    新卷模式。 *對於 SMB 卷,此項必須留空。 *

    “”

啟用安全的 SMB

從 25.06 版本開始, NetApp Trident支援使用以下方式安全配置建立的 SMB 磁碟區: `ontap-nas`和 `ontap-nas-economy`後端。啟用安全 SMB 後,您可以使用存取控制清單 (ACL) 為 Active Directory (AD) 使用者和使用者群組提供對 SMB 共用的受控存取。

需要記住的要點
  • 輸入 `ontap-nas-economy`不支援卷。

  • 僅支援唯讀克隆 `ontap-nas-economy`卷。

  • 如果啟用了安全 SMB, Trident將忽略後端提到的 SMB 共用。

  • 更新 PVC 註解、儲存類別註解和後端欄位不會更新 SMB 共用 ACL。

  • 克隆 PVC 註釋中指定的 SMB 共用 ACL 將優先於來源 PVC 中的 ACL。

  • 啟用安全 SMB 時,請確保提供有效的 AD 使用者。無效使用者將不會被加入到存取控制清單 (ACL) 中。

  • 如果在後端、儲存類別和 PVC 中為同一個 AD 使用者提供不同的權限,則權限優先權為:PVC、儲存類,然後是後端。

  • 支援安全 SMB `ontap-nas`僅適用於託管磁碟區匯入,不適用於非託管磁碟區匯入。

步驟
  1. 在 TridentBackendConfig 中指定 adAdminUser,如下例所示:

    apiVersion: trident.netapp.io/v1
    kind: TridentBackendConfig
    metadata:
      name: backend-tbc-ontap
      namespace: trident
    spec:
      version: 1
      storageDriverName: ontap-nas
      managementLIF: 10.193.176.x
      svm: svm0
      useREST: true
      defaults:
        adAdminUser: tridentADtest
      credentials:
        name: backend-tbc-ontap-invest-secret
  2. 在儲存類別中加入註解。

    添加 trident.netapp.io/smbShareAdUser`對儲存類別進行註解,以啟用安全可靠的 SMB 連線。使用者為註釋指定的值 `trident.netapp.io/smbShareAdUser`應該與指定的使用者名稱相同 `smbcreds`秘密。您可以從以下選項中選擇一項 `smbShareAdUserPermissionfull_controlchange , 或者 read。預設權限是 full_control

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ontap-smb-sc
  annotations:
    trident.netapp.io/smbShareAdUserPermission: change
    trident.netapp.io/smbShareAdUser: tridentADuser
parameters:
  backendType: ontap-nas
  csi.storage.k8s.io/node-stage-secret-name: smbcreds
  csi.storage.k8s.io/node-stage-secret-namespace: trident
  trident.netapp.io/nasType: smb
provisioner: csi.trident.netapp.io
reclaimPolicy: Delete
volumeBindingMode: Immediate
  1. 製作PVC管。

    以下範例建立PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc4
  namespace: trident
  annotations:
    trident.netapp.io/snapshotDirectory: "true"
    trident.netapp.io/smbShareAccessControl: |
      read:
        - tridentADtest
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: ontap-smb-sc