Chapter 12. Configuring NVMe over fabrics using NVMe/TCP
In a Non-volatile Memory Express™ (NVMe™) over TCP (NVMe/TCP) setup, the host mode is fully supported and the controller setup is not supported.
Red Hat does not support the NVMe Target (nvmet
) functionality. Consult your storage manufacturer’s documentation for instructions about how to configure your NVMe over Fabrics block storage target device.
In Red Hat Enterprise Linux 10, the native NVMe multipathing is enabled by default. Enabling DM multipathing is not supported with NVMe/TCP.
12.1. Configuring an NVMe/TCP host Copy linkLink copied to clipboard!
You can configure a Non-volatile Memory Express™ (NVMe™) over TCP (NVMe/TCP) host by using the NVMe management command-line interface (nvme-cli
) tool. For more information, see the nvme(1)
man page on your system.
Procedure
Install the
nvme-cli
tool:dnf install nvme-cli
# dnf install nvme-cli
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Check the status of the controller:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Configure the host network for a newly installed Ethernet controller with a static IP address:
nmcli connection add con-name ens6 ifname ens6 type ethernet ip4 192.168.101.154/24 gw4 192.168.101.1
# nmcli connection add con-name ens6 ifname ens6 type ethernet ip4 192.168.101.154/24 gw4 192.168.101.1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Here, replace 192.168.101.154 with the host IP address.
nmcli connection mod ens6 ipv4.method manual nmcli connection up ens6
# nmcli connection mod ens6 ipv4.method manual # nmcli connection up ens6
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Since a new network is created to connect the NVMe/TCP host to the NVMe/TCP controller, repeat this step on the controller too.
Verification
Verify if the newly created host network works correctly:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.2. Connecting the NVMe/TCP host to the NVMe/TCP controller Copy linkLink copied to clipboard!
Connect the NVMe™ over TCP (NVMe/TCP) host to the NVMe/TCP controller system to verify that the NVMe/TCP host can now access the namespace. For more information, see nvme(1)
man page on your system.
The NVMe/TCP controller (nvmet-tcp
) module is not supported.
Prerequisites
- You have configured an NVMe/TCP host. For more information, see Configuring an NVMe/TCP host.
- You have configured an NVMe/TCP controller by using external storage software and the network is configured on the controller. In this procedure, 192.168.101.55 is the IP address of the NVMe/TCP controller.
Procedure
Load the
nvme-tcp
module if not already:modprobe nvme-tcp
# modprobe nvme-tcp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Discover the available subsystems on the NVMe controller:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Here, 192.168.101.55 is the NVMe/TCP controller IP address.
Configure the
/etc/nvme/discovery.conf
file to add the parameters used in thenvme discover
command:echo "--transport=tcp --traddr=192.168.101.55 --trsvcid=8009" >> /etc/nvme/discovery.conf
# echo "--transport=tcp --traddr=192.168.101.55 --trsvcid=8009" >> /etc/nvme/discovery.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Connect the NVMe/TCP host to the controller system:
nvme connect-all
# nvme connect-all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Make the NVMe/TCP connection persistent:
systemctl enable nvmf-autoconnect.service
# systemctl enable nvmf-autoconnect.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Verify that the NVMe/TCP host can access the namespace:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.3. Configuring NVMe host authentication Copy linkLink copied to clipboard!
To establish an authenticated connection with an NVMe over Fabrics (NVMe-oF) controller, you can configure authentication on a Non-volatile Memory Express (NVMe) host. NVMe authentication uses a shared secret or a pair of secrets, with a challenge-response protocol, for example, NVMe DH-HMAC-CHAP.
NVMe authentication is supported only for the NVMe/TCP transport type. This feature is not available for other transports, such as NVMe over Remote Direct Memory Access (NVMe/RDMA) or NVMe over Fibre Channel (NVMe/FC).
Prerequisites
-
The
nvme-cli
package is installed. -
You know the Host NVMe Qualified Name (Host NQN) and the Subsystem NVMe Qualified Name (Subsystem NQN), if using bi-directional authentication. To see the default Host NQN for your system, run
nvme show-hostnqnq
.
Procedure
Generate an authentication secret:
For the host:
hostkey=$(nvme gen-dhchap-key -n ${HOSTNQN})
# hostkey=$(nvme gen-dhchap-key -n ${HOSTNQN})
Copy to Clipboard Copied! Toggle word wrap Toggle overflow For the subsystem:
ctrlkey=$(nvme gen-dhchap-key -n ${SUBSYSTEM})
# ctrlkey=$(nvme gen-dhchap-key -n ${SUBSYSTEM})
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Configure the host for authentication:
nvme connect -t tcp -n ${SUBSYSTEM} -a ${TRADDR} -s 4420 --dhchap-secret=${hostkey} --dhchap-ctrl-secret=${ctrlkey}
# nvme connect -t tcp -n ${SUBSYSTEM} -a ${TRADDR} -s 4420 --dhchap-secret=${hostkey} --dhchap-ctrl-secret=${ctrlkey}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow This provides the authentication secrets to the
nvme-connect
utility so that it can authenticate and establish a connection to the target.-
Optional: To enable automated logins, set up persistent NVMe fabrics configuration. To do so, add the
--dhchap-secret
and--dhchap-ctrl-secret
parameters to/etc/nvme/discovery.conf
or/etc/nvme/config.json
.
-
Optional: To enable automated logins, set up persistent NVMe fabrics configuration. To do so, add the
Verification
Verify that the NVMe storage is attached:
nvme list
# nvme list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow This displays the list of NVMe devices currently attached to the host. Verify that the expected storage is listed, indicating the connection to the storage server is successful.