Linux統一化金鑰設定(LUKS)
您可以啟用 Linux 統一金鑰設定( LUKS )來加密 Trident 上的 ONTAP SAN 和 ONTAP SAN 經濟磁碟區。Trident 支援使用複雜密碼的旋轉和磁碟區擴充、適用於使用 LUKS 加密的磁碟區。
在 Trident 中, LUKS 加密的磁碟區使用 AES-XTS-plain64 cypher 和模式"NIST",如所建議。
-
工作者節點必須安裝密碼設定2.1或更高版本(但低於3.0)。如需詳細資訊、請造訪 "Gitlab:密碼設定"。
-
基於效能考量、我們建議工作節點支援進階加密標準新增指令(AES-NI)。若要驗證AES-NI支援、請執行下列命令:
grep "aes" /proc/cpuinfo
如果沒有歸還任何內容、您的處理器就不支援AES-NI。如需AES-NI的詳細資訊、請造訪: "Intel:進階加密標準指令(AES-NI)"。
啟用LUKS加密
您可以使用Linux Unified Key Setup(LUKS)來啟用每個Volume、主機端的加密功能、以利ONTAP 執行SAN和ONTAP 支援SAN經濟效益的磁碟區。
-
在後端組態中定義LUKS加密屬性。如需ONTAP 有關支援不支援SAN的後端組態選項的詳細資訊、請參閱 "支援SAN組態選項ONTAP"。
"storage": [ { "labels":{"luks": "true"}, "zone":"us_east_1a", "defaults": { "luksEncryption": "true" } }, { "labels":{"luks": "false"}, "zone":"us_east_1a", "defaults": { "luksEncryption": "false" } }, ]
-
使用
parameters.selector
使用LUKS加密定義儲存資源池。例如: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}
-
建立包含LUKS通關密碼的秘密。例如:
kubectl -n trident create -f luks-pvc1.yaml apiVersion: v1 kind: Secret metadata: name: luks-pvc1 stringData: luks-passphrase-name: A luks-passphrase: secretA
限制
LUKS加密磁碟區無法利用ONTAP 重複資料刪除技術與壓縮技術。
用於匯入 LUKS Volume 的後端組態
若要匯入 LUKS Volume 、您必須在後端將設 luksEncryption`為(`true
。 luksEncryption`選項告訴 Trident 卷是否符合 LUKS (`false
)(`true`或不符合 LUKS ),如下例所示。
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'
用於匯入 LUKS Volume 的 PVC 組態
若要動態匯入 LUKS Volume 、請將註釋設 trident.netapp.io/luksEncryption`為 `true
、並在 PVC 中包含啟用 LUKS 的儲存類別、如本範例所示。
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
旋轉LUKS複雜密碼
您可以旋轉LUKS複雜密碼並確認輪調。
請勿忘記密碼、除非您已驗證它不再被任何磁碟區、快照或機密所引用。如果參考的通關密碼遺失、您可能無法掛載磁碟區、而且資料將保持加密且無法存取。 |
如果在指定新的LUKS通關密碼之後建立裝載磁碟區的Pod、則會發生LUKS通關密碼循環。建立新的 Pod 時、 Trident 會將磁碟區上的 LUKS 複雜密碼與機密中的作用中複雜密碼進行比較。
-
如果磁碟區上的通關密碼與機密中的作用中通關密碼不相符、就會發生輪調。
-
如果磁碟區上的通關密碼與機密中的作用中通關密碼相符
previous-luks-passphrase
參數被忽略。
-
新增
node-publish-secret-name
和node-publish-secret-namespace
StorageClass參數。例如: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}
-
識別磁碟區或快照上的現有密碼。
Volumetridentctl -d get volume luks-pvc1 GET http://127.0.0.1:8000/trident/v1/volume/<volumeID> ...luksPassphraseNames:["A"]
Snapshottridentctl -d get snapshot luks-pvc1 GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>/<snapshotID> ...luksPassphraseNames:["A"]
-
更新磁碟區的LUKS機密、以指定新的和先前的密碼。確保
previous-luke-passphrase-name
和previous-luks-passphrase
請與先前的通關密碼相符。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
-
建立新的Pod以掛載Volume。這是啟動旋轉所需的。
-
確認複雜密碼已旋轉。
Volumetridentctl -d get volume luks-pvc1 GET http://127.0.0.1:8000/trident/v1/volume/<volumeID> ...luksPassphraseNames:["B"]
Snapshottridentctl -d get snapshot luks-pvc1 GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>/<snapshotID> ...luksPassphraseNames:["B"]
只有在磁碟區和快照上傳回新的通關密碼時、才會旋轉通關密碼。
例如、如果傳回兩個複雜密碼 luksPassphraseNames: ["B", "A"] 、旋轉不完整。您可以觸發新的Pod以嘗試完成旋轉。
|
啟用Volume擴充
您可以在LUKS加密的Volume上啟用Volume擴充。
-
啟用
CSINodeExpandSecret
功能閘道(beta 1.25 +)。請參閱 "Kubernetes 1.25:使用Secrets進行節點導向的SCSI Volume擴充" 以取得詳細資料。 -
新增
node-expand-secret-name
和node-expand-secret-namespace
StorageClass參數。例如: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
當您啟動線上儲存擴充時、kubelet會將適當的認證資料傳遞給驅動程式。