|
Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar. |
Volume-Verschlüsselung
Longhorn unterstützt die Volume-Verschlüsselung sowohl im Filesystem als auch im Block Modus und bietet Schutz vor unbefugtem Zugriff, Datenverletzungen und Compliance-Verstößen. Sicherungen, die von verschlüsselten Volumes erstellt werden, sind ebenfalls verschlüsselt.
Die Volume-Verschlüsselung wird durch das Linux-Kernel-Modul dm_crypt, das Befehlszeilenprogramm cryptsetup und Kubernetes Secrets ermöglicht. dm_crypt und cryptsetup kümmern sich um die Erstellung und Verwaltung von verschlüsselten Geräten, während Secrets (und die zugehörigen Berechtigungen) die sichere Speicherung der Verschlüsselungsschlüssel erleichtern.
Anforderungen
Um verschlüsselte Volumes zu verwenden, stellen Sie sicher, dass das dm_crypt Kernel-Modul geladen ist und dass cryptsetup auf Ihren Worker-Knoten installiert ist.
Einrichten von Kubernetes Secrets und StorageClasses
Longhorn verwendet Kubernetes Secrets zur sicheren Speicherung von Verschlüsselungsschlüsseln. Kubernetes erlaubt die Verwendung von Template-Parametern, die während der Volume-Erstellung aufgelöst werden. Um ein Secret mit einem verschlüsselten Volume zu verwenden, müssen Sie das Secret als Parameter der StorageClass konfigurieren.
Template-Parameter ermöglichen es Ihnen, Secrets mit einzelnen Volumes oder mit einer Sammlung von Volumes zu verwenden. Für weitere Informationen zu Template-Parametern siehe StorageClass Secrets in der Kubernetes CSI Entwicklerdokumentation.
Im folgenden Beispiel wird der Verschlüsselungsschlüssel als String-Daten im CRYPTO_KEY_VALUE Parameter des Secrets angegeben. Die Verwendung von String-Daten eliminiert die Notwendigkeit der Base64-Codierung, bevor das Secret über kubectl create eingereicht wird.
Neben CRYPTO_KEY_VALUE bieten die Parameter CRYPTO_KEY_CIPHER, CRYPTO_KEY_HASH, CRYPTO_KEY_SIZE und CRYPTO_PBKDF die Anpassungsmöglichkeiten für die Volume-Verschlüsselung.
-
CRYPTO_KEY_CIPHER: Legt die Algorithmuszeichenfolge für die Chiffrier-Spezifikation fest. Der Standardwert istaes-xts-plain64für LUKS. -
CRYPTO_KEY_HASH: Gibt den Passphrase-Hash füropenan. Der Standardwert istsha256. -
CRYPTO_KEY_SIZE: Legt die Schlüssellänge in Bits fest, die ein Vielfaches von 8 sein muss. Der Standardwert ist256. -
CRYPTO_PBKDF: Legt den Password-Based Key Derivation Function (PBKDF) Algorithmus für den LUKS-Keyslot fest. Der Standardwert istargon2i.
Für weitere Informationen siehe cryptsetup(8) in den Linux-Manpages.
-
Beispiel eines Secret:
apiVersion: v1 kind: Secret metadata: name: longhorn-crypto namespace: longhorn-system stringData: CRYPTO_KEY_VALUE: "Your encryption passphrase" CRYPTO_KEY_PROVIDER: "secret" CRYPTO_KEY_CIPHER: "aes-xts-plain64" CRYPTO_KEY_HASH: "sha256" CRYPTO_KEY_SIZE: "256" CRYPTO_PBKDF: "argon2i" -
Beispiel einer StorageClass mit einem globalen Secret:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: longhorn-crypto-global provisioner: driver.longhorn.io allowVolumeExpansion: true parameters: numberOfReplicas: "3" staleReplicaTimeout: "2880" # 48 hours in minutes fromBackup: "" encrypted: "true" # global secret that contains the encryption key that will be used for all volumes csi.storage.k8s.io/provisioner-secret-name: "longhorn-crypto" csi.storage.k8s.io/provisioner-secret-namespace: "longhorn-system" csi.storage.k8s.io/node-publish-secret-name: "longhorn-crypto" csi.storage.k8s.io/node-publish-secret-namespace: "longhorn-system" csi.storage.k8s.io/node-stage-secret-name: "longhorn-crypto" csi.storage.k8s.io/node-stage-secret-namespace: "longhorn-system" csi.storage.k8s.io/node-expand-secret-name: "longhorn-crypto" csi.storage.k8s.io/node-expand-secret-namespace: "longhorn-system" -
Beispiel einer StorageClass mit einem volumen-spezifischen Secret:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: longhorn-crypto-per-volume provisioner: driver.longhorn.io allowVolumeExpansion: true parameters: numberOfReplicas: "3" staleReplicaTimeout: "2880" # 48 hours in minutes fromBackup: "" encrypted: "true" # per volume secret which utilizes the `pvc.name` and `pvc.namespace` template parameters csi.storage.k8s.io/provisioner-secret-name: ${pvc.name} csi.storage.k8s.io/provisioner-secret-namespace: ${pvc.namespace} csi.storage.k8s.io/node-publish-secret-name: ${pvc.name} csi.storage.k8s.io/node-publish-secret-namespace: ${pvc.namespace} csi.storage.k8s.io/node-stage-secret-name: ${pvc.name} csi.storage.k8s.io/node-stage-secret-namespace: ${pvc.namespace} csi.storage.k8s.io/node-expand-secret-name: ${pvc.name} csi.storage.k8s.io/node-expand-secret-namespace: ${pvc.namespace}
Verwendung eines verschlüsselten Volumes
Um ein verschlüsseltes Volume zu erstellen, müssen Sie ein PVC mit einer StorageClass erstellen, die für die Verschlüsselung konfiguriert ist. Die obigen Beispiele für StorageClass können als Ausgangspunkt verwendet werden.
Nach der Erstellung des PVC bleibt es im Pending-Zustand, bis das zugehörige Secret erstellt wurde und abgerufen werden kann. Ein neu erstelltes PVC bleibt im Pending-Zustand, bis das zugehörige Secret erstellt wurde und vom csi external-provisioner Sidecar abgerufen werden kann. Anschließend wird der reguläre Prozess zur Erstellung von Volumes fortgesetzt, wobei die Verschlüsselung wirksam wird.
Dateisystemerweiterung
Longhorn unterstützt sowohl die Online- als auch die Offline-Erweiterung für verschlüsselte Volumes.
Die folgenden Parameter der StorageClass sind erforderlich, um die Online-Erweiterung zu aktivieren:
-
csi.storage.k8s.io/node-expand-secret-name -
csi.storage.k8s.io/node-expand-secret-namespace
Longhorn v1.8.0 unterstützt keine Erweiterung von V2-Volumes.