Skip to main content
이 제품의 최신 릴리즈를 사용할 수 있습니다.
본 한국어 번역은 사용자 편의를 위해 제공되는 기계 번역입니다. 영어 버전과 한국어 버전이 서로 어긋나는 경우에는 언제나 영어 버전이 우선합니다.

Linux Unified Key Setup(LUKS)

Trident에서 Linux Unified Key Setup(LUKS)을 활성화하여 ONTAP SAN 및 ONTAP SAN ECONOMY 볼륨을 암호화할 수 있습니다. Trident는 LUKS로 암호화된 볼륨에 대해 암호 순환 및 볼륨 확장을 지원합니다.

Trident에서 LUKS로 암호화된 볼륨은 "NIST"에서 권장하는 대로 aes-xts-plain64 암호 및 모드를 사용합니다.

참고 LUKS 암호화는 ASA r2 시스템에서 지원되지 않습니다. ASA r2 시스템에 대한 자세한 내용은 "ASA r2 스토리지 시스템에 대해 알아보세요"를 참조하십시오.
시작하기 전에
  • 워커 노드에는 cryptsetup 2.1 이상(단, 3.0 미만)이 설치되어 있어야 합니다. 자세한 내용은 "Gitlab: cryptsetup"를 참조하십시오.

  • 성능 향상을 위해 NetApp에서는 워커 노드가 AES-NI(Advanced Encryption Standard New Instructions)를 지원하도록 권장합니다. AES-NI 지원 여부를 확인하려면 다음 명령을 실행하십시오.

    grep "aes" /proc/cpuinfo

    아무것도 반환되지 않으면 프로세서가 AES-NI를 지원하지 않는 것입니다. AES-NI에 대한 자세한 내용은 "Intel: Advanced Encryption Standard Instructions(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 규격을 준수하는지(true 또는 LUKS 규격을 준수하지 않는지(`false`를 Trident에 알려줍니다.

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 볼륨을 동적으로 가져오려면 annotation `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 암호가 지정된 후 해당 볼륨을 마운트하는 Pod가 생성될 때 발생합니다. 새 Pod가 생성될 때 Trident는 볼륨의 LUKS 암호를 시크릿에 있는 활성 암호와 비교합니다.

  • 볼륨의 암호가 비밀의 활성 암호와 일치하지 않으면 순환이 발생합니다.

  • 볼륨의 암호가 비밀 키에 있는 활성 암호와 일치하면 previous-luks-passphrase 매개변수는 무시됩니다.

단계
  1. node-publish-secret-namenode-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. 볼륨 또는 스냅샷에 있는 기존 암호를 확인합니다.

    볼륨
    tridentctl -d get volume luks-pvc1
    GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>
    
    ...luksPassphraseNames:["A"]
    스냅샷
    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. 볼륨을 마운트하는 새 Pod를 생성합니다. 이는 로테이션을 시작하는 데 필요합니다.

  5. 암호가 교체되었는지 확인하십시오.

    볼륨
    tridentctl -d get volume luks-pvc1
    GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>
    
    ...luksPassphraseNames:["B"]
    스냅샷
    tridentctl -d get snapshot luks-pvc1
    GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>/<snapshotID>
    
    ...luksPassphraseNames:["B"]
결과

볼륨 및 스냅샷에 새 암호만 반환되면 암호가 교체된 것입니다.

참고 예를 들어 두 개의 암호문이 반환되면 luksPassphraseNames: ["B", "A"] 로테이션이 완료되지 않은 것입니다. 로테이션을 완료하기 위해 새 Pod를 트리거할 수 있습니다.

볼륨 확장 활성화

LUKS로 암호화된 볼륨에서 볼륨 확장을 활성화할 수 있습니다.

단계
  1. CSINodeExpandSecret 기능 게이트를 활성화합니다(베타 1.25+). 자세한 내용은 "Kubernetes 1.25: 노드 기반 CSI 볼륨 확장을 위한 시크릿 사용"를 참조하십시오.

  2. node-expand-secret-namenode-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이 적절한 자격 증명을 드라이버에 전달합니다.