Linux 統合キー設定 (LUKS)
Linux Unified Key Setup (LUKS) を有効にして、 Trident上のONTAP SAN およびONTAP SAN ECONOMY ボリュームを暗号化できます。 Trident は、 LUKS で暗号化されたボリュームのパスフレーズローテーションとボリューム拡張をサポートします。
Tridentでは、LUKSで暗号化されたボリュームは、aes-xts-plain64暗号とモードを使用します。これは、"NIST" 。
|
|
LUKS 暗号化はASA r2 システムではサポートされていません。 ASA r2システムの詳細については、以下を参照してください。"ASA r2 ストレージシステムについて学ぶ" 。 |
-
ワーカー ノードには、cryptsetup 2.1 以上 (3.0 未満) がインストールされている必要があります。詳細については、"Gitlab: 暗号化セットアップ" 。
-
パフォーマンス上の理由から、 NetAppワーカー ノードで Advanced Encryption Standard New Instructions (AES-NI) をサポートすることを推奨しています。 AES-NI のサポートを確認するには、次のコマンドを実行します。
grep "aes" /proc/cpuinfo
何も返されない場合、プロセッサは AES-NI をサポートしていません。 AES-NI の詳細については、以下をご覧ください。"インテル: 高度暗号化標準命令 (AES-NI)" 。
LUKS暗号化を有効にする
ONTAP SAN およびONTAP SAN ECONOMY ボリュームでは、Linux Unified Key Setup (LUKS) を使用して、ボリュームごとのホスト側暗号化を有効にすることができます。
-
バックエンド構成で LUKS 暗号化属性を定義します。 ONTAP SANのバックエンド構成オプションの詳細については、以下を参照してください。"ONTAP SAN構成オプション" 。
{ "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ボリュームをインポートするためのバックエンド構成
LUKSボリュームをインポートするには、 luksEncryption`に(`true`バックエンドで。その `luksEncryption`オプションはボリュームがLUKS準拠かどうかをTridentに伝える(`true)またはLUKSに準拠していない(false) を次の例のように入力します。
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ボリュームをインポートするためのPVC構成
LUKSボリュームを動的にインポートするには、アノテーションを設定します `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 パスフレーズが指定された後にボリュームをマウントするポッドが作成されると、LUKS パスフレーズのローテーションが発生します。新しいポッドが作成されると、 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 -
ボリュームをマウントする新しいポッドを作成します。これは回転を開始するために必要です。
-
パスフレーズがローテーションされたことを確認します。
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"]
ボリュームとスナップショットで新しいパスフレーズのみが返されたときに、パスフレーズがローテーションされました。
|
|
たとえば、2つのパスフレーズが返された場合 luksPassphraseNames: ["B", "A"]、回転は不完全です。新しいポッドをトリガーして、回転を完了させることができます。
|
ボリューム拡張を有効にする
LUKS で暗号化されたボリュームでボリューム拡張を有効にすることができます。
-
有効にする `CSINodeExpandSecret`機能ゲート (ベータ 1.25 以上)。参照 "Kubernetes 1.25: CSIボリュームのノード駆動型拡張にSecretを使用する" 詳細については。
-
追加する `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 は適切な資格情報をドライバーに渡します。