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

准备

贡献者

了解如何准备使用 ONTAP SAN 驱动程序配置 ONTAP 后端。对于所有 ONTAP 后端, Astra Trident 需要至少为 SVM 分配一个聚合。

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

所有 Kubernetes 工作节点都必须安装适当的 iSCSI 工具。请参见 "此处" 有关详细信息:

身份验证

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

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

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

用户还可以选择更新现有后端,选择从基于凭据迁移到基于证书,反之亦然。如果 * 同时提供了凭据和证书 * ,则 Astra Trident 将在发出警告以从后端定义中删除凭据时默认使用证书。

启用基于凭据的身份验证

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

后端定义示例如下所示:

{
  "version": 1,
  "backendName": "ExampleBackend",
  "storageDriverName": "ontap-san",
  "managementLIF": "10.0.0.1",
  "dataLIF": "10.0.0.2",
  "svm": "svm_nfs",
  "username": "vsadmin",
  "password": "secret",
}

请注意,后端定义是凭据以纯文本格式存储的唯一位置。创建后端后,用户名 / 密码将使用 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",
    "dataLIF": "1.2.3.8",
    "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 后端更新 所需的参数。

$ cat cert-backend-updated.json
{
"version": 1,
"storageDriverName": "ontap-san",
"backendName": "SanBackend",
"managementLIF": "1.2.3.4",
"dataLIF": "1.2.3.8",
"svm": "vserver_test",
"username": "vsadmin",
"password": "secret",
"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 后端进行通信并处理未来的卷操作。

指定 igroup

Astra Trident 使用 igroup 来控制对其配置的卷( LUN )的访问。在为后端指定 igroup 时,管理员有两种选择:

  • Astra Trident 可以自动为每个后端创建和管理 igroup 。如果后端定义中未包含 igroupName ,则 Astra Trident 会在 SVM 上创建一个名为 trident -<backender-UUUUUID> 的 igroup 。这将确保每个后端都有一个专用的 igroup ,并处理 Kubernetes 节点 IQN 的自动添加 / 删除。

  • 或者,也可以在后端定义中提供预先创建的 igroup 。可以使用 igroupName config 参数来执行此操作。Astra Trident 会将 Kubernetes 节点 IQN 添加 / 删除到已有的 igroup 中。

对于已定义 igroupName 的后端,可以使用 tridentctl 后端更新 删除 igroupName ,以使 Astra Trident 自动处理 igroup 。这样不会中断对已连接到工作负载的卷的访问。未来的连接将使用创建的 igroup Astra Trident 进行处理。

重要说明 为 Astra Trident 的每个唯一实例指定一个 igroup 是一个最佳实践,对 Kubernetes 管理员和存储管理员都很有用。CSI Trident 可自动向 igroup 添加和删除集群节点 IQN ,从而极大地简化了其管理。在 Kubernetes 环境(以及 Astra Trident 安装)中使用相同的 SVM 时,使用专用的 igroup 可确保对一个 Kubernetes 集群所做的更改不会影响与另一个 Kubernetes 集群关联的 igroup 。此外,还必须确保 Kubernetes 集群中的每个节点都具有唯一的 IQN 。如上所述, Astra Trident 会自动处理 IQN 的添加和删除。在多个主机之间重复使用 IQN 可能会导致出现主机相互错误并拒绝访问 LUN 的不希望出现的情况。

如果将 Astra Trident 配置为充当 CSI 配置程序,则 Kubernetes 节点 IQN 会自动添加到 igroup 中或从 igroup 中删除。将节点添加到 Kubernetes 集群后, trident — CSI DemonSet 会在新添加的节点上部署一个 Pod (trident — CSI — xxxxx ),并注册可将卷连接到的新节点。节点 IQN 也会添加到后端的 igroup 中。在对节点进行隔离,清空并从 Kubernetes 中删除时,可以执行一组类似的步骤来删除 IQN 。

如果 Astra Trident 未作为 CSI 配置程序运行,则必须手动更新 igroup ,以包含 Kubernetes 集群中每个工作节点的 iSCSI IQN 。需要将加入 Kubernetes 集群的节点的 IQN 添加到 igroup 中。同样,必须从 igroup 中删除从 Kubernetes 集群中删除的节点的 IQN 。

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

Astra Trident 可以使用双向 CHAP 对 ontap-sanontap-san-economy-sn 驱动程序的 iSCSI 会话进行身份验证。这需要在后端定义中启用 useCHAP 选项。如果设置为 true ,则 Astra 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": "FaKePaSsWoRd",
    "igroupName": "trident",
    "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 ,则 Astra Trident 会将默认安全类型设置为 CHAP ,然后继续配置 CHAP 启动程序以及目标用户名和密码。

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

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

  • 管理向后端提供的 igroupName 添加启动程序的操作。如果未指定,则默认为 trident

创建后端后, 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": "FaKePaSsWoRd",
    "igroupName": "trident",
    "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 将导致它们使用更新后的凭据。