Configurazione della chiave unificata Linux (LUKS)
È possibile abilitare Linux Unified Key Setup (LUKS) per crittografare i volumi ONTAP SAN e ONTAP SAN ECONOMY su Trident. Trident supporta la rotazione delle passphrase e l'espansione del volume per i volumi crittografati con LUKS.
In Trident, i volumi crittografati LUKS utilizzano la cifratura e la modalità aes-xts-plain64, come raccomandato da"NIST" .
|
|
La crittografia LUKS non è supportata per i sistemi ASA r2. Per informazioni sui sistemi ASA r2, vedere"Scopri di più sui sistemi di archiviazione ASA r2" . |
-
Sui nodi worker deve essere installato cryptsetup 2.1 o versione successiva (ma inferiore a 3.0). Per maggiori informazioni, visita"Gitlab: cryptsetup" .
-
Per motivi di prestazioni, NetApp consiglia che i nodi worker supportino Advanced Encryption Standard New Instructions (AES-NI). Per verificare il supporto AES-NI, eseguire il seguente comando:
grep "aes" /proc/cpuinfo
Se non viene restituito nulla, il processore non supporta AES-NI. Per maggiori informazioni su AES-NI, visitare:"Intel: Istruzioni per lo standard di crittografia avanzata (AES-NI)" .
Abilita la crittografia LUKS
È possibile abilitare la crittografia lato host per volume utilizzando Linux Unified Key Setup (LUKS) per i volumi ONTAP SAN e ONTAP SAN ECONOMY.
-
Definire gli attributi di crittografia LUKS nella configurazione del backend. Per ulteriori informazioni sulle opzioni di configurazione backend per ONTAP SAN, fare riferimento a"Opzioni di configurazione SAN ONTAP" .
{ "storage": [ { "labels": { "luks": "true" }, "zone": "us_east_1a", "defaults": { "luksEncryption": "true" } }, { "labels": { "luks": "false" }, "zone": "us_east_1a", "defaults": { "luksEncryption": "false" } } ] } -
Utilizzo
parameters.selectorper definire i pool di archiviazione utilizzando la crittografia LUKS. Per esempio:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: luks provisioner: csi.trident.netapp.io parameters: selector: "luks=true" csi.storage.k8s.io/node-stage-secret-name: luks-${pvc.name} csi.storage.k8s.io/node-stage-secret-namespace: ${pvc.namespace} -
Crea un segreto che contenga la passphrase LUKS. Per esempio:
kubectl -n trident create -f luks-pvc1.yaml apiVersion: v1 kind: Secret metadata: name: luks-pvc1 stringData: luks-passphrase-name: A luks-passphrase: secretA
Limitazioni
I volumi crittografati con LUKS non possono sfruttare la deduplicazione e la compressione ONTAP .
Configurazione backend per l'importazione di volumi LUKS
Per importare un volume LUKS, è necessario impostare luksEncryption A(true sul backend. IL luksEncryption l'opzione indica a Trident se il volume è conforme a LUKS(true ) o non conforme a LUKS(false ) come mostrato nell'esempio seguente.
version: 1
storageDriverName: ontap-san
managementLIF: 10.0.0.1
dataLIF: 10.0.0.2
svm: trident_svm
username: admin
password: password
defaults:
luksEncryption: 'true'
spaceAllocation: 'false'
snapshotPolicy: default
snapshotReserve: '10'
Configurazione PVC per l'importazione di volumi LUKS
Per importare dinamicamente i volumi LUKS, impostare l'annotazione trident.netapp.io/luksEncryption A true e includere una classe di archiviazione abilitata LUKS nel PVC come mostrato in questo esempio.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: luks-pvc
namespace: trident
annotations:
trident.netapp.io/luksEncryption: "true"
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: luks-sc
Ruota una passphrase LUKS
È possibile ruotare la passphrase LUKS e confermare la rotazione.
|
|
Non dimenticare una passphrase finché non hai verificato che non sia più referenziata da alcun volume, snapshot o segreto. Se si perde una passphrase di riferimento, potrebbe non essere possibile montare il volume e i dati rimarranno crittografati e inaccessibili. |
La rotazione della passphrase LUKS si verifica quando viene creato un pod che monta il volume dopo aver specificato una nuova passphrase LUKS. Quando viene creato un nuovo pod, Trident confronta la passphrase LUKS sul volume con la passphrase attiva nel segreto.
-
Se la passphrase sul volume non corrisponde alla passphrase attiva nel segreto, si verifica la rotazione.
-
Se la passphrase sul volume corrisponde alla passphrase attiva nel segreto, il
previous-luks-passphraseil parametro viene ignorato.
-
Aggiungi il
node-publish-secret-nameEnode-publish-secret-namespaceParametri StorageClass. Per esempio:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-san provisioner: csi.trident.netapp.io parameters: trident.netapp.io/backendType: "ontap-san" csi.storage.k8s.io/node-stage-secret-name: luks csi.storage.k8s.io/node-stage-secret-namespace: ${pvc.namespace} csi.storage.k8s.io/node-publish-secret-name: luks csi.storage.k8s.io/node-publish-secret-namespace: ${pvc.namespace} -
Identificare le passphrase esistenti sul volume o sullo snapshot.
Volumetridentctl -d get volume luks-pvc1 GET http://127.0.0.1:8000/trident/v1/volume/<volumeID> ...luksPassphraseNames:["A"]
Istantaneatridentctl -d get snapshot luks-pvc1 GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>/<snapshotID> ...luksPassphraseNames:["A"]
-
Aggiornare il segreto LUKS per il volume per specificare le passphrase nuove e precedenti. Garantire
previous-luke-passphrase-nameEprevious-luks-passphrasecorrisponde alla passphrase precedente.apiVersion: v1 kind: Secret metadata: name: luks-pvc1 stringData: luks-passphrase-name: B luks-passphrase: secretB previous-luks-passphrase-name: A previous-luks-passphrase: secretA -
Crea un nuovo pod montando il volume. Ciò è necessario per avviare la rotazione.
-
Verificare che la passphrase sia stata ruotata.
Volumetridentctl -d get volume luks-pvc1 GET http://127.0.0.1:8000/trident/v1/volume/<volumeID> ...luksPassphraseNames:["B"]
Istantaneatridentctl -d get snapshot luks-pvc1 GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>/<snapshotID> ...luksPassphraseNames:["B"]
La passphrase è stata ruotata quando sul volume e sullo snapshot è stata restituita solo la nuova passphrase.
|
|
Se vengono restituite due passphrase, ad esempio luksPassphraseNames: ["B", "A"] , la rotazione è incompleta. È possibile attivare un nuovo pod per tentare di completare la rotazione.
|
Abilita l'espansione del volume
È possibile abilitare l'espansione del volume su un volume crittografato con LUKS.
-
Abilita il
CSINodeExpandSecretfeature gate (beta 1.25+). Fare riferimento a "Kubernetes 1.25: utilizzare i segreti per l'espansione dei volumi CSI basata sui nodi" per i dettagli. -
Aggiungi il
node-expand-secret-nameEnode-expand-secret-namespaceParametri StorageClass. Per esempio:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: luks provisioner: csi.trident.netapp.io parameters: selector: "luks=true" csi.storage.k8s.io/node-stage-secret-name: luks-${pvc.name} csi.storage.k8s.io/node-stage-secret-namespace: ${pvc.namespace} csi.storage.k8s.io/node-expand-secret-name: luks-${pvc.name} csi.storage.k8s.io/node-expand-secret-namespace: ${pvc.namespace} allowVolumeExpansion: true
Quando si avvia l'espansione dello storage online, kubelet passa le credenziali appropriate al driver.