Skip to main content
La versione in lingua italiana fornita proviene da una traduzione automatica. Per eventuali incoerenze, fare riferimento alla versione in lingua inglese.

Configurazione della chiave unificata Linux (LUKS)

Collaboratori netapp-aruldeepa

È 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" .

Nota 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" .
Prima di iniziare
  • 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.

Passi
  1. 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"
          }
        }
      ]
    }
  2. Utilizzo parameters.selector per 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}
  3. 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.

Attenzione 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.
Informazioni su questo compito

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-passphrase il parametro viene ignorato.

Passi
  1. Aggiungi il node-publish-secret-name E node-publish-secret-namespace Parametri 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}
  2. Identificare le passphrase esistenti sul volume o sullo snapshot.

    Volume
    tridentctl -d get volume luks-pvc1
    GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>
    
    ...luksPassphraseNames:["A"]
    Istantanea
    tridentctl -d get snapshot luks-pvc1
    GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>/<snapshotID>
    
    ...luksPassphraseNames:["A"]
  3. Aggiornare il segreto LUKS per il volume per specificare le passphrase nuove e precedenti. Garantire previous-luke-passphrase-name E previous-luks-passphrase corrisponde 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
  4. Crea un nuovo pod montando il volume. Ciò è necessario per avviare la rotazione.

  5. Verificare che la passphrase sia stata ruotata.

    Volume
    tridentctl -d get volume luks-pvc1
    GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>
    
    ...luksPassphraseNames:["B"]
    Istantanea
    tridentctl -d get snapshot luks-pvc1
    GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>/<snapshotID>
    
    ...luksPassphraseNames:["B"]
Risultati

La passphrase è stata ruotata quando sul volume e sullo snapshot è stata restituita solo la nuova passphrase.

Nota 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.

Passi
  1. Abilita il CSINodeExpandSecret feature 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.

  2. Aggiungi il node-expand-secret-name E node-expand-secret-namespace Parametri 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
Risultati

Quando si avvia l'espansione dello storage online, kubelet passa le credenziali appropriate al driver.