准备使用ONTAP NAS驱动程序配置后端
了解如何准备使用 ONTAP NAS 驱动程序配置 ONTAP 后端。对于所有 ONTAP 后端, Astra Trident 需要至少为 SVM 分配一个聚合。
对于所有 ONTAP 后端, Astra Trident 需要至少为 SVM 分配一个聚合。
请记住,您还可以运行多个驱动程序,并创建指向其中一个驱动程序的存储类。例如、您可以配置一个使用的黄金类 ontap-nas
驱动程序和使用的铜牌类 ontap-nas-economy
一个。
所有Kubernetes工作节点都必须安装适当的NFS工具。请参见 "此处" 有关详细信息:
身份验证
Astra Trident 提供了两种对 ONTAP 后端进行身份验证的模式。
-
Credential Based :具有所需权限的 ONTAP 用户的用户名和密码。建议使用预定义的安全登录角色、例如
admin
或vsadmin
以确保与ONTAP 版本的最大兼容性。 -
基于证书: Astra Trident 还可以使用后端安装的证书与 ONTAP 集群进行通信。此处,后端定义必须包含客户端证书,密钥和可信 CA 证书的 Base64 编码值(如果使用)(建议)。
您可以更新现有后端、以便在基于凭据的方法和基于证书的方法之间移动。但是、一次仅支持一种身份验证方法。要切换到其他身份验证方法、必须从后端配置中删除现有方法。
如果您尝试同时提供*凭据和证书*、则后端创建将失败、并显示一条错误、指出配置文件中提供了多种身份验证方法。 |
启用基于凭据的身份验证
Astra Trident 需要 SVM 范围 / 集群范围的管理员的凭据才能与 ONTAP 后端进行通信。建议使用标准的预定义角色、例如 admin
或 vsadmin
。这样可以确保与未来的 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 ,则可以忽略此设置。
典型的工作流包括以下步骤。
-
生成客户端证书和密钥。生成时,将公用名( 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"
-
将可信 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>
-
在 ONTAP 集群上安装客户端证书和密钥(从步骤 1 开始)。
security certificate install -type client-ca -cert-name <certificate-name> -vserver <vserver-name> security ssl modify -vserver <vserver-name> -client-enabled true
-
确认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>
-
使用生成的证书测试身份验证。将 <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>'
-
使用 Base64 对证书,密钥和可信 CA 证书进行编码。
base64 -w 0 k8senv.pem >> cert_base64 base64 -w 0 k8senv.key >> key_base64 base64 -w 0 trustedca.pem >> trustedca_base64
-
使用从上一步获得的值创建后端。
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 backend update
。
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 。 |
以下是使用上述示例对此功能的工作原理进行的说明:
-
autoExportPolicy
设置为true
。这表示Astra Trident将为创建导出策略svm1
SVM并使用处理规则的添加和删除autoExportCIDRs
地址块。例如、UUID为403b5326-8482-40db-96d0-d83fb3f4daec和的后端autoExportPolicy
设置为true
创建名为的导出策略trident-403b5326-8482-40db-96d0-d83fb3f4daec
在 SVM 上。 -
autoExportCIDRs
包含地址块列表。此字段为可选字段,默认为 "0.0.0.0/0 , " :: /0" 。如果未定义,则 Astra Trident 会添加在工作节点上找到的所有全局范围的单播地址。
在此示例中、将显示 192.168.0.0/24
提供了地址空间。这表示此地址范围内的 Kubernetes 节点 IP 将添加到 Astra Trident 创建的导出策略中。当Astra Trident注册其运行所在的节点时、它会检索该节点的IP地址并根据中提供的地址块对其进行检查 autoExportCIDRs
。筛选 IP 后, Astra Trident 会为其发现的客户端 IP 创建导出策略规则,并为其标识的每个节点创建一个规则。
您可以更新 autoExportPolicy
和 autoExportCIDRs
用于后端。您可以为自动管理的后端附加新的 CIDR ,也可以删除现有的 CIDR 。删除 CIDR 时请务必小心,以确保现有连接不会断开。您也可以选择禁用 autoExportPolicy
用于后端、并回退到手动创建的导出策略。这需要设置 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控制器时、现有后端的导出策略会进行更新(前提是它们位于中指定的地址范围内 autoExportCIDRs
后端)。
删除节点后, Astra Trident 会检查所有联机后端,以删除该节点的访问规则。通过从受管后端的导出策略中删除此节点 IP , Astra Trident 可防止恶意挂载,除非此 IP 可由集群中的新节点重复使用。
对于以前存在的后端、请使用更新后端 tridentctl update backend
将确保Astra Trident自动管理导出策略。这将创建一个以后端 UUID 命名的新导出策略,后端上存在的卷将在重新挂载时使用新创建的导出策略。
删除具有自动管理导出策略的后端将删除动态创建的导出策略。如果重新创建后端,则会将其视为新的后端,并会创建新的导出策略。 |
如果更新了活动节点的 IP 地址,则必须在此节点上重新启动 Astra Trident Pod 。然后, Astra Trident 将更新其管理的后端的导出策略,以反映此 IP 更改。