Skip to main content
SAN hosts and cloud clients
O português é fornecido por meio de tradução automática para sua conveniência. O inglês precede o português em caso de inconsistências.

Configuração de host NVMe-of para SUSE Linux Enterprise Server 15 SP6 com ONTAP

Colaboradores

O NVMe sobre Fabrics (NVMe-of), incluindo NVMe sobre Fibre Channel (NVMe/FC) e outros transportes, é compatível com SUSE Linux Enterprise Server 15 SP6 com acesso a namespace assimétrico (ANA). Em ambientes NVMe-of, o ANA é equivalente ao multipathing ALUA em ambientes iSCSI e FCP e é implementado com multipath NVMe no kernel.

O suporte a seguir está disponível para a configuração de host NVMe-of para SUSE Linux Enterprise Server 15 SP6 com ONTAP:

  • Executando o tráfego NVMe e SCSI no mesmo host coexistente. Por exemplo, você pode configurar o dm-multipath para dispositivos SCSI mpath para LUNs SCSI e usar o multipath NVMe para configurar dispositivos de namespace NVMe-of no host.

  • Compatível com NVMe em TCP (NVMe/TCP) e NVMe/FC. Isso dá ao plug-in NetApp no pacote nativo nvme-cli a capacidade de exibir os detalhes do ONTAP para namespaces NVMe/FC e NVMe/TCP.

Para obter detalhes adicionais sobre as configurações suportadas, consulte o "Ferramenta de Matriz de interoperabilidade do NetApp".

Caraterísticas

  • Suporte para autenticação segura e na banda do NVMe

  • Suporte para controladores de descoberta persistente (PDCs) usando um NQN de descoberta exclusivo

  • Suporte à criptografia TLS 1,3 para NVMe/TCP

Limitações conhecidas

  • A inicialização DE SAN usando o protocolo NVMe-of não é atualmente suportada.

  • O suporte ao utilitário de host do NetApp sanlun não está disponível para NVMe-of em um host do SUSE Linux Enterprise Server 15 SP6. Em vez disso, você pode confiar no plug-in NetApp incluído no pacote nativo nvme-cli para todos os transportes NVMe-of.

Configurar o NVMe/FC

Você pode configurar o NVMe/FC com adaptadores Broadcom/Emulex FC ou Marvell/Qlogic FC para um SUSE Linux Enterprise Server 15 SP6 com configuração ONTAP.

Broadcom/Emulex

Configurar o NVMe/FC para um adaptador Broadcom/Emulex FC.

Passos
  1. Verifique se você está usando o modelo de adaptador recomendado:

    cat /sys/class/scsi_host/host*/modelname
    Exemplo de saída
    LPe32002 M2
    LPe32002-M2
  2. Verifique a descrição do modelo do adaptador:

    cat /sys/class/scsi_host/host*/modeldesc
    Exemplo de saída
    Emulex LightPulse LPe32002-M2 2-Port 32Gb Fibre Channel Adapter
    Emulex LightPulse LPe32002-M2 2-Port 32Gb Fibre Channel Adapter
  3. Verifique se você está usando as versões de firmware recomendadas do adaptador de barramento de host Emulex (HBA):

    cat /sys/class/scsi_host/host*/fwrev
    Exemplo de saída
    14.2.673.40, sli-4:2:c
    14.2.673.40, sli-4:2:c
  4. Verifique se você está usando a versão recomendada do driver LPFC:

    cat /sys/module/lpfc/version
    Exemplo de saída
    0:14.4.0.1
  5. Verifique se você pode exibir suas portas do iniciador:

    cat /sys/class/fc_host/host*/port_name
    Exemplo de saída
    0x10000090fae0ec88
    0x10000090fae0ec89
  6. Verifique se as portas do iniciador estão online:

    cat /sys/class/fc_host/host*/port_state
    Exemplo de saída
    Online
    Online
  7. Verifique se as portas do iniciador NVMe/FC estão ativadas e se as portas de destino estão visíveis:

    cat /sys/class/scsi_host/host*/nvme_info

    No exemplo a seguir, uma porta do iniciador é ativada e conetada com dois LIFs de destino.

    Mostrar exemplo de saída
    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 x2070d039ea359e4a WWNN x206bd039ea359e4a DID x0a0a05 TARGET DISCSRVC
    ONLINE
    NVME Statistics
    LS: Xmt 00000003ba Cmpl 00000003ba Abort 00000000
    LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000
    Total FCP Cmpl 0000000014e3dfb8 Issue 0000000014e308db OutIO ffffffffffff2923
     abort 00000845 noxri 00000000 nondlp 00000063 qdepth 00000000 wqerr 00000003 err 00000000
    FCP CMPL: xb 00000847 Err 00027f33
    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 x2071d039ea359e4a WWNN x206bd039ea359e4a DID x0a0305 TARGET DISCSRVC
    ONLINE
    NVME Statistics
    LS: Xmt 00000003ba Cmpl 00000003ba Abort 00000000
    LS XMIT: Err 00000000 CMPL: xb 00000000 Err 00000000
    Total FCP Cmpl 0000000014e39f78 Issue 0000000014e2b832 OutIO ffffffffffff18ba
     abort 0000082d noxri 00000000 nondlp 00000028 qdepth 00000000 wqerr 00000007 err 00000000
    FCP CMPL: xb 0000082d Err 000283bb
Marvell/QLogic

O driver nativo da caixa de entrada qla2xxx incluído no kernel do SUSE Linux Enterprise Server 15 SP6 tem as correções mais recentes. Essas correções são essenciais para o suporte ao ONTAP.

Configure o NVMe/FC para um adaptador Marvell/QLogic.

Passos
  1. Verifique se você está executando o driver de adaptador e as versões de firmware compatíveis:

    cat /sys/class/fc_host/host*/symbolic_name
    Exemplo de saída
    QLE2742 FW:v9.14.01 DVR: v10.02.09.200-k
    QLE2742 FW:v9.14.01 DVR: v10.02.09.200-k
  2. Verifique se o ql2xnvmeenable parâmetro está definido como 1:

    cat /sys/module/qla2xxx/parameters/ql2xnvmeenable

    O valor esperado é 1.

Ativar tamanho de e/S 1MB (opcional)

O ONTAP relata um MDTS (MAX Data Transfer Size) de 8 nos dados do controlador de identificação. Isso significa que o tamanho máximo da solicitação de e/S pode ser de até 1MBMB. Para emitir solicitações de e/S de tamanho 1 MB para um host NVMe/FC Broadcom, você deve aumentar lpfc o valor lpfc_sg_seg_cnt do parâmetro para 256 do valor padrão 64.

Observação Essas etapas não se aplicam a hosts Qlogic NVMe/FC.
Passos
  1. Defina lpfc_sg_seg_cnt o parâmetro como 256:

    cat /etc/modprobe.d/lpfc.conf
    options lpfc lpfc_sg_seg_cnt=256
  2. Execute o dracut -f comando e reinicie o host.

  3. Verifique se o valor esperado de lpfc_sg_seg_cnt é 256:

    cat /sys/module/lpfc/parameters/lpfc_sg_seg_cnt

Verificar os serviços NVMe

A partir do SUSE Linux Enterprise Server 15 SP6, os nvmefc-boot-connections.service serviços de inicialização e nvmf-autoconnect.service incluídos no pacote NVMe/FC nvme-cli são ativados automaticamente para serem iniciados durante a inicialização do sistema. Após a conclusão da inicialização do sistema, você deve verificar se os serviços de inicialização foram ativados.

Passos
  1. Verifique se nvmf-autoconnect.service está ativado:

    # systemctl status nvmf-autoconnect.service

    Mostrar exemplo de saída
    nvmf-autoconnect.service - Connect NVMe-oF subsystems automatically during boot
      Loaded: loaded (/usr/lib/systemd/system/nvmf-autoconnect.service; enabled; vendor preset: disabled)
      Active: inactive (dead) since Thu 2024-05-25 14:55:00 IST; 11min ago
    Process: 2108 ExecStartPre=/sbin/modprobe nvme-fabrics (code=exited, status=0/SUCCESS)
    Process: 2114 ExecStart=/usr/sbin/nvme connect-all (code=exited, status=0/SUCCESS)
    Main PID: 2114 (code=exited, status=0/SUCCESS)
    
    systemd[1]: Starting Connect NVMe-oF subsystems automatically during boot...
    nvme[2114]: traddr=nn-0x201700a098fd4ca6:pn-0x201800a098fd4ca6 is already connected
    systemd[1]: nvmf-autoconnect.service: Deactivated successfully.
    systemd[1]: Finished Connect NVMe-oF subsystems automatically during boot.
  2. Verifique se nvmefc-boot-connections.service está ativado:

    # systemctl status nvmefc-boot-connections.service

    Mostrar exemplo de saída
    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; vendor preset: enabled)
       Active: inactive (dead) since Thu 2024-05-25 14:55:00 IST; 11min ago
     Main PID: 1647 (code=exited, status=0/SUCCESS)
    
    systemd[1]: Starting Auto-connect to subsystems on FC-NVME devices found during boot...
    systemd[1]: nvmefc-boot-connections.service: Succeeded.
    systemd[1]: Finished Auto-connect to subsystems on FC-NVME devices found during boot.

Configurar o NVMe/TCP

O NVMe/TCP não tem uma funcionalidade de conexão automática. Em vez disso, você pode descobrir os subsistemas e namespaces NVMe/TCP executando as operações NVMe/TCP connect ou connect-all manualmente.

Passos
  1. Verifique se a porta do iniciador pode buscar os dados da página de log de descoberta nas LIFs NVMe/TCP suportadas:

    nvme discover -t tcp -w <host-traddr> -a <traddr>
    Mostrar exemplo de saída
    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.8b5ee9199ff411eea468d039ea36a106:discovery
    traddr: 192.168.211.67
    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.8b5ee9199ff411eea468d039ea36a106:discovery
    traddr: 192.168.111.67
    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.8b5ee9199ff411eea468d039ea36a106:discovery
    traddr: 192.168.211.66
    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.8b5ee9199ff411eea468d039ea36a106:discovery
    traddr: 192.168.111.66
    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.8b5ee9199ff411eea468d039ea36a106:subsystem.nvme_tcp_1
    traddr: 192.168.211.67
    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.8b5ee9199ff411eea468d039ea36a106:subsystem.nvme_tcp_1
    traddr: 192.168.111.67
    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.8b5ee9199ff411eea468d039ea36a106:subsystem.nvme_tcp_1
    traddr: 192.168.211.66
    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.8b5ee9199ff411eea468d039ea36a106:subsystem.nvme_tcp_1
    traddr: 192.168.111.66
    eflags: none
    sectype: none
  2. Verifique se todas as outras combinações de LIF de destino de iniciador NVMe/TCP podem obter com êxito os dados da página de log de descoberta:

    nvme discover -t tcp -w <host-traddr> -a <traddr>
    Exemplo de saída
    #nvme discover -t tcp -w 192.168.111.79 -a 192.168.111.66
    #nvme discover -t tcp -w 192.168.111.79 -a 192.168.111.67
    #nvme discover -t tcp -w 192.168.211.79 -a 192.168.211.66
    #nvme discover -t tcp -w 192.168.211.79 -a 192.168.211.67
  3. Execute o nvme connect-all comando em todos os LIFs de destino iniciador NVMe/TCP suportados nos nós:

    nvme connect-all -t tcp -w <host-traddr> -a <traddr>
    Exemplo de saída
    # nvme connect-all -t tcp -w 192.168.111.79 -a 192.168.111.66
    # nvme connect-all -t tcp -w 192.168.111.79 -a 192.168.111.67
    # nvme connect-all -t tcp -w 192.168.211.79 -a 192.168.211.66
    # nvme connect-all -t tcp -w 192.168.211.79 -a 192.168.211.67
    Observação A partir do SUSE Linux Enterprise Server 15 SP6, a configuração padrão para o tempo limite NVMe/TCP ctrl-loss-tmo é desativada. Isso significa que não há limite no número de tentativas (tentativa indefinida) e não é necessário configurar manualmente uma duração específica ctrl-loss-tmo de tempo limite ao usar os nvme connect comandos ou nvme connect-all (opção -l). Além disso, as controladoras NVMe/TCP não apresentam timeouts em caso de falha de caminho e permanecem conetadas indefinidamente.

Validar o NVMe-of

Use o procedimento a seguir para validar o NVMe-of para um SUSE Linux Enterprise Server 15 SP6 com configuração ONTAP.

Passos
  1. Verifique se o multipath NVMe no kernel está habilitado:

    cat /sys/module/nvme_core/parameters/multipath

    O valor esperado é "Y".

  2. Verifique se o host tem o modelo de controladora correto para os namespaces NVMe do ONTAP:

    cat /sys/class/nvme-subsystem/nvme-subsys*/model
    Exemplo de saída
    NetApp ONTAP Controller
    NetApp ONTAP Controller
  3. Verifique a política de e/S NVMe da respetiva controladora de e/S NVMe ONTAP:

    cat /sys/class/nvme-subsystem/nvme-subsys*/iopolicy
    Exemplo de saída
    round-robin
    round-robin
  4. Verifique se os namespaces do ONTAP estão visíveis para o host:

    nvme list -v
    Mostrar exemplo de saída
    Subsystem        Subsystem-NQN                                                                         Controllers
    ---------------- ------------------------------------------------------------------------------------- ---------------------
    nvme-subsys0     nqn.1992- 08.com.netapp:sn.0501daf15dda11eeab68d039eaa7a232:subsystem.unidir_dhcha p  nvme0, nvme1, nvme2, nvme3
    
    Device   SN                   MN                                       FR       TxPort Asdress        Subsystem    Namespaces
    -------- -------------------- ---------------------------------------- -------- ---------------------------------------------
    nvme0    81LGgBUqsI3EAAAAAAAE NetApp ONTAP Controller   FFFFFFFF tcp traddr=192.168.111.66,trsvcid=4420,host_traddr=192.168.111.79 nvme-subsys0 nvme0n1
    nvme1    81LGgBUqsI3EAAAAAAAE NetApp ONTAP Controller   FFFFFFFF tcp traddr=192.168.111.67,trsvcid=4420,host_traddr=192.168.111.79 nvme-subsys0 nvme0n1
    nvme2    81LGgBUqsI3EAAAAAAAE NetApp ONTAP Controller   FFFFFFFF tcp traddr=192.168.211.66,trsvcid=4420,host_traddr=192.168.211.79 nvme-subsys0 nvme0n1
    nvme3    81LGgBUqsI3EAAAAAAAE NetApp ONTAP Controller   FFFFFFFF tcp traddr=192.168.211.67,trsvcid=4420,host_traddr=192.168.211.79 nvme-subsys0 nvme0n1
    Device        Generic     NSID       Usage                 Format         Controllers
    ------------ ------------ ---------- -------------------------------------------------------------
    /dev/nvme0n1 /dev/ng0n1   0x1     1.07  GB /   1.07  GB    4 KiB +  0 B   nvme0, nvme1, nvme2, nvme3
  5. Verifique se o estado do controlador de cada caminho está ativo e tem o status ANA correto:

    nvme list-subsys /dev/<subsystem_name>
    NVMe/FC
    nvme list-subsys /dev/nvme2n1
    Mostrar exemplo de saída
    nvme-subsys2 - NQN=nqn.1992-
    08.com.netapp:sn.06303c519d8411eea468d039ea36a106:subs
    ystem.nvme
     hostnqn=nqn.2014-08.org.nvmexpress:uuid:4c4c4544-
    0056-5410-8048-c6c04f425633
     iopolicy=round-robin
    \
    +- nvme4 fc traddr=nn-0x208fd039ea359e4a:pn-0x210dd039ea359e4a,host_traddr=nn-0x2000f4c7aa0cd7ab:pn-0x2100f4c7aa0cd7ab live optimized
    +- nvme6 fc traddr=nn-0x208fd039ea359e4a:pn-0x210ad039ea359e4a,host_traddr=nn-0x2000f4c7aa0cd7aa:pn-0x2100f4c7aa0cd7aa live optimized
    NVMe/TCP
    nvme list-subsys
    Mostrar exemplo de saída
    nvme-subsys1 - NQN=nqn.1992-08.com.netapp:sn.8b5ee9199ff411eea468d039ea36a106:subsystem.nvme_tcp_1
     hostnqn=nqn.2014-08.org.nvmexpress:uuid:4c4c4544-0035-5910-804b-b2c04f444d33
     iopolicy=round-robin
    \
    +- nvme4 tcp traddr=192.168.111.66,trsvcid=4420,host_traddr=192.168.111.79,src_addr=192.168.111.79 live
    +- nvme3 tcp traddr=192.168.211.66,trsvcid=4420,host_traddr=192.168.211.79,src_addr=192.168.111.79 live
    +- nvme2 tcp traddr=192.168.111.67,trsvcid=4420,host_traddr=192.168.111.79,src_addr=192.168.111.79 live
    +- nvme1 tcp traddr=192.168.211.67,trsvcid=4420,host_traddr=192.168.211.79,src_addr=192.168.111.79 live
  6. Verifique se o plug-in NetApp exibe os valores corretos para cada dispositivo de namespace ONTAP:

    Coluna
    nvme netapp ontapdevices -o column
    Exemplo de saída
    Device           Vserver    Namespace Path                       NSID UUID                                   Size
    ---------------- ---------- ------------------------------------ ------------------------------------------- --------
    /dev/nvme0n1     vs_192     /vol/fcnvme_vol_1_1_0/fcnvme_ns      1    c6586535-da8a-40fa-8c20-759ea0d69d33   20GB
    JSON
    nvme netapp ontapdevices -o json
    Mostrar exemplo de saída
    {
    "ONTAPdevices":[
    {
    "Device":"/dev/nvme0n1",
    "Vserver":"vs_192",
    "Namespace_Path":"/vol/fcnvme_vol_1_1_0/fcnvme_ns",
    "NSID":1,
    "UUID":"c6586535-da8a-40fa-8c20-759ea0d69d33",
    "Size":"20GB",
    "LBA_Data_Size":4096,
    "Namespace_Size":262144
    }
    ]
    }

Crie um controlador de descoberta persistente

A partir do ONTAP 9.11,1, você pode criar um controlador de descoberta persistente (PDC) para um host do SUSE Linux Enterprise Server 15 SP6. Um PDC é necessário para detetar automaticamente um subsistema NVMe adicionar ou remover operações e alterações nos dados da página de log de descoberta.

Passos
  1. Verifique se os dados da página de log de descoberta estão disponíveis e podem ser recuperados por meio da combinação de porta do iniciador e LIF de destino:

    nvme discover -t <trtype> -w <host-traddr> -a <traddr>
    Mostrar exemplo de saída
    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.8b5ee9199ff411eea468d039ea36a106:discovery
    traddr: 192.168.211.67
    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.8b5ee9199ff411eea468d039ea36a106:discovery
    traddr: 192.168.111.67
    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.8b5ee9199ff411eea468d039ea36a106:discovery
    traddr: 192.168.211.66
    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.8b5ee9199ff411eea468d039ea36a106:discovery
    traddr: 192.168.111.66
    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.8b5ee9199ff411eea468d039ea36a106:subsystem.nvme_tcp_1
    traddr: 192.168.211.67
    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.8b5ee9199ff411eea468d039ea36a106:subsystem.nvme_tcp_1
    traddr: 192.168.111.67
    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.8b5ee9199ff411eea468d039ea36a106:subsystem.nvme_tcp_1
    traddr: 192.168.211.66
    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.8b5ee9199ff411eea468d039ea36a106:subsystem.nvme_tcp_1
    traddr: 192.168.111.66
    eflags: none
    sectype: none
  2. Crie um PDC para o subsistema de descoberta:

    nvme discover -t <trtype> -w <host-traddr> -a <traddr> -p
    Exemplo de saída
    nvme discover -t tcp -w 192.168.111.79 -a 192.168.111.666 -p
  3. No controlador ONTAP, verifique se o PDC foi criado:

    vserver nvme show-discovery-controller -instance -vserver <vserver_name>
    Mostrar exemplo de saída
    vserver nvme show-discovery-controller -instance -vserver vs_nvme79
    Vserver Name: vs_CLIENT116 Controller ID: 00C0h
    Discovery Subsystem NQN: nqn.1992-
    08.com.netapp:sn.48391d66c0a611ecaaa5d039ea165514:discovery Logical Interface UUID: d23cbb0a-c0a6-11ec-9731-d039ea165abc Logical Interface:
    CLIENT116_lif_4a_1
    Node: A400-14-124
    Host NQN: nqn.2014-08.org.nvmexpress:uuid:12372496-59c4-4d1b-be09-74362c0c1afc
    Transport Protocol: nvme-tcp
    Initiator Transport Address: 192.168.1.16
    Host Identifier: 59de25be738348f08a79df4bce9573f3 Admin Queue Depth: 32
    Header Digest Enabled: false Data Digest Enabled: false
    Vserver UUID: 48391d66-c0a6-11ec-aaa5-d039ea165514

Configure a autenticação segura na banda

A partir do ONTAP 9.12,1, a autenticação segura na banda é suportada por NVMe/TCP e NVMe/FC entre um host do SUSE Linux Enterprise Server 15 SP6 e uma controladora ONTAP.

Para configurar a autenticação segura, cada host ou controlador deve estar associado a uma DH-HMAC-CHAP chave, que é uma combinação do NQN do host ou controlador NVMe e um segredo de autenticação configurado pelo administrador. Para autenticar seu peer, um host ou controlador NVMe deve reconhecer a chave associada ao peer.

Você pode configurar a autenticação segura na banda usando a CLI ou um arquivo JSON de configuração. Se você precisar especificar diferentes chaves dhchap para diferentes subsistemas, você deve usar um arquivo JSON de configuração.

CLI

Configure a autenticação segura na banda usando a CLI.

Passos
  1. Obtenha o NQN do host:

    cat /etc/nvme/hostnqn
  2. Gere a chave dhchap para o host SUSE Linux Enterprise Server 15 SP6.

    A saída a seguir descreve os gen-dhchap-key parâmetros de comando:

    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

    No exemplo a seguir, uma chave dhchap aleatória com HMAC definido como 3 (SHA-512) é gerada.

    # nvme gen-dhchap-key -m 3 -n nqn.2014-08.org.nvmexpress:uuid:d3ca725a- ac8d-4d88-b46a-174ac235139b
    DHHC-1:03:J2UJQfj9f0pLnpF/ASDJRTyILKJRr5CougGpGdQSysPrLu6RW1fGl5VSjbeDF1n1DEh3nVBe19nQ/LxreSBeH/bx/pU=:
  3. No controlador ONTAP, adicione o host e especifique ambas as chaves 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}
  4. Um host suporta dois tipos de métodos de autenticação, unidirecional e bidirecional. No host, conete-se ao controlador ONTAP e especifique as chaves dhchap com base no método de autenticação escolhido:

    nvme connect -t tcp -w <host-traddr> -a <tr-addr> -n <host_nqn> -S <authentication_host_secret> -C <authentication_controller_secret>
  5. Valide o nvme connect authentication comando verificando as chaves dhchap do host e do controlador:

    1. Verifique as chaves dhchap do host:

      cat /sys/class/nvme-subsystem/<nvme-subsysX>/nvme*/dhchap_secret
      Mostrar exemplo de saída para uma configuração unidirecional
      # cat /sys/class/nvme-subsystem/nvme-subsys1/nvme*/dhchap_secret
      DHHC-1:03:je1nQCmjJLUKD62mpYbzlpuw0OIws86NB96uNO/t3jbvhp7fjyR9bIRjOHg8wQtye1JCFSMkBQH3pTKGdYR1OV9gx00=:
      DHHC-1:03:je1nQCmjJLUKD62mpYbzlpuw0OIws86NB96uNO/t3jbvhp7fjyR9bIRjOHg8wQtye1JCFSMkBQH3pTKGdYR1OV9gx00=:
      DHHC-1:03:je1nQCmjJLUKD62mpYbzlpuw0OIws86NB96uNO/t3jbvhp7fjyR9bIRjOHg8wQtye1JCFSMkBQH3pTKGdYR1OV9gx00=:
      DHHC-1:03:je1nQCmjJLUKD62mpYbzlpuw0OIws86NB96uNO/t3jbvhp7fjyR9bIRjOHg8wQtye1JCFSMkBQH3pTKGdYR1OV9gx00=:
    2. Verifique as chaves dhchap do controlador:

      cat /sys/class/nvme-subsystem/<nvme-subsysX>/nvme*/dhchap_ctrl_secret
      Mostrar exemplo de saída para uma configuração bidirecional
      # cat /sys/class/nvme-subsystem/nvme-subsys6/nvme*/dhchap_ctrl_secret
      DHHC-1:03:WorVEV83eYO53kV4Iel5OpphbX5LAphO3F8fgH3913tlrkSGDBJTt3crXeTUB8fCwGbPsEyz6CXxdQJi6kbn4IzmkFU=:
      DHHC-1:03:WorVEV83eYO53kV4Iel5OpphbX5LAphO3F8fgH3913tlrkSGDBJTt3crXeTUB8fCwGbPsEyz6CXxdQJi6kbn4IzmkFU=:
      DHHC-1:03:WorVEV83eYO53kV4Iel5OpphbX5LAphO3F8fgH3913tlrkSGDBJTt3crXeTUB8fCwGbPsEyz6CXxdQJi6kbn4IzmkFU=:
      DHHC-1:03:WorVEV83eYO53kV4Iel5OpphbX5LAphO3F8fgH3913tlrkSGDBJTt3crXeTUB8fCwGbPsEyz6CXxdQJi6kbn4IzmkFU=:
Ficheiro JSON

Quando vários subsistemas NVMe estiverem disponíveis na configuração do controlador ONTAP, você poderá usar o /etc/nvme/config.json arquivo com o nvme connect-all comando.

Para gerar o arquivo JSON, você pode usar a -o opção. Consulte as páginas do manual do NVMe connect-all para obter mais opções de sintaxe.

Passos
  1. Configure o arquivo JSON:

    Mostrar exemplo de saída
    # cat /etc/nvme/config.json
    [
     {
        "hostnqn":"nqn.2014-08.org.nvmexpress:uuid:12372496-59c4-4d1b-be09-74362c0c1afc",
        "hostid":"3ae10b42-21af-48ce-a40b-cfb5bad81839",
        "dhchap_key":"DHHC-1:03:Cu3ZZfIz1WMlqZFnCMqpAgn/T6EVOcIFHez215U+Pow8jTgBF2UbNk3DK4wfk2EptWpna1rpwG5CndpOgxpRxh9m41w=:"
     },
     {
        "hostnqn":"nqn.2014-08.org.nvmexpress:uuid:12372496-59c4-4d1b-be09-74362c0c1afc",
        "subsystems":[
            {
                "nqn":"nqn.1992-08.com.netapp:sn.48391d66c0a611ecaaa5d039ea165514:subsystem.subsys_CLIENT116",
                "ports":[
                   {
                        "transport":"tcp",
                        "traddr":" 192.168.111.66 ",
                        "host_traddr":" 192.168.111.79",
                        "trsvcid":"4420",
                        "dhchap_ctrl_key":"DHHC-
    1:01:0h58bcT/uu0rCpGsDYU6ZHZvRuVqsYKuBRS0Nu0VPx5HEwaZ:"
                   },
                   {
                        "transport":"tcp",
                        "traddr":" 192.168.111.66 ",
                        "host_traddr":" 192.168.111.79",
                        "trsvcid":"4420",
                        "dhchap_ctrl_key":"DHHC-
    1:01:0h58bcT/uu0rCpGsDYU6ZHZvRuVqsYKuBRS0Nu0VPx5HEwaZ:"
                   },
                   {
                        "transport":"tcp",
                       "traddr":" 192.168.111.66 ",
                        "host_traddr":" 192.168.111.79",
                        "trsvcid":"4420",
                        "dhchap_ctrl_key":"DHHC-
    1:01:0h58bcT/uu0rCpGsDYU6ZHZvRuVqsYKuBRS0Nu0VPx5HEwaZ:"
                   },
                   {
                        "transport":"tcp",
                        "traddr":" 192.168.111.66 ",
                        "host_traddr":" 192.168.111.79",
                        "trsvcid":"4420",
                        "dhchap_ctrl_key":"DHHC-
    1:01:0h58bcT/uu0rCpGsDYU6ZHZvRuVqsYKuBRS0Nu0VPx5HEwaZ:"
                   }
               ]
           }
       ]
     }
    ]

    E

    Observação No exemplo anterior, dhchap_key corresponde dhchap_secret e dhchap_ctrl_key corresponde dhchap_ctrl_secret a .
  2. Conete-se ao controlador ONTAP usando o arquivo JSON de configuração:

    # nvme connect-all -J /etc/nvme/config.json
    Mostrar exemplo de saída
    traddr=192.168.111.66 is already connected
    traddr=192.168.211.66 is already connected
    traddr=192.168.111.66 is already connected
    traddr=192.168.211.66 is already connected
    traddr=192.168.111.66 is already connected
    traddr=192.168.211.66 is already connected
    traddr=192.168.111.67 is already connected
    traddr=192.168.211.67 is already connected
    traddr=192.168.111.67 is already connected
    traddr=192.168.211.67 is already connected
    traddr=192.168.111.67 is already connected
    traddr=192.168.111.67 is already connected
  3. Verifique se os segredos dhchap foram ativados para os respetivos controladores para cada subsistema:

    1. Verifique as chaves dhchap do host:

      # cat /sys/class/nvme-subsystem/nvme-subsys0/nvme0/dhchap_secret
      Exemplo de saída
      DHHC-1:01:NunEWY7AZlXqxITGheByarwZdQvU4ebZg9HOjIr6nOHEkxJg:
    2. Verifique as chaves dhchap do controlador:

      # cat /sys/class/nvme-subsystem/nvme-subsys0/nvme0/dhchap_ctrl_secret
      Exemplo de saída
      DHHC-
      1:03:2YJinsxa2v3+m8qqCiTnmgBZoH6mIT6G/6f0aGO8viVZB4VLNLH4z8CvK7pVYxN6S5fOAtaU3DNi12rieRMfdbg3704=:

Configurar a Segurança da camada de Transporte

O Transport Layer Security (TLS) fornece criptografia completa segura para conexões NVMe entre hosts NVMe-of e um array ONTAP. A partir do ONTAP 9.16,1, você pode configurar o TLS 1,3 usando a CLI e uma chave pré-compartilhada (PSK) configurada.

Sobre esta tarefa

Execute as etapas deste procedimento no host do SUSE Linux Enterprise Server 15 SP6, exceto onde ele especifica que você executa uma etapa no controlador ONTAP.

Passos
  1. Verifique se você tem os seguintes pacotes ktls-utils, openssl e libopenssl instalados no host:

    1. rpm -qa | grep ktls

      Exemplo de saída
      ktls-utils-0.10+12.gc3923f7-150600.1.2.x86_64
    2. rpm -qa | grep ssl

      Exemplo de saída
      openssl-3-3.1.4-150600.5.7.1.x86_64
      libopenssl1_1-1.1.1w-150600.5.3.1.x86_64
      libopenssl3-3.1.4-150600.5.7.1.x86_64
  2. Verifique se você tem a configuração correta para /etc/tlshd.conf:

    # cat /etc/tlshd.conf
    Mostrar exemplo de saída
    [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>
  3. Ativar tlshd para iniciar na inicialização do sistema:

    # systemctl enable tlshd
  4. Verifique se o tlshd daemon está em execução:

    # systemctl status tlshd
    Mostrar exemplo de saída
    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
  5. Gere o TLS PSK utilizando o nvme gen-tls-key:

    1. # cat /etc/nvme/hostnqn

      Exemplo de saída
      nqn.2014-08.org.nvmexpress:uuid:e58eca24-faff-11ea-8fee-3a68dd3b5c5f
    2. # nvme gen-tls-key --hmac=1 --identity=1 --subsysnqn=nqn.1992-08.com.netapp:sn.1d59a6b2416b11ef9ed5d039ea50acb3:subsystem.sles15

      Exemplo de saída
      NVMeTLSkey-1:01:dNcby017axByCko8GivzOO9zGlgHDXJCN6KLzvYoA+NpT1uD:
  6. No controlador ONTAP, adicione o TLS PSK ao subsistema ONTAP:

    # nvme subsystem host add -vserver sles15_tls -subsystem sles15 -host-nqn nqn.2014-08.org.nvmexpress:uuid:ffa0c815-e28b-4bb1-8d4c-7c6d5e610bfc -tls-configured-psk NVMeTLSkey-1:01:dNcby017axByCko8GivzOO9zGlgHDXJCN6KLzvYoA+NpT1uD:
  7. Insira o TLS PSK no chaveiro do kernel do host:

    # nvme check-tls-key --identity=1 --subsysnqn=nqn.2014-08.org.nvmexpress:uuid:ffa0c815-e28b-4bb1-8d4c-7c6d5e610bf --keydata=NVMeTLSkey-1:01:dNcby017axByCko8GivzOO9zGlgHDXJCN6KLzvYoA+NpT1uD: --insert
    Exemplo de saída
    Inserted TLS key 22152a7e
    Observação O PSK é exibido como "NVMe1R01" porque usa "Identity v1" do algoritmo de handshake TLS. O Identity v1 é a única versão que o ONTAP suporta.
  8. Verifique se o TLS PSK está inserido corretamente:

    # cat /proc/keys | grep NVMe
    Exemplo de saída
    22152a7e I--Q---     1 perm 3b010000     0     0 psk       NVMe1R01 nqn.2014-08.org.nvmexpress:uuid:ffa0c815-e28b-4bb1-8d4c-7c6d5e610bfc nqn.1992-08.com.netapp:sn.1d59a6b2416b11ef9ed5d039ea50acb3:subsystem.sles15 UoP9dEfvuCUzzpS0DYxnshKDapZYmvA0/RJJ8JAqmAo=: 32
  9. Conete-se ao subsistema ONTAP usando o TLS PSK inserido:

    1. # nvme connect -t tcp -w 20.20.10.80 -a 20.20.10.14 -n nqn.1992-08.com.netapp:sn.1d59a6b2416b11ef9ed5d039ea50acb3:subsystem.sles15 --tls_key=0x22152a7e --tls

      Exemplo de saída
      connecting to device: nvme0
    2. # nvme list-subsys

      Exemplo de saída
      nvme-subsys0 - NQN=nqn.1992-08.com.netapp:sn.1d59a6b2416b11ef9ed5d039ea50acb3:subsystem.sles15
                     hostnqn=nqn.2014-08.org.nvmexpress:uuid:ffa0c815-e28b-4bb1-8d4c-7c6d5e610bfc
                     iopolicy=round-robin
      \
       +- nvme0 tcp traddr=20.20.10.14,trsvcid=4420,host_traddr=20.20.10.80,src_addr=20.20.10.80 live
  10. Adicione o destino e verifique a conexão TLS ao subsistema ONTAP especificado:

    # nvme subsystem controller show -vserver sles15_tls -subsystem sles15 -instance

    Mostrar exemplo de saída
      (vserver nvme subsystem controller show)
                           Vserver Name: sles15_tls
                              Subsystem: sles15
                          Controller ID: 0040h
                      Logical Interface: sles15t_e1a_1
                                   Node: A900-17-174
                               Host NQN: nqn.2014-08.org.nvmexpress:uuid:ffa0c815-e28b-4bb1-8d4c-7c6d5e610bfc
                     Transport Protocol: nvme-tcp
            Initiator Transport Address: 20.20.10.80
                        Host Identifier: ffa0c815e28b4bb18d4c7c6d5e610bfc
                   Number of I/O Queues: 4
                       I/O Queue Depths: 128, 128, 128, 128
                      Admin Queue Depth: 32
                  Max I/O Size in Bytes: 1048576
              Keep-Alive Timeout (msec): 5000
                           Vserver UUID: 1d59a6b2-416b-11ef-9ed5-d039ea50acb3
                         Subsystem UUID: 9b81e3c5-5037-11ef-8a90-d039ea50ac83
                 Logical Interface UUID: 8185dcac-5035-11ef-8abb-d039ea50acb3
                  Header Digest Enabled: false
                    Data Digest Enabled: false
           Authentication Hash Function: -
    Authentication Diffie-Hellman Group: -
                    Authentication Mode: none
           Transport Service Identifier: 4420
                           TLS Key Type: configured
                       TLS PSK Identity: NVMe1R01 nqn.2014-08.org.nvmexpress:uuid:ffa0c815-e28b-4bb1-8d4c-7c6d5e610bfc nqn.1992-08.com.netapp:sn.1d59a6b2416b11ef9ed5d039ea50acb3:subsystem.sles15 UoP9dEfvuCUzzpS0DYxnshKDapZYmvA0/RJJ8JAqmAo=
                             TLS Cipher: TLS-AES-128-GCM-SHA256

Problemas conhecidos

Não há problemas conhecidos para o SUSE Linux Enterprise Server 15 SP6 com a versão ONTAP.