Configuración de host NVMe-oF para SUSE Linux Enterprise Server 15 SP7 con ONTAP
- Paso 1: Opcionalmente, habilite el arranque SAN
- Paso 2: Validar las versiones del software
- Paso 3: Configurar NVMe/FC
- Paso 4: Opcionalmente, habilite 1 MB de E/S
- Paso 5: Verificar los servicios de arranque NVMe
- Paso 6: Configurar NVMe/TCP
- Paso 7: Validar NVMe-oF
- Paso 8: Crear un controlador de descubrimiento persistente
- Paso 9: Configurar la autenticación segura en banda
- Paso 10: Configurar la seguridad de la capa de transporte
- Paso 11: Revise los problemas conocidos
Las configuraciones de host SAN de NetApp admiten el protocolo NVMe over Fabrics (NVMe-oF) con acceso asimétrico al espacio de nombres (ANA). En entornos con NVMe-oF, ANA es equivalente a accesos múltiples asimétricos de unidad lógica (ALUA) en entornos iSCSI y FCP. ANA se implementa mediante la función multivía de NVMe interna.
Puede utilizar el siguiente soporte y características con la configuración de host NVMe-oF para SUSE Linux Enterprise Server 15 SP7 (SLES15 SP7). También debe revisar las limitaciones conocidas antes de iniciar el proceso de configuración.
-
Soporte disponible:
-
Compatibilidad con NVMe sobre TCP (NVMe/TCP), además de NVMe sobre Fibre Channel (NVMe/FC). El complemento NetApp del paquete nativo
nvme-cli
muestra detalles de ONTAP para espacios de nombres NVMe/FC y NVMe/TCP. -
Ejecutando tráfico NVMe y SCSI en el mismo host. Por ejemplo, puede configurar dm-multipath para dispositivos mpath SCSI para LUN SCSI y usar NVMe multipath para configurar dispositivos de espacio de nombres NVMe-oF en el host.
-
Compatibilidad para arranque SAN usando el protocolo NVMe/FC.
-
A partir de ONTAP 9.12.1, se introduce la compatibilidad con la autenticación segura en banda para NVMe/TCP y NVMe/FC. Puede usar la autenticación segura en banda para NVMe/TCP y NVMe/FC con SLES15 SP7.
-
Compatibilidad con controladores de descubrimiento persistentes (PDC) que utilizan un NQN de descubrimiento único.
-
Compatibilidad con cifrado TLS 1.3 para NVMe/TCP.
-
NetApp
sanlun
La compatibilidad con la utilidad de host no está disponible para NVMe-oF en un host SLES15 SP7. En su lugar, puede confiar en el plugin de NetApp incluido en el paquete nativonvme-cli
para todos los transportes NVMe-oF.Si quiere más información sobre las configuraciones compatibles, consulte la "Herramienta de matriz de interoperabilidad".
-
-
Características disponibles:
-
No hay nuevas funciones disponibles
-
-
Limitaciones conocidas
-
Evite emitir el
nvme disconnect-all
comando en sistemas que arrancan desde SAN a través de espacios de nombres NVMe-TCP o NVMe-FC porque desconecta los sistemas de archivos raíz y de datos y podría generar inestabilidad en el sistema.
-
Paso 1: Opcionalmente, habilite el arranque SAN
Puede configurar su host para que utilice el arranque SAN y simplificar la puesta en marcha y mejorar la escalabilidad.
Utilice "Herramienta de matriz de interoperabilidad" para verificar que el sistema operativo Linux, el adaptador de bus de host (HBA), el firmware del HBA, el BIOS de arranque del HBA y la versión de ONTAP admiten el arranque SAN.
-
Cree un espacio de nombres de arranque SAN y asígnelo al host.
Consulte "Aprovisione el almacenamiento NVMe".
-
Habilite el arranque SAN en el BIOS del servidor para los puertos a los que está asignado el espacio de nombres de arranque SAN.
Para obtener información acerca de cómo activar el BIOS HBA, consulte la documentación específica de su proveedor.
-
Compruebe que la configuración se haya realizado correctamente. Para ello, reinicie el host y verifique que el sistema operativo esté activo y en ejecución.
Paso 2: Validar las versiones del software
Utilice el siguiente procedimiento para validar las versiones mínimas compatibles del software SLES15 SP7.
-
Instale SLES15 SP7 en el servidor. Una vez completada la instalación, verifique que esté ejecutando el kernel SLES15 SP7 especificado:
uname -r
El siguiente ejemplo muestra una versión del kernel SLES:
6.4.0-150700.53.3-default
-
Instale el
nvme-cli
paquete:rpm -qa|grep nvme-cli
El siguiente ejemplo muestra un
nvme-cli
versión del paquete:nvme-cli-2.11+22.gd31b1a01-150700.3.3.2.x86_64
-
Instale el
libnvme
paquete:rpm -qa|grep libnvme
El siguiente ejemplo muestra un
libnvme
versión del paquete:libnvme1-1.11+4.ge68a91ae-150700.4.3.2.x86_64
-
En el host, verifique la cadena hostnqn en
/etc/nvme/hostnqn
:cat /etc/nvme/hostnqn
El siguiente ejemplo muestra una
hostnqn
versión:nqn.2014-08.org.nvmexpress:uuid:f6517cae-3133-11e8-bbff-7ed30aef123f
-
Compruebe que el
hostnqn
la cadena coincide conhostnqn
Cadena para el subsistema correspondiente en la cabina de ONTAP:::> vserver nvme subsystem host show -vserver vs_coexistence_LPE36002
Muestra el ejemplo
Vserver Subsystem Priority Host NQN ------- --------- -------- ------------------------------------------------ vs_coexistence_LPE36002 nvme regular nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0056-5410-8048-b9c04f425633 nvme_1 regular nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0056-5410-8048-b9c04f425633 nvme_2 regular nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0056-5410-8048-b9c04f425633 nvme_3 regular nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0056-5410-8048-b9c04f425633 4 entries were displayed.
Si la hostnqn
las cadenas no coinciden, utilicevserver modify
comando para actualizar elhostnqn
En el subsistema de cabina ONTAP correspondiente de que coincida conhostnqn
cadena desde/etc/nvme/hostnqn
en el host.
Paso 3: Configurar NVMe/FC
Puede configurar NVMe/FC con adaptadores FC Broadcom/Emulex o Marvell/Qlogic. También debe descubrir manualmente los subsistemas y espacios de nombres NVMe/TCP.
Configurar NVMe/FC para un adaptador FC Broadcom/Emulex.
-
Compruebe que está utilizando el modelo de adaptador admitido:
-
Mostrar los nombres de los modelos:
cat /sys/class/scsi_host/host*/modelname
Debe ver la siguiente salida:
LPe36002-M64 LPe36002-M64
-
Mostrar las descripciones del modelo:
cat /sys/class/scsi_host/host*/modeldesc
Debería ver un resultado similar al siguiente ejemplo:
Emulex LightPulse LPe36002-M64 2-Port 64Gb Fibre Channel Adapter Emulex LightPulse LPe36002-M64 2-Port 64Gb Fibre Channel Adapter
-
-
Compruebe que está utilizando la Broadcom recomendada
lpfc
firmware y controlador de bandeja de entrada:-
Mostrar la versión del firmware:
cat /sys/class/scsi_host/host*/fwrev
El siguiente ejemplo muestra las versiones de firmware:
14.4.393.25, sli-4:2:c 14.4.393.25, sli-4:2:c
-
Mostrar la versión del controlador de la bandeja de entrada:
cat /sys/module/lpfc/version
El siguiente ejemplo muestra una versión del controlador:
0:14.4.0.8
Para obtener la lista actual de versiones de firmware y controladores de adaptador compatibles, consulte la "Herramienta de matriz de interoperabilidad".
-
-
Compruebe que la salida esperada de
lpfc_enable_fc4_type
está definida en3
:cat /sys/module/lpfc/parameters/lpfc_enable_fc4_type
-
Compruebe que puede ver los puertos de iniciador:
cat /sys/class/fc_host/host*/port_name
El siguiente ejemplo muestra las identidades del puerto:
0x10000090fae0ec88 0x10000090fae0ec89
-
Compruebe que los puertos de iniciador estén en línea:
cat /sys/class/fc_host/host*/port_state
Debe ver la siguiente salida:
Online Online
-
Compruebe que los puertos de iniciador NVMe/FC estén habilitados y que los puertos de destino estén visibles:
cat /sys/class/scsi_host/host*/nvme_info
Muestra el resultado de ejemplo
NVME Initiator Enabled XRI Dist lpfc0 Total 6144 IO 5894 ELS 250 NVME LPORT lpfc0 WWPN x10000090fae0ec88 WWNN x20000090fae0ec88 DID x0a1300 ONLINE NVME RPORT WWPN x23b1d039ea359e4a WWNN x23aed039ea359e4a DID x0a1c01 TARGET DISCSRVC ONLINE NVME RPORT WWPN x22bbd039ea359e4a WWNN x22b8d039ea359e4a DID x0a1c0b TARGET DISCSRVC ONLINE NVME RPORT WWPN x2362d039ea359e4a WWNN x234ed039ea359e4a DID x0a1c10 TARGET DISCSRVC ONLINE NVME RPORT WWPN x23afd039ea359e4a WWNN x23aed039ea359e4a DID x0a1a02 TARGET DISCSRVC ONLINE NVME RPORT WWPN x22b9d039ea359e4a WWNN x22b8d039ea359e4a DID x0a1a0b TARGET DISCSRVC ONLINE NVME RPORT WWPN x2360d039ea359e4a WWNN x234ed039ea359e4a DID x0a1a11 TARGET DISCSRVC ONLINE NVME Statistics LS: Xmt 0000004ea0 Cmpl 0000004ea0 Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 0000000000102c35 Issue 0000000000102c2d OutIO fffffffffffffff8 abort 00000175 noxri 00000000 nondlp 0000021d qdepth 00000000 wqerr 00000007 err 00000000 FCP CMPL: xb 00000175 Err 0000058b NVME Initiator Enabled XRI Dist lpfc1 Total 6144 IO 5894 ELS 250 NVME LPORT lpfc1 WWPN x10000090fae0ec89 WWNN x20000090fae0ec89 DID x0a1200 ONLINE NVME RPORT WWPN x23b2d039ea359e4a WWNN x23aed039ea359e4a DID x0a1d01 TARGET DISCSRVC ONLINE NVME RPORT WWPN x22bcd039ea359e4a WWNN x22b8d039ea359e4a DID x0a1d0b TARGET DISCSRVC ONLINE NVME RPORT WWPN x2363d039ea359e4a WWNN x234ed039ea359e4a DID x0a1d10 TARGET DISCSRVC ONLINE NVME RPORT WWPN x23b0d039ea359e4a WWNN x23aed039ea359e4a DID x0a1b02 TARGET DISCSRVC ONLINE NVME RPORT WWPN x22bad039ea359e4a WWNN x22b8d039ea359e4a DID x0a1b0b TARGET DISCSRVC ONLINE NVME RPORT WWPN x2361d039ea359e4a WWNN x234ed039ea359e4a DID x0a1b11 TARGET DISCSRVC ONLINE NVME Statistics LS: Xmt 0000004e31 Cmpl 0000004e31 Abort 00000000 LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000 Total FCP Cmpl 00000000001017f2 Issue 00000000001017ef OutIO fffffffffffffffd abort 0000018a noxri 00000000 nondlp 0000012e qdepth 00000000 wqerr 00000004 err 00000000 FCP CMPL: xb 0000018a Err 000005ca
Configure NVMe/FC para un adaptador Marvell/QLogic.
-
Compruebe que está ejecutando las versiones de firmware y controlador del adaptador compatibles:
cat /sys/class/fc_host/host*/symbolic_name
El siguiente ejemplo muestra las versiones del controlador y del firmware:
QLE2742 FW:v9.14.00 DVR:v10.02.09.400-k-debug QLE2742 FW:v9.14.00 DVR:v10.02.09.400-k-debug
-
Compruebe que
ql2xnvmeenable
está configurado. Esto permite que el adaptador Marvell funcione como iniciador NVMe/FC:cat /sys/module/qla2xxx/parameters/ql2xnvmeenable
La salida esperada es 1.
Paso 4: Opcionalmente, habilite 1 MB de E/S
ONTAP informa de un MDT (tamaño de transferencia de MAX Data) de 8 en los datos Identify Controller. Esto significa que el tamaño máximo de solicitud de E/S puede ser de hasta 1MB TB. Para emitir solicitudes de I/O de tamaño 1 MB para un host Broadcom NVMe/FC, debe aumentar lpfc
el valor lpfc_sg_seg_cnt
del parámetro a 256 con respecto al valor predeterminado de 64.
|
Estos pasos no se aplican a los hosts Qlogic NVMe/FC. |
-
Defina el
lpfc_sg_seg_cnt
parámetro en 256:cat /etc/modprobe.d/lpfc.conf
Debería ver un resultado similar al siguiente ejemplo:
options lpfc lpfc_sg_seg_cnt=256
-
Ejecute
dracut -f
el comando y reinicie el host. -
Compruebe que el valor de
lpfc_sg_seg_cnt
es 256:cat /sys/module/lpfc/parameters/lpfc_sg_seg_cnt
Paso 5: Verificar los servicios de arranque NVMe
Con SLES 15 SP7, el nvmefc-boot-connections.service
y nvmf-autoconnect.service
Servicios de arranque incluidos en NVMe/FC nvme-cli
Los paquetes se habilitan automáticamente para iniciarse durante el arranque del sistema. Una vez finalizado el arranque, verifique que los servicios de arranque estén habilitados.
-
Compruebe que
nvmf-autoconnect.service
está activado:systemctl status nvmf-autoconnect.service
Muestra el resultado de ejemplo
nvmf-autoconnect.service - Connect NVMe-oF subsystems automatically during boot Loaded: loaded (/usr/lib/systemd/system/nvmf-autoconnect.service; enabled; preset: enabled) Active: inactive (dead) since Fri 2025-07-04 23:56:38 IST; 4 days ago Main PID: 12208 (code=exited, status=0/SUCCESS) CPU: 62ms Jul 04 23:56:26 localhost systemd[1]: Starting Connect NVMe-oF subsystems automatically during boot... Jul 04 23:56:38 localhost systemd[1]: nvmf-autoconnect.service: Deactivated successfully. Jul 04 23:56:38 localhost systemd[1]: Finished Connect NVMe-oF subsystems automatically during boot.
-
Compruebe que
nvmefc-boot-connections.service
está activado:systemctl status nvmefc-boot-connections.service
Muestra el resultado de ejemplo
nvmefc-boot-connections.service - Auto-connect to subsystems on FC-NVME devices found during boot Loaded: loaded (/usr/lib/systemd/system/nvmefc-boot-connections.service; enabled; preset: enabled) Active: inactive (dead) since Mon 2025-07-07 19:52:30 IST; 1 day 4h ago Main PID: 2945 (code=exited, status=0/SUCCESS) CPU: 14ms Jul 07 19:52:30 HP-DL360-14-168 systemd[1]: Starting Auto-connect to subsystems on FC-NVME devices found during boot... Jul 07 19:52:30 HP-DL360-14-168 systemd[1]: nvmefc-boot-connections.service: Deactivated successfully. Jul 07 19:52:30 HP-DL360-14-168 systemd[1]: Finished Auto-connect to subsystems on FC-NVME devices found during boot.
Paso 6: Configurar NVMe/TCP
El protocolo NVMe/TCP no admite auto-connect
la operación. En su lugar, puede detectar los subsistemas y los espacios de nombres NVMe/TCP ejecutando manualmente las operaciones o connect-all
NVMe/TCP connect
.
-
Compruebe que el puerto del iniciador pueda recuperar los datos de la página de registro de detección en las LIF NVMe/TCP admitidas:
nvme discover -t tcp -w <host-traddr> -a <traddr>
Muestra el resultado de ejemplo
nvme discover -t tcp -w 192.168.111.80 -a 192.168.111.70 Discovery Log Number of Records 8, Generation counter 42 =====Discovery Log Entry 0====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 4 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.f8e2af201b7211f0ac2bd039eab67a95:discovery traddr: 192.168.211.71 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 1====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 3 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.f8e2af201b7211f0ac2bd039eab67a95:discovery traddr: 192.168.111.71 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 2====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 2 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.f8e2af201b7211f0ac2bd039eab67a95:discovery traddr: 192.168.211.70 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 3====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 1 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.f8e2af201b7211f0ac2bd039eab67a95:discovery traddr: 192.168.111.70 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 4====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 4 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.f8e2af201b7211f0ac2bd039eab67a95:subsystem.sample_tcp_sub traddr: 192.168.211.71 eflags: none sectype: none =====Discovery Log Entry 5====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 3 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.f8e2af201b7211f0ac2bd039eab67a95:subsystem.sample_tcp_sub traddr: 192.168.111.71 eflags: none sectype: none =====Discovery Log Entry 6====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 2 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.f8e2af201b7211f0ac2bd039eab67a95:subsystem.sample_tcp_sub traddr: 192.168.211.70 eflags: none sectype: none =====Discovery Log Entry 7====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 1 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.f8e2af201b7211f0ac2bd039eab67a95:subsystem.sample_tcp_sub traddr: 192.168.111.70 eflags: none sectype: none localhost:~ #
-
Compruebe que todas las demás combinaciones de LIF iniciador-objetivo NVMe/TCP puedan recuperar correctamente los datos de la página del registro de detección:
nvme discover -t tcp -w <host-traddr> -a <traddr>
Muestra el ejemplo
nvme discover -t tcp -w 192.168.111.80 -a 192.168.111.66 nvme discover -t tcp -w 192.168.111.80 -a 192.168.111.67 nvme discover -t tcp -w 192.168.211.80 -a 192.168.211.66 nvme discover -t tcp -w 192.168.211.80 -a 192.168.211.67
-
Ejecute el
nvme connect-all
Comando en todos los LIF objetivo iniciador NVMe/TCP admitidos entre los nodos:nvme connect-all -t tcp -w <host-traddr> -a <traddr>
Muestra el ejemplo
nvme connect-all -t tcp -w 192.168.111.80 -a 192.168.111.66 nvme connect-all -t tcp -w 192.168.111.80 -a 192.168.111.67 nvme connect-all -t tcp -w 192.168.211.80 -a 192.168.211.66 nvme connect-all -t tcp -w 192.168.211.80 -a 192.168.211.67
|
A partir de SLES 15 SP6, la configuración predeterminada para NVMe/TCP ctrl-loss-tmo El tiempo de espera está desactivado. Esto significa que no hay límite en el número de reintentos (reintento indefinido) y no es necesario configurar manualmente un tiempo de espera específico. ctrl-loss-tmo duración del tiempo de espera al utilizar el nvme connect o nvme connect-all comandos (opción -l ). Además, no se agotan los tiempos de espera de las controladoras NVMe/TCP en caso de un fallo de ruta y permanecen conectadas indefinidamente.
|
Paso 7: Validar NVMe-oF
Verifique que el estado de multivía de NVMe en kernel, el estado de ANA y los espacios de nombres de ONTAP sean correctos para la configuración de NVMe-oF.
-
Compruebe que la multivía NVMe en kernel esté habilitada:
cat /sys/module/nvme_core/parameters/multipath
Debe ver la siguiente salida:
Y
-
Compruebe que la configuración NVMe-oF adecuada (como, por ejemplo, el modelo configurado en la controladora NetApp ONTAP y la política de balanceo de carga establecida en round-robin) en los respectivos espacios de nombres de ONTAP se reflejen correctamente en el host:
-
Mostrar los subsistemas:
cat /sys/class/nvme-subsystem/nvme-subsys*/model
Debe ver la siguiente salida:
NetApp ONTAP Controller NetApp ONTAP Controller
-
Mostrar la política:
cat /sys/class/nvme-subsystem/nvme-subsys*/iopolicy
Debe ver la siguiente salida:
round-robin round-robin
-
-
Verifique que los espacios de nombres se hayan creado y detectado correctamente en el host:
nvme list
Muestra el ejemplo
Node SN Model --------------------------------------------------------- /dev/nvme4n1 81Ix2BVuekWcAAAAAAAB NetApp ONTAP Controller Namespace Usage Format FW Rev ----------------------------------------------------------- 1 21.47 GB / 21.47 GB 4 KiB + 0 B FFFFFFFF
-
Compruebe que el estado de la controladora de cada ruta sea activo y que tenga el estado de ANA correcto:
NVMe/FCnvme list-subsys /dev/nvme4n5
Muestra el resultado de ejemplo
nvme-subsys114 - NQN=nqn.1992-08.com.netapp:sn.9e30b9760a4911f08c87d039eab67a95:subsystem.sles_161_27 hostnqn=nqn.2014-08.org.nvmexpress:uuid:f6517cae-3133-11e8-bbff-7ed30aef123f iopolicy=round-robin\ +- nvme114 fc traddr=nn-0x234ed039ea359e4a:pn-0x2360d039ea359e4a,host_traddr=nn-0x20000090fae0ec88:pn-0x10000090fae0ec88 live optimized +- nvme115 fc traddr=nn-0x234ed039ea359e4a:pn-0x2362d039ea359e4a,host_traddr=nn-0x20000090fae0ec88:pn-0x10000090fae0ec88 live non-optimized +- nvme116 fc traddr=nn-0x234ed039ea359e4a:pn-0x2361d039ea359e4a,host_traddr=nn-0x20000090fae0ec89:pn-0x10000090fae0ec89 live optimized +- nvme117 fc traddr=nn-0x234ed039ea359e4a:pn-0x2363d039ea359e4a,host_traddr=nn-0x20000090fae0ec89:pn-0x10000090fae0ec89 live non-optimized
NVMe/TCPnvme list-subsys /dev/nvme9n1
Muestra el resultado de ejemplo
nvme-subsys9 - NQN=nqn.1992-08.com.netapp:sn.f8e2af201b7211f0ac2bd039eab67a95:subsystem.with_inband_with_json hostnqn=nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b2c04f444d33 iopolicy=round-robin \ +- nvme10 tcp traddr=192.168.111.71,trsvcid=4420,src_addr=192.168.111.80 live non-optimized +- nvme11 tcp traddr=192.168.211.70,trsvcid=4420,src_addr=192.168.211.80 live optimized +- nvme12 tcp traddr=192.168.111.70,trsvcid=4420,src_addr=192.168.111.80 live optimized +- nvme9 tcp traddr=192.168.211.71,trsvcid=4420,src_addr=192.168.211.80 live non-optimized
-
Confirmar que el complemento de NetApp muestra los valores correctos para cada dispositivo de espacio de nombres ONTAP:
nvme netapp ontapdevices -o column
Muestra el ejemplo
Device Vserver Namespace Path NSID UUID Size ---------------- ------------------------- -------------------------------------------------- ---- -------------------------------------- --------- /dev/nvme0n1 vs_161 /vol/fc_nvme_vol1/fc_nvme_ns1 1 32fd92c7-0797-428e-a577-fdb3f14d0dc3 5.37GB
nvme netapp ontapdevices -o json
Muestra el ejemplo
{ "Device":"/dev/nvme98n2", "Vserver":"vs_161", "Namespace_Path":"/vol/fc_nvme_vol71/fc_nvme_ns71", "NSID":2, "UUID":"39d634c4-a75e-4fbd-ab00-3f9355a26e43", "LBA_Size":4096, "Namespace_Size":5368709120, "UsedBytes":430649344, } ] }
Paso 8: Crear un controlador de descubrimiento persistente
A partir de ONTAP 9.11.1, puede crear un controlador de descubrimiento persistente (PDC) para un host SLES 15 SP7. Se requiere un PDC para detectar automáticamente una operación de adición o eliminación de un subsistema NVMe y cambios en los datos de la página de registro de detección.
-
Compruebe que los datos de la página de registro de detección estén disponibles y que se puedan recuperar mediante la combinación de LIF de destino y puerto iniciador:
nvme discover -t <trtype> -w <host-traddr> -a <traddr>
Muestra el resultado de ejemplo
Discovery Log Number of Records 8, Generation counter 18 =====Discovery Log Entry 0====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 4 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.4f7af2bd221811f0afadd039eab0dadd:discovery traddr: 192.168.111.66 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 1====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 2 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.4f7af2bd221811f0afadd039eab0dadd:discovery traddr: 192.168.211.66 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 2====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 3 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.4f7af2bd221811f0afadd039eab0dadd:discovery traddr: 192.168.111.67 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 3====== trtype: tcp adrfam: ipv4 subtype: current discovery subsystem treq: not specified portid: 1 trsvcid: 8009 subnqn: nqn.1992-08.com.netapp:sn.4f7af2bd221811f0afadd039eab0dadd:discovery traddr: 192.168.211.67 eflags: explicit discovery connections, duplicate discovery information sectype: none =====Discovery Log Entry 4====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 4 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.4f7af2bd221811f0afadd039eab0dadd:subsystem.pdc traddr: 192.168.111.66 eflags: none sectype: none =====Discovery Log Entry 5====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 2 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.4f7af2bd221811f0afadd039eab0dadd:subsystem.pdc traddr: 192.168.211.66 eflags: none sectype: none =====Discovery Log Entry 6====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 3 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.4f7af2bd221811f0afadd039eab0dadd:subsystem.pdc traddr: 192.168.111.67 eflags: none sectype: none =====Discovery Log Entry 7====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified portid: 1 trsvcid: 4420 subnqn: nqn.1992-08.com.netapp:sn.4f7af2bd221811f0afadd039eab0dadd:subsystem.pdc traddr: 192.168.211.67 eflags: none sectype: none
-
Cree un PDC para el subsistema de detección:
nvme discover -t <trtype> -w <host-traddr> -a <traddr> -p
Debe ver la siguiente salida:
nvme discover -t tcp -w 192.168.111.80 -a 192.168.111.66 -p
-
En el controlador ONTAP, compruebe que se ha creado el PDC:
vserver nvme show-discovery-controller -instance -vserver <vserver_name>
Muestra el resultado de ejemplo
vserver nvme show-discovery-controller -instance -vserver vs_pdc Vserver Name: vs_pdc Controller ID: 0101h Discovery Subsystem NQN: nqn.1992-08.com.netapp:sn.4f7af2bd221811f0afadd039eab0dadd:discovery Logical Interface: lif2 Node: A400-12-181 Host NQN: nqn.2014-08.org.nvmexpress:uuid:9796c1ec-0d34-11eb-b6b2-3a68dd3bab57 Transport Protocol: nvme-tcp Initiator Transport Address: 192.168.111.80 Transport Service Identifier: 8009 Host Identifier: 9796c1ec0d3411ebb6b23a68dd3bab57 Admin Queue Depth: 32 Header Digest Enabled: false Data Digest Enabled: false Keep-Alive Timeout (msec): 30000
Paso 9: Configurar la autenticación segura en banda
A partir de ONTAP 9.12.1, se admite la autenticación segura en banda a través de NVMe/TCP y NVMe/FC entre el host y el controlador ONTAP.
Para configurar la autenticación segura, cada host o controladora debe estar asociado con a. DH-HMAC-CHAP
Clave, que es una combinación de NQN del host o de la controladora NVMe y un secreto de autenticación configurado por el administrador. Para autenticar su par, un host o una controladora NVMe deben reconocer la clave asociada con el par.
Puede configurar la autenticación segura en banda mediante la interfaz de línea de comandos o un archivo config JSON. Si necesita especificar diferentes claves dhchap para diferentes subsistemas, debe utilizar un archivo JSON de configuración.
Configure la autenticación segura en banda mediante la CLI.
-
Obtenga el NQN del host:
cat /etc/nvme/hostnqn
-
Genere la clave dhchap para el host.
En el siguiente resultado, se describen
gen-dhchap-key
los parámetros de los comandos:nvme gen-dhchap-key -s optional_secret -l key_length {32|48|64} -m HMAC_function {0|1|2|3} -n host_nqn • -s secret key in hexadecimal characters to be used to initialize the host key • -l length of the resulting key in bytes • -m HMAC function to use for key transformation 0 = none, 1- SHA-256, 2 = SHA-384, 3=SHA-512 • -n host NQN to use for key transformation
En el siguiente ejemplo, se genera una clave dhchap aleatoria con HMAC establecido en 3 (SHA-512).
nvme gen-dhchap-key -m 3 -n nqn.2014-08.org.nvmexpress:uuid:e6dade64-216d-11ec-b7bb-7ed30a5482c3 DHHC-1:03:1CFivw9ccz58gAcOUJrM7Vs98hd2ZHSr+iw+Amg6xZPl5D2Yk+HDTZiUAg1iGgxTYqnxukqvYedA55Bw3wtz6sJNpR4=:
-
En la controladora ONTAP, añada el host y especifique ambas claves dhchap:
vserver nvme subsystem host add -vserver <svm_name> -subsystem <subsystem> -host-nqn <host_nqn> -dhchap-host-secret <authentication_host_secret> -dhchap-controller-secret <authentication_controller_secret> -dhchap-hash-function {sha-256|sha-512} -dhchap-group {none|2048-bit|3072-bit|4096-bit|6144-bit|8192-bit}
-
Un host admite dos tipos de métodos de autenticación: Unidireccional y bidireccional. En el host, conéctese a la controladora ONTAP y especifique claves dhchap según el método de autenticación elegido:
nvme connect -t tcp -w <host-traddr> -a <tr-addr> -n <host_nqn> -S <authentication_host_secret> -C <authentication_controller_secret>
-
Valide el
nvme connect authentication
comando mediante la verificación de las claves dhchap de host y controladora:-
Verifique las claves dhchap del host:
cat /sys/class/nvme-subsystem/<nvme-subsysX>/nvme*/dhchap_secret
Mostrar ejemplo de salida para una configuración unidireccional
# cat /sys/class/nvme-subsystem/nvme-subsys1/nvme*/dhchap_secret DHHC-1:01:iM63E6cX7G5SOKKOju8gmzM53qywsy+C/YwtzxhIt9ZRz+ky: DHHC-1:01:iM63E6cX7G5SOKKOju8gmzM53qywsy+C/YwtzxhIt9ZRz+ky: DHHC-1:01:iM63E6cX7G5SOKKOju8gmzM53qywsy+C/YwtzxhIt9ZRz+ky: DHHC-1:01:iM63E6cX7G5SOKKOju8gmzM53qywsy+C/YwtzxhIt9ZRz+ky:
-
Compruebe las claves dhchap del controlador:
cat /sys/class/nvme-subsystem/<nvme-subsysX>/nvme*/dhchap_ctrl_secret
Mostrar ejemplo de salida para una configuración bidireccional
# cat /sys/class/nvme-subsystem/nvme-subsys6/nvme*/dhchap_ctrl_secret DHHC-1:03:1CFivw9ccz58gAcOUJrM7Vs98hd2ZHSr+iw+Amg6xZPl5D2Yk+HDTZiUAg1iGgxTYqnxukqvYedA55Bw3wtz6sJNpR4=: DHHC-1:03:1CFivw9ccz58gAcOUJrM7Vs98hd2ZHSr+iw+Amg6xZPl5D2Yk+HDTZiUAg1iGgxTYqnxukqvYedA55Bw3wtz6sJNpR4=: DHHC-1:03:1CFivw9ccz58gAcOUJrM7Vs98hd2ZHSr+iw+Amg6xZPl5D2Yk+HDTZiUAg1iGgxTYqnxukqvYedA55Bw3wtz6sJNpR4=: DHHC-1:03:1CFivw9ccz58gAcOUJrM7Vs98hd2ZHSr+iw+Amg6xZPl5D2Yk+HDTZiUAg1iGgxTYqnxukqvYedA55Bw3wtz6sJNpR4=:
-
Cuando hay varios subsistemas NVMe disponibles en la configuración de la controladora ONTAP, se puede utilizar /etc/nvme/config.json
el archivo con nvme connect-all
el comando.
Para generar el archivo JSON, puede usar la -o
opción. Consulte las páginas del manual de NVMe connect-all para obtener más opciones de sintaxis.
-
Configure el archivo JSON:
Muestra el resultado de ejemplo
# cat /etc/nvme/config.json [ { "hostnqn":"nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b2c04f444d33", "hostid":"4c4c4544-0035-5910-804b-b2c04f444d33", "dhchap_key":"DHHC-1:01:i4i789R11sMuHLCY27RVI8XloC\/GzjRwyhxip5hmIELsHrBq:", "subsystems":[ { "nqn":"nqn.1992-08.com.netapp:sn.f8e2af201b7211f0ac2bd039eab67a95:subsystem.sample_tcp_sub", "ports":[ { "transport":"tcp", "traddr":"192.168.111.70", "host_traddr":"192.168.111.80", "trsvcid":"4420" "dhchap_ctrl_key":"DHHC-1:03:jqgYcJSKp73+XqAf2X6twr9ngBpr2n0MGWbmZIZq4PieKZCoilKGef8lAvhYS0PNK7T+04YD5CRPjh+m3qjJU++yR8s=:" }, { "transport":"tcp", "traddr":"192.168.111.71", "host_traddr":"192.168.111.80", "trsvcid":"4420", "dhchap_ctrl_key":"DHHC-1:03:jqgYcJSKp73+XqAf2X6twr9ngBpr2n0MGWbmZIZq4PieKZCoilKGef8lAvhYS0PNK7T+04YD5CRPjh+m3qjJU++yR8s=:" }, { "transport":"tcp", "traddr":"192.168.211.70", "host_traddr":"192.168.211.80", "trsvcid":"4420", "dhchap_ctrl_key":"DHHC-1:03:jqgYcJSKp73+XqAf2X6twr9ngBpr2n0MGWbmZIZq4PieKZCoilKGef8lAvhYS0PNK7T+04YD5CRPjh+m3qjJU++yR8s=:" }, { "transport":"tcp", "traddr":"192.168.211.71", "host_traddr":"192.168.211.80", "trsvcid":"4420", "dhchap_ctrl_key":"DHHC-1:03:jqgYcJSKp73+XqAf2X6twr9ngBpr2n0MGWbmZIZq4PieKZCoilKGef8lAvhYS0PNK7T+04YD5CRPjh+m3qjJU++yR8s=:" } ] } ] } ]
En el ejemplo anterior, dhchap_key
corresponde adhchap_secret
ydhchap_ctrl_key
corresponde adhchap_ctrl_secret
. -
Conéctese a la controladora ONTAP mediante el archivo JSON de configuración:
nvme connect-all -J /etc/nvme/config.json
Muestra el resultado de ejemplo
traddr=192.168.211.70 is already connected traddr=192.168.111.71 is already connected traddr=192.168.211.71 is already connected traddr=192.168.111.70 is already connected traddr=192.168.211.70 is already connected traddr=192.168.111.70 is already connected traddr=192.168.211.71 is already connected traddr=192.168.111.71 is already connected traddr=192.168.211.70 is already connected traddr=192.168.111.71 is already connected traddr=192.168.211.71 is already connected traddr=192.168.111.70 is already connected
-
Verifique que se hayan activado los secretos dhchap para las respectivas controladoras de cada subsistema:
-
Verifique las claves dhchap del host:
cat /sys/class/nvme-subsystem/nvme-subsys0/nvme0/dhchap_secret
Debe ver la siguiente salida:
DHHC-1:01:i4i789R11sMuHLCY27RVI8XloC/GzjRwyhxip5hmIELsHrBq:
-
Compruebe las claves dhchap del controlador:
cat /sys/class/nvme-subsystem/nvme-subsys0/nvme0/dhchap_ctrl_secret
Debe ver la siguiente salida:
DHHC-1:03:jqgYcJSKp73+XqAf2X6twr9ngBpr2n0MGWbmZIZq4PieKZCoilKGef8lAvhYS0PNK7T+04YD5CRPjh+m3qjJU++yR8s=:
-
Paso 10: Configurar la seguridad de la capa de transporte
Transport Layer Security (TLS) proporciona cifrado seguro e integral para conexiones NVMe entre los hosts NVMe-oF y una cabina ONTAP. A partir de ONTAP 9.16,1, puede configurar TLS 1,3 mediante la CLI y una clave precompartida configurada (PSK).
Los pasos de este procedimiento se realizan en el host de SUSE Linux Enterprise Server, excepto cuando se especifica que debe realizar un paso en el controlador ONTAP.
-
Comprueba que tienes lo siguiente
ktls-utils
,openssl
, ylibopenssl
paquetes instalados en el host:-
Verificar el
ktls-utils
:rpm -qa | grep ktls
Debería ver el siguiente resultado mostrado:
ktls-utils-0.10+33.g311d943-150700.1.5.x86_64
-
Verificar los paquetes SSL:
rpm -qa | grep ssl
Muestra el resultado de ejemplo
libopenssl3-3.2.3-150700.3.20.x86_64 openssl-3-3.2.3-150700.3.20.x86_64 libopenssl1_1-1.1.1w-150700.9.37.x86_64
-
-
Compruebe que tiene la configuración correcta para
/etc/tlshd.conf
:cat /etc/tlshd.conf
Muestra el resultado de ejemplo
[debug] loglevel=0 tls=0 nl=0 [authenticate] keyrings=.nvme [authenticate.client] #x509.truststore= <pathname> #x509.certificate= <pathname> #x509.private_key= <pathname> [authenticate.server] #x509.truststore= <pathname> #x509.certificate= <pathname> #x509.private_key= <pathname>
-
Activar
tlshd
para iniciar en el arranque del sistema:systemctl enable tlshd
-
Compruebe que el
tlshd
daemon se está ejecutando:systemctl status tlshd
Muestra el resultado de ejemplo
tlshd.service - Handshake service for kernel TLS consumers Loaded: loaded (/usr/lib/systemd/system/tlshd.service; enabled; preset: disabled) Active: active (running) since Wed 2024-08-21 15:46:53 IST; 4h 57min ago Docs: man:tlshd(8) Main PID: 961 (tlshd) Tasks: 1 CPU: 46ms CGroup: /system.slice/tlshd.service └─961 /usr/sbin/tlshd Aug 21 15:46:54 RX2530-M4-17-153 tlshd[961]: Built from ktls-utils 0.11-dev on Mar 21 2024 12:00:00
-
Genere el PSK de TLS mediante el `nvme gen-tls-key`comando :
-
Verificar el host:
cat /etc/nvme/hostnqn
Debe ver la siguiente salida:
nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b2c04f444d33
-
Verificar la clave:
nvme gen-tls-key --hmac=1 --identity=1 --subsysnqn= nqn.1992-08.com.netapp:sn.a2d41235b78211efb57dd039eab67a95:subsystem.nvme1
Debe ver la siguiente salida:
NVMeTLSkey-1:01:C50EsaGtuOp8n5fGE9EuWjbBCtshmfoHx4XTqTJUmydf0gIj:
-
-
En el controlador ONTAP, agregue el PSK TLS al subsistema ONTAP:
Muestra el resultado de ejemplo
nvme subsystem host add -vserver vs_iscsi_tcp -subsystem nvme1 -host-nqn nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b2c04f444d33 -tls-configured-psk NVMeTLSkey-1:01:C50EsaGtuOp8n5fGE9EuWjbBCtshmfoHx4XTqTJUmydf0gIj:
-
Inserte el PSK TLS en el anillo de claves del núcleo del host:
nvme check-tls-key --identity=1 --subsysnqn=nqn.1992-08.com.netapp:sn.a2d41235b78211efb57dd039eab67a95:subsystem.nvme1 --keydata=NVMeTLSkey-1:01:C50EsaGtuOp8n5fGE9EuWjbBCtshmfoHx4XTqTJUmydf0gIj: --insert
Debería ver la siguiente clave TLS:
Inserted TLS key 22152a7e
El PSK se muestra como NVMe1R01
Porque usaidentity v1
del algoritmo de protocolo de enlace TLS. Identity v1 es la única versión compatible con ONTAP. -
Compruebe que el PSK TLS se ha insertado correctamente:
cat /proc/keys | grep NVMe
Muestra el resultado de ejemplo
069f56bb I--Q--- 5 perm 3b010000 0 0 psk NVMe1R01 nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b2c04f444d33 nqn.1992-08.com.netapp:sn.a2d41235b78211efb57dd039eab67a95:subsystem.nvme1 oYVLelmiOwnvDjXKBmrnIgGVpFIBDJtc4hmQXE/36Sw=: 32
-
Conéctese al subsistema ONTAP mediante el PSK TLS insertado:
-
Verificar el TLS PSK:
nvme connect -t tcp -w 192.168.111.80 -a 192.168.111.66 -n nqn.1992-08.com.netapp:sn.a2d41235b78211efb57dd039eab67a95:subsystem.nvme1 --tls_key=0x069f56bb –tls
Debe ver la siguiente salida:
connecting to device: nvme0
-
Verifique la lista-subsys:
nvme list-subsys
Muestra el resultado de ejemplo
nvme-subsys0 - NQN=nqn.1992-08.com.netapp:sn.a2d41235b78211efb57dd039eab67a95:subsystem.nvme1 hostnqn=nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b2c04f444d33 \ +- nvme0 tcp traddr=192.168.111.66,trsvcid=4420,host_traddr=192.168.111.80,src_addr=192.168.111.80 live
-
-
Agregue el destino y verifique la conexión TLS al subsistema ONTAP especificado:
nvme subsystem controller show -vserver sles15_tls -subsystem sles15 -instance
Muestra el resultado de ejemplo
(vserver nvme subsystem controller show) Vserver Name: vs_iscsi_tcp Subsystem: nvme1 Controller ID: 0040h Logical Interface: tcpnvme_lif1_1 Node: A400-12-181 Host NQN: nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b2c04f444d33 Transport Protocol: nvme-tcp Initiator Transport Address: 192.168.111.80 Host Identifier: 4c4c454400355910804bb2c04f444d33 Number of I/O Queues: 2 I/O Queue Depths: 128, 128 Admin Queue Depth: 32 Max I/O Size in Bytes: 1048576 Keep-Alive Timeout (msec): 5000 Subsystem UUID: 8bbfb403-1602-11f0-ac2b-d039eab67a95 Header Digest Enabled: false Data Digest Enabled: false Authentication Hash Function: sha-256 Authentication Diffie-Hellman Group: 3072-bit Authentication Mode: unidirectional Transport Service Identifier: 4420 TLS Key Type: configured TLS PSK Identity: NVMe1R01 nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b2c04f444d33 nqn.1992-08.com.netapp:sn.a2d41235b78211efb57dd039eab67a95:subsystem.nvme1 oYVLelmiOwnvDjXKBmrnIgGVpFIBDJtc4hmQXE/36Sw= TLS Cipher: TLS-AES-128-GCM-SHA256
Paso 11: Revise los problemas conocidos
No hay problemas conocidos.