-
Notifications
You must be signed in to change notification settings - Fork 591
Closed as not planned
Labels
component/nvme-ofIssues and PRs related to NVMe-oF.Issues and PRs related to NVMe-oF.wontfixThis will not be worked onThis will not be worked on
Description
Describe the feature you'd like to have
[WIP]
Add TLS/PSK (Pre-Shared Key) authentication support for NVMe-oF connections in the CSI driver, enabling encrypted communication between Kubernetes nodes and Ceph NVMe-oF gateways.
This is a requirement from PM.
What is the value to the end user? (why is it a priority?)
Security Benefits:
- Encryption in Transit: All storage traffic between nodes and gateways is encrypted using TLS 1.3, protecting against network sniffing
- Authentication: Ensures only authorized nodes can connect to storage subsystems, preventing unauthorized access
How will we know we have a good solution? (acceptance criteria)
- StorageClass parameter enableTLS: "true" activates TLS/PSK for volumes
- PSK keys are auto-generated using cryptographically secure random generation
- Keys are stored in Kubernetes Secrets, never in logs or volume metadata
- Each volume-node pair gets a unique PSK for granular access control
The Solution Architecture:
-
Key Generation: When a volume is attached to a node, the CSI controller generates a unique 256-bit random PSK key
-
Secure Distribution:
- Controller stores PSK in a Kubernetes Secret (encrypted by K8s)
- Configures the Ceph gateway to accept this PSK for the specific host
- Passes only the secret reference (not the key) to the node
-
Protected Connection:
- Node CSI plugin retrieves PSK from K8s Secret (over encrypted API)
- Uses PSK with nvme connect --tls to establish encrypted connection
- All subsequent I/O is encrypted with TLS 1.3
Add any other context or screenshots about the feature request here.
In fact, the changes will be in 2 places:
- In the controller, where adding host. We will generate PSK key if
enableTLS: "true" # Enable TLS/PSK authenticationin storageClass was provided. We need to attach the psk key in AddHost GRPC call as another parameter. Then save it in k8s secret encrypted.
- In Nodeserver, where
nvme connectcommand is executed, if PSK\TLS key is provided, add it as another parameter.
The Flow:
NOTE:
- By using psk, the listener must be created with
--secrureoption. - the host that runs the
nvmecommands must be at least redhat version 9.6 with nvme tool at least version 2.11 - the NVMe-oF GW must deploy with
encryption_keyoption (in the spec file)
Metadata
Metadata
Labels
component/nvme-ofIssues and PRs related to NVMe-oF.Issues and PRs related to NVMe-oF.wontfixThis will not be worked onThis will not be worked on