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

準備配置後端ONTAP SAN 驅動程式

貢獻者 netapp-aruldeepa

了解配置ONTAP後端和ONTAP SAN 驅動程式的要求和驗證選項。

要求

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

註 "ASA r2 系統"與其他ONTAP系統(ASA、 AFF和FAS)在儲存層的實作上有所不同。在ASA r2 系統中,使用儲存可用區而不是聚合。請參閱"這"知識庫文章,介紹如何在ASA r2 系統中將聚合指派給 SVM。

請記住,您還可以運行多個驅動程序,並建立指向其中一個或另一個驅動程式的儲存類別。例如,您可以設定一個 `san-dev`使用類別 `ontap-san`司機和 `san-default`使用類別 `ontap-san-economy`一。

所有 Kubernetes 工作節點都必須安裝對應的 iSCSI 工具。參考 "準備工作節點" 了解詳情。

對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-san
managementLIF: 10.0.0.1
svm: svm_nfs
username: vsadmin
password: password
JSON
{
  "version": 1,
  "backendName": "ExampleBackend",
  "storageDriverName": "ontap-san",
  "managementLIF": "10.0.0.1",
  "svm": "svm_nfs",
  "username": "vsadmin",
  "password": "password"
}

請注意,後端定義是唯一以純文字形式儲存憑證的地方。後端建立完成後,使用者名稱/密碼將使用 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=admin"
  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 admin -application ontapi -authentication-method cert
    security login create -user-or-group-name admin -application http -authentication-method cert
  5. 使用產生的憑證進行身份驗證。請將 < ONTAP管理 LIF> 和 <vserver 名稱> 替換為管理 LIF IP 位址和 SVM 名稱。

    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.json
    {
    "version": 1,
    "storageDriverName": "ontap-san",
    "backendName": "SanBackend",
    "managementLIF": "1.2.3.4",
    "svm": "vserver_test",
    "clientCertificate": "Faaaakkkkeeee...Vaaalllluuuueeee",
    "clientPrivateKey": "LS0tFaKE...0VaLuES0tLS0K",
    "trustedCACertificate": "QNFinfO...SiqOyN",
    "storagePrefix": "myPrefix_"
    }
    
    tridentctl create backend -f cert-backend.json -n trident
    +------------+----------------+--------------------------------------+--------+---------+
    |    NAME    | STORAGE DRIVER |                 UUID                 | STATE  | VOLUMES |
    +------------+----------------+--------------------------------------+--------+---------+
    | SanBackend | ontap-san      | 586b1cd5-8cf8-428d-a76c-2872713612c1 | online |       0 |
    +------------+----------------+--------------------------------------+--------+---------+

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

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

cat cert-backend-updated.json
{
"version": 1,
"storageDriverName": "ontap-san",
"backendName": "SanBackend",
"managementLIF": "1.2.3.4",
"svm": "vserver_test",
"username": "vsadmin",
"password": "password",
"storagePrefix": "myPrefix_"
}

#Update backend with tridentctl
tridentctl update backend SanBackend -f cert-backend-updated.json -n trident
+------------+----------------+--------------------------------------+--------+---------+
|    NAME    | STORAGE DRIVER |                 UUID                 | STATE  | VOLUMES |
+------------+----------------+--------------------------------------+--------+---------+
| SanBackend | ontap-san      | 586b1cd5-8cf8-428d-a76c-2872713612c1 | 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. 點選“儲存”。

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

使用雙向 CHAP 驗證連接

Trident可以使用雙向 CHAP 對 iSCSI 會話進行驗證。 `ontap-san`和 `ontap-san-economy`司機。這需要啟用 `useCHAP`在後端定義中新增選項。設定為 `true`Trident將 SVM 的預設發起程序安全地配置為雙向 CHAP,並從後端檔案設定使用者名稱和金鑰。 NetApp建議使用雙向 CHAP 協定對連線進行身份驗證。請參閱以下範例配置:

---
version: 1
storageDriverName: ontap-san
backendName: ontap_san_chap
managementLIF: 192.168.0.135
svm: ontap_iscsi_svm
useCHAP: true
username: vsadmin
password: password
chapInitiatorSecret: cl9qxIm36DKyawxy
chapTargetInitiatorSecret: rqxigXgkesIpwxyz
chapTargetUsername: iJF4heBRT0TCwxyz
chapUsername: uh2aNCLSd6cNwxyz
警告 這 `useCHAP`此參數是一個布林選項,只能配置一次。預設值為 false。一旦將其設為 true,就無法再將其設為 false。

另外 useCHAP=true, 這 chapInitiatorSecretchapTargetInitiatorSecretchapTargetUsername , 和 chapUsername`欄位必須包含在後端定義中。創建後端後,可以透過執行以下命令來更改密鑰: `tridentctl update

工作原理

透過設定 `useCHAP`如果設定為 true,則儲存管理員指示Trident在儲存裝置後端設定 CHAP。其中包括以下內容:

  • 在SVM上設定CHAP:

    • 如果 SVM 的預設啟動器安全類型為「無」(預設)*且*磁碟區中不存在任何預先存在的 LUN,Trident會將預設安全類型設為「無」。 `CHAP`然後繼續配置 CHAP 發起程序和目標使用者名稱及金鑰。

    • 如果 SVM 包含 LUN, Trident將不會在 SVM 上啟用 CHAP。這樣可以確保對 SVM 上已存在的 LUN 的存取不受限制。

  • 配置 CHAP 發起程序和目標使用者名稱和金鑰;這些選項必須在後端配置中指定(如上所示)。

後端建立完成後, Trident會建立一個對應的 `tridentbackend`CRD 並將 CHAP 金鑰和使用者名稱儲存為 Kubernetes 金鑰。 Trident在此後端建立的所有 PV 都將透過 CHAP 進行安裝和連線。

輪換憑證並更新後端

您可以透過更新 CHAP 參數來更新 CHAP 憑證。 `backend.json`文件。這將需要更新 CHAP 金鑰並使用 `tridentctl update`命令反映這些變更。

警告 更新後端 CHAP 金鑰時,必須使用 `tridentctl`更新後端。請勿使用ONTAP CLI 或ONTAP系統管理員更新儲存叢集上的憑證,因為Trident將無法偵測到這些變更。
cat backend-san.json
{
    "version": 1,
    "storageDriverName": "ontap-san",
    "backendName": "ontap_san_chap",
    "managementLIF": "192.168.0.135",
    "svm": "ontap_iscsi_svm",
    "useCHAP": true,
    "username": "vsadmin",
    "password": "password",
    "chapInitiatorSecret": "cl9qxUpDaTeD",
    "chapTargetInitiatorSecret": "rqxigXgkeUpDaTeD",
    "chapTargetUsername": "iJF4heBRT0TCwxyz",
    "chapUsername": "uh2aNCLSd6cNwxyz",
}

./tridentctl update backend ontap_san_chap -f backend-san.json -n trident
+----------------+----------------+--------------------------------------+--------+---------+
|   NAME         | STORAGE DRIVER |                 UUID                 | STATE  | VOLUMES |
+----------------+----------------+--------------------------------------+--------+---------+
| ontap_san_chap | ontap-san      | aa458f3b-ad2d-4378-8a33-1a472ffbeb5c | online |       7 |
+----------------+----------------+--------------------------------------+--------+---------+

現有連線將不受影響;如果Trident在 SVM 上更新憑證,則這些連線將繼續保持活動狀態。新連線使用更新後的憑證,現有連線將繼續保持活動狀態。斷開並重新連接舊的PV將使它們使用更新的憑證。