Linux 통합 키 설정(LUKS)
LUKS(Linux 통합 키 설정)를 활성화하여 Astra Trident에서 ONTAP SAN 및 ONTAP SAN 경제 볼륨을 암호화할 수 있습니다. Astra Trident는 LUKS 암호화 볼륨에 대한 암호 순환 및 볼륨 확장을 지원합니다.
Astra Trident에서 LUKS로 암호화된 볼륨은 에서 권장하는 AES-XTS-plan64 사이퍼 및 모드를 사용합니다"NIST".
-
작업자 노드에는 Cryptsetup 2.1 이상(3.0 이하)이 설치되어 있어야 합니다. 더 많은 정보는 를 "Gitlab: cryptsetup"방문하십시오.
-
성능상의 이유로 작업자 노드는 AES-NI(Advanced Encryption Standard New Instructions)를 지원하는 것이 좋습니다. AES-NI 지원을 확인하려면 다음 명령을 실행합니다.
grep "aes" /proc/cpuinfo
아무 것도 반환되지 않으면 프로세서는 AES-NI를 지원하지 않습니다. AES-NI에 대한 자세한 내용은 를 "인텔: AES-NI(Advanced Encryption Standard Instructions)"참조하십시오.
LUKS 암호화를 사용합니다
ONTAP SAN 및 ONTAP SAN 이코노미 볼륨에 대해 Linux 통합 키 설정(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 볼륨을 가져오려면 백엔드에서 로(true
설정해야 luksEncryption
합니다. luksEncryption
(`false`다음 예에 표시된 것처럼 볼륨이 LUKS (`true`규정을 준수하는지 여부에 대해서는 Astra 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 볼륨을 동적으로 가져오려면 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를 생성할 때 Astra Trident는 볼륨의 LUKS 암호를 비밀의 활성 패스프레이즈(passphrase)와 비교합니다.
-
볼륨의 암호가 비밀의 활성 암호와 일치하지 않으면 회전이 발생합니다.
-
볼륨의 암호가 암호의 활성 암호와 일치하면
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}
-
볼륨 또는 스냅숏에서 기존 암호를 식별합니다.
볼륨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"]
-
볼륨에 대한 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
-
볼륨을 마운트하는 새 포드를 생성합니다. 이 작업은 회전을 시작하는 데 필요합니다.
-
패스프레이즈가 회전되었는지 확인합니다.
볼륨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"] 회전이 완료되지 않은 것입니다. 새 포드를 트리거하여 회전을 완료할 수 있습니다.
|
볼륨 확장을 설정합니다
LUKS 암호화 볼륨에서 볼륨 확장을 활성화할 수 있습니다.
-
`CSINodeExpandSecret`피처 게이트(베타 1.25+)를 활성화합니다. 자세한 내용은 을 "Kubernetes 1.25: CSI 볼륨의 노드 기반 확장에 비밀을 사용합니다" 참조하십시오.
-
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은 적절한 자격 증명을 드라이버에 전달합니다.