Skip to main content
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

准备使用ONTAP SAN驱动程序配置后端

贡献者

了解使用ONTAP SAN驱动程序配置ONTAP后端的要求和身份验证选项。

要求

对于所有 ONTAP 后端, Astra Trident 需要至少为 SVM 分配一个聚合。

请记住,您还可以运行多个驱动程序,并创建指向其中一个驱动程序的存储类。例如,您可以配置使用 ontap-san 驱动程序的 san-dev 类和使用 ontap-san-economy-onesan-default 类。

所有Kubernetes工作节点都必须安装适当的iSCSI工具。请参见 "准备工作节点" 了解详细信息。

对ONTAP后端进行身份验证

Astra Trident 提供了两种对 ONTAP 后端进行身份验证的模式。

  • Credential Based :具有所需权限的 ONTAP 用户的用户名和密码。建议使用 adminvsadmin 等预定义的安全登录角色,以确保与 ONTAP 版本的最大兼容性。

  • 基于证书: Astra Trident 还可以使用后端安装的证书与 ONTAP 集群进行通信。此处,后端定义必须包含客户端证书,密钥和可信 CA 证书的 Base64 编码值(如果使用)(建议)。

您可以更新现有后端、以便在基于凭据的方法和基于证书的方法之间移动。但是、一次仅支持一种身份验证方法。要切换到其他身份验证方法、必须从后端配置中删除现有方法。

警告 如果您尝试同时提供*凭据和证书*、则后端创建将失败、并显示一条错误、指出配置文件中提供了多种身份验证方法。

启用基于凭据的身份验证

Astra Trident 需要 SVM 范围 / 集群范围的管理员的凭据才能与 ONTAP 后端进行通信。建议使用标准的预定义角色,例如 adminvsadmin 。这样可以确保与未来的 ONTAP 版本向前兼容,这些版本可能会使功能 API 公开供未来的 Astra Trident 版本使用。可以创建自定义安全登录角色并将其用于 Astra 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 编码值。

  • trustedCACertifate :受信任 CA 证书的 Base64 编码值。如果使用可信 CA ,则必须提供此参数。如果不使用可信 CA ,则可以忽略此设置。

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

步骤
  1. 生成客户端证书和密钥。生成时,将公用名( Common Name , 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. 将可信 CA 证书添加到 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. 使用生成的证书测试身份验证。将 <SVM 管理 LIF> 和 <SVM 名称 > 替换为管理 LIF IP 和 ONTAP 名称。

    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 |
    +------------+----------------+--------------------------------------+--------+---------+

更新身份验证方法或轮换凭据

您可以更新现有后端以使用其他身份验证方法或轮换其凭据。这两种方式都适用:使用用户名 / 密码的后端可以更新为使用证书;使用证书的后端可以更新为基于用户名 / 密码的后端。为此、您必须删除现有身份验证方法并添加新的身份验证方法。然后、使用包含所需参数的更新后端.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 集群中删除旧证书。

更新后端不会中断对已创建卷的访问,也不会影响在之后建立的卷连接。成功的后端更新表明, Astra Trident 可以与 ONTAP 后端进行通信并处理未来的卷操作。

使用双向 CHAP 对连接进行身份验证

Astra Trident可以使用双向CHAP对iSCSI会话进行身份验证 ontap-sanontap-san-economy 驱动程序。这需要启用 useCHAP 选项。设置为时 `true`中,A作用 是将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 之外,后端定义还必须包括 chapInitiatorSecretchapTargetInitiatorSecretchapTargetUsernamechapUsername 字段。通过运行 tridentctl update 创建后端,可以更改这些密钥。

工作原理

通过将 useCHAP 设置为 true ,存储管理员指示 Astra Trident 在存储后端配置 CHAP 。其中包括:

  • 在 SVM 上设置 CHAP :

    • 如果SVM的默认启动程序安全类型为none (默认设置)*和*卷中已没有已有的LUN、Asta TIDent会将默认安全类型设置为 CHAP 然后继续配置CHAP启动程序以及目标用户名和密码。

    • 如果 SVM 包含 LUN ,则 Astra Trident 不会在 SVM 上启用 CHAP 。这样可确保对SVM上已存在的LUN的访问不受限制。

  • 配置 CHAP 启动程序以及目标用户名和密码;必须在后端配置中指定这些选项(如上所示)。

创建后端后, Astra Trident 会创建相应的 tridentbackend CRD ,并将 CHAP 密码和用户名存储为 Kubernetes 密码。此后端由 Astra Trident 创建的所有 PV 都将通过 CHAP 进行挂载和连接。

轮换凭据并更新后端

您可以通过更新 backend.json 文件中的 CHAP 参数来更新 CHAP 凭据。这需要更新 CHAP 密码并使用 tridentctl update 命令反映这些更改。

警告 更新后端的 CHAP 密码时,必须使用 tridentctl 来更新后端。请勿通过 CLI/ONTAP UI 更新存储集群上的凭据,因为 Astra 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 |
+----------------+----------------+--------------------------------------+--------+---------+

现有连接将不受影响;如果凭据由 SVM 上的 Astra Trident 更新,则这些连接将继续保持活动状态。新连接将使用更新后的凭据,现有连接将继续保持活动状态。断开并重新连接旧的 PV 将导致它们使用更新后的凭据。