准备使用ONTAP SAN驱动程序配置后端
了解使用ONTAP SAN驱动程序配置ONTAP后端的要求和身份验证选项。
要求
对于所有ONTAP后端、Trident要求至少为SVM分配一个聚合。
请记住,您还可以运行多个驱动程序,并创建指向其中一个驱动程序的存储类。例如,您可以配置使用 ontap-san
驱动程序的 san-dev
类和使用 ontap-san-economy-one
的 san-default
类。
所有Kubernetes工作节点都必须安装适当的iSCSI工具。请参见 "准备工作节点" 了解详细信息。
对ONTAP后端进行身份验证
Trident提供了两种对ONTAP后端进行身份验证的模式。
-
Credential Based :具有所需权限的 ONTAP 用户的用户名和密码。建议使用
admin
或vsadmin
等预定义的安全登录角色,以确保与 ONTAP 版本的最大兼容性。 -
基于证书:Trident还可以使用后端安装的证书与ONTAP集群进行通信。此处,后端定义必须包含客户端证书,密钥和可信 CA 证书的 Base64 编码值(如果使用)(建议)。
您可以更新现有后端、以便在基于凭据的方法和基于证书的方法之间移动。但是、一次仅支持一种身份验证方法。要切换到其他身份验证方法、必须从后端配置中删除现有方法。
如果您尝试同时提供*凭据和证书*、则后端创建将失败、并显示一条错误、指出配置文件中提供了多种身份验证方法。 |
启用基于凭据的身份验证
Trident需要SVM范围/集群范围的管理员的凭据才能与ONTAP后端进行通信。建议使用标准的预定义角色,如 admin`或 `vsadmin
。这样可以确保与未来ONTAP版本的正向兼容性、这些版本可能会公开未来Trident版本要使用的功能API。可以创建自定义安全登录角色并将其用于Trident、但不建议这样做。
后端定义示例如下所示:
--- version: 1 backendName: ExampleBackend storageDriverName: ontap-san managementLIF: 10.0.0.1 svm: svm_nfs username: vsadmin password: password
{ "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 ,则可以忽略此设置。
典型的工作流包括以下步骤。
-
生成客户端证书和密钥。生成时,将公用名( 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"
-
将可信 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 admin -application ontapi -authentication-method cert security login create -user-or-group-name admin -application http -authentication-method cert
-
使用生成的证书测试身份验证。将 <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>'
-
使用 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.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 集群中删除旧证书。 |
更新后端不会中断对已创建卷的访问,也不会影响在之后建立的卷连接。后端更新成功表示Trident可以与ONTAP后端通信并处理未来的卷操作。
为Trident创建自定义ONTAP角色
您可以创建Privileges最低的ONTAP集群角色、这样就不必使用ONTAP管理员角色在Trident中执行操作。如果在Trident后端配置中包含用户名、则Trident将使用您创建的ONTAP集群角色来执行操作。
有关创建Trident自定义角色的详细信息、请参见"Trident自定义角色生成器"。
-
使用以下命令创建新角色:
security login role create <role_name\> -cmddirname "command" -access all –vserver <svm_name\>
-
为Trident用户创建用户名:
security login create -username <user_name\> -application ontapi -authmethod <password\> -role <name_of_role_in_step_1\> –vserver <svm_name\> -comment "user_description"
-
将角色映射到用户:
security login modify username <user_name\> –vserver <svm_name\> -role <role_name\> -application ontapi -application console -authmethod <password\>
在ONTAP系统管理器中执行以下步骤:
-
创建自定义角色:
-
要在集群级别创建自定义角色,请选择*Cluster > Settings*。
(或)要在SVM级别创建自定义角色、请选择*存储> Storage VM
required SVM
>>设置>用户和角色*。 -
选择*用户和角色*旁边的箭头图标(→)。
-
在*角色*下选择*+添加*。
-
定义角色的规则,然后单击*Save*。
-
-
将角色映射到Trident user:+在*Users and Roles*页面上执行以下步骤:
-
在*用户*下选择添加图标*+*。
-
选择所需的用户名,然后在下拉菜单中为*rouser*选择一个角色。
-
单击 * 保存 * 。
-
有关详细信息、请参见以下页面:
使用双向 CHAP 对连接进行身份验证
Trident可以使用和 ontap-san-economy`驱动程序的双向CHAP对iSCSI会话进行身份验证 `ontap-san
。这需要在后端定义中启用此 useCHAP`选项。设置为时 `true
,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: password chapInitiatorSecret: cl9qxIm36DKyawxy chapTargetInitiatorSecret: rqxigXgkesIpwxyz chapTargetUsername: iJF4heBRT0TCwxyz chapUsername: uh2aNCLSd6cNwxyz
useCHAP 参数是一个布尔选项,只能配置一次。默认情况下,此参数设置为 false 。将其设置为 true 后,无法将其设置为 false 。
|
除了 useCHAP=true
之外,后端定义还必须包括 chapInitiatorSecret
, chapTargetInitiatorSecret
, chapTargetUsername
和 chapUsername
字段。通过运行 tridentctl update
创建后端,可以更改这些密钥。
工作原理
如果将设置 `useCHAP`为true、则存储管理员将指示Trident在存储后端配置CHAP。其中包括:
-
在 SVM 上设置 CHAP :
-
如果SVM的默认启动程序安全类型为none (默认设置)*和*卷中已没有已有的LUN、则Trident会将默认安全类型设置为
CHAP
、并继续配置CHAP启动程序以及目标用户名和密码。 -
如果SVM包含LUN、则Trident不会在此SVM上启用CHAP。这样可确保对SVM上已存在的LUN的访问不受限制。
-
-
配置 CHAP 启动程序以及目标用户名和密码;必须在后端配置中指定这些选项(如上所示)。
创建后端后、Trident会创建相应的 `tridentbackend`CRD并将CHAP密码和用户名存储为Kubbernetes密码。Trident在此后端创建的所有PV,都将通过CHAP进行挂载和连接。
轮换凭据并更新后端
您可以通过更新 backend.json
文件中的 CHAP 参数来更新 CHAP 凭据。这需要更新 CHAP 密码并使用 tridentctl update
命令反映这些更改。
更新后端的CHAP密码时、必须使用 `tridentctl`更新后端。请勿通过CLI/RAID ONTAP UI更新存储集群上的凭据、因为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 | +----------------+----------------+--------------------------------------+--------+---------+
现有连接不会受到影响;如果Trident在SVM上更新凭据、这些连接将继续保持活动状态。新连接将使用更新后的凭据、现有连接将继续保持活动状态。断开并重新连接旧的 PV 将导致它们使用更新后的凭据。