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

准备

贡献者

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

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

请记住,您还可以运行多个驱动程序,并创建指向其中一个驱动程序的存储类。例如,您可以配置一个使用 ontap-nas 驱动程序` 的金牌类和一个使用 `ontap-nas-economy-one 的铜牌类。

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

身份验证

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-nas",
  "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=vsadmin"
  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 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. 使用生成的证书测试身份验证。将 <SVM 管理 LIF> 和 <SVM 名称 > 替换为管理 LIF IP 和 ONTAP 名称。您必须确保 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 后端更新 所需的参数。

$ 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": "secret",
"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 集群中删除旧证书。

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

管理 NFS 导出策略

Astra Trident 使用 NFS 导出策略来控制对其配置的卷的访问。

使用导出策略时, Astra Trident 提供了两个选项:

  • Astra Trident 可以动态管理导出策略本身;在此操作模式下,存储管理员会指定一个表示可接受 IP 地址的 CIDR 块列表。Astra Trident 会自动将属于这些范围的节点 IP 添加到导出策略中。或者,如果未指定任何 CIDR ,则在节点上找到的任何全局范围的单播 IP 都将添加到导出策略中。

  • 存储管理员可以手动创建导出策略和添加规则。除非在配置中指定了不同的导出策略名称,否则 Astra Trident 将使用默认导出策略。

动态管理导出策略

CSI Trident 20.04 版可以动态管理 ONTAP 后端的导出策略。这样,存储管理员就可以为工作节点 IP 指定允许的地址空间,而不是手动定义显式规则。它大大简化了导出策略管理;修改导出策略不再需要手动干预存储集群。此外,这有助于将对存储集群的访问限制为仅允许 IP 位于指定范围内的工作节点访问,从而支持精细的自动化管理。

备注 只有 CSI Trident 才支持动态管理导出策略。请务必确保工作节点未被 NAT 处理。

示例

必须使用两个配置选项。下面是一个后端定义示例:

{
    "version": 1,
    "storageDriverName": "ontap-nas",
    "backendName": "ontap_nas_auto_export,
    "managementLIF": "192.168.0.135",
    "svm": "svm1",
    "username": "vsadmin",
    "password": "FaKePaSsWoRd",
    "autoExportCIDRs": ["192.168.0.0/24"],
    "autoExportPolicy": true
}
备注 使用此功能时,您必须确保 SVM 中的根接合具有预先创建的导出策略,并具有允许节点 CIDR 块的导出规则(例如默认导出策略)。请始终遵循 NetApp 建议的最佳实践,为 Astra Trident 专用 SVM 。

以下是使用上述示例对此功能的工作原理进行的说明:

  • autosExportPolicy 设置为 true 。这表示 Astra Trident 将为 svm1 SVM 创建导出策略,并使用 autosExportCIDRS 地址块处理规则的添加和删除。例如, UUID 为 403b5326-8482-40db-96d0-d83fb3f4daec 且 autodExportPolicy 设置为 true 的后端会在 SVM 上创建一个名为 trident -403b5326-8482-40db-96d0-d83fb3f4daec 的导出策略。

  • autosExportCIDR 包含地址块列表。此字段为可选字段,默认为 "0.0.0.0/0 , " :: /0" 。如果未定义,则 Astra Trident 会添加在工作节点上找到的所有全局范围的单播地址。

在此示例中,提供了 192.168.0.0/24 地址空间。这表示此地址范围内的 Kubernetes 节点 IP 将添加到 Astra Trident 创建的导出策略中。当 Astra Trident 注册其运行的节点时,它会检索该节点的 IP 地址,并根据 autosExportCIDRS 中提供的地址块对其进行检查。筛选 IP 后, Astra Trident 会为其发现的客户端 IP 创建导出策略规则,并为其标识的每个节点创建一个规则。

创建后,您可以为后端更新 autosExportPolicyautosExportCIDR 。您可以为自动管理的后端附加新的 CIDR ,也可以删除现有的 CIDR 。删除 CIDR 时请务必小心,以确保现有连接不会断开。您也可以选择对后端禁用 autosExportPolicy ,并回退到手动创建的导出策略。这需要在后端配置中设置 exportPolicy 参数。

在 Astra 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

当节点添加到 Kubernetes 集群并向 Astra Trident 控制器注册后,现有后端的导出策略将会更新(前提是它们位于后端的 autosExportCIDR 中指定的地址范围内)。

删除节点后, Astra Trident 会检查所有联机后端,以删除该节点的访问规则。通过从受管后端的导出策略中删除此节点 IP , Astra Trident 可防止恶意挂载,除非此 IP 可由集群中的新节点重复使用。

对于以前存在的后端,使用 tridentctl update backend 更新后端可确保 Astra Trident 自动管理导出策略。这将创建一个以后端 UUID 命名的新导出策略,后端上存在的卷将在重新挂载时使用新创建的导出策略。

备注 删除具有自动管理导出策略的后端将删除动态创建的导出策略。如果重新创建后端,则会将其视为新的后端,并会创建新的导出策略。

如果更新了活动节点的 IP 地址,则必须在此节点上重新启动 Astra Trident Pod 。然后, Astra Trident 将更新其管理的后端的导出策略,以反映此 IP 更改。