Skip to main content
日本語は機械翻訳による参考訳です。内容に矛盾や不一致があった場合には、英語の内容が優先されます。

Linux 統合キー設定 (LUKS)

共同作成者 netapp-aruldeepa

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) を使用して、ボリュームごとのホスト側暗号化を有効にすることができます。

手順
  1. バックエンド構成で 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"
          }
        }
      ]
    }
  2. 使用 `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}
  3. 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`パラメータは無視されます。

手順
  1. 追加する `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}
  2. ボリュームまたはスナップショット上の既存のパスフレーズを識別します。

    Volume
    tridentctl -d get volume luks-pvc1
    GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>
    
    ...luksPassphraseNames:["A"]
    Snapshot
    tridentctl -d get snapshot luks-pvc1
    GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>/<snapshotID>
    
    ...luksPassphraseNames:["A"]
  3. ボリュームの 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
  4. ボリュームをマウントする新しいポッドを作成します。これは回転を開始するために必要です。

  5. パスフレーズがローテーションされたことを確認します。

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

ボリュームとスナップショットで新しいパスフレーズのみが返されたときに、パスフレーズがローテーションされました。

メモ たとえば、2つのパスフレーズが返された場合 luksPassphraseNames: ["B", "A"]、回転は不完全です。新しいポッドをトリガーして、回転を完了させることができます。

ボリューム拡張を有効にする

LUKS で暗号化されたボリュームでボリューム拡張を有効にすることができます。

手順
  1. 有効にする `CSINodeExpandSecret`機能ゲート (ベータ 1.25 以上)。参照 "Kubernetes 1.25: CSIボリュームのノード駆動型拡張にSecretを使用する" 詳細については。

  2. 追加する `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 は適切な資格情報をドライバーに渡します。