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

准备

贡献者

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

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

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

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

身份验证

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

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

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

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

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

启用基于凭据的身份验证

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 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 创建导出策略规则,并为其标识的每个节点创建一个规则。

您可以更新 autoExportPolicyautoExportCIDRs 用于后端。您可以为自动管理的后端附加新的 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 更改。