Linux Unified Key Setup (LUKS)
Você pode habilitar o Linux Unified Key Setup (LUKS) para criptografar volumes ONTAP SAN e ONTAP SAN ECONOMY no Trident. Trident oferece suporte à rotação de senha e expansão de volume para volumes criptografados com LUKS.
No Trident, os volumes criptografados com LUKS usam a cifra e o modo aes-xts-plain64, conforme recomendado por "NIST".
|
|
A criptografia LUKS não é compatível com sistemas ASA r2. Para obter informações sobre sistemas ASA r2, consulte "Saiba mais sobre os sistemas de armazenamento ASA r2". |
-
Os nós de trabalho devem ter cryptsetup 2.1 ou superior (mas inferior a 3.0) instalado. Para mais informações, visite "Gitlab: cryptsetup".
-
Por motivos de desempenho, NetApp recomenda que os nós de trabalho suportem Advanced Encryption Standard New Instructions (AES-NI). Para verificar o suporte a AES-NI, execute o seguinte comando:
grep "aes" /proc/cpuinfo
Se nada for retornado, seu processador não suporta AES-NI. Para mais informações sobre AES-NI, visite: "Intel: instruções do Padrão de Criptografia Avançada (AES-NI)".
Ativar criptografia LUKS
Você pode habilitar a criptografia por volume, do lado do host, usando o Linux Unified Key Setup (LUKS) para volumes ONTAP SAN e ONTAP SAN ECONOMY.
-
Defina os atributos de criptografia LUKS na configuração do backend. Para obter mais informações sobre as opções de configuração do backend para ONTAP SAN, consulte "Opções de configuração do ONTAP SAN".
{ "storage": [ { "labels": { "luks": "true" }, "zone": "us_east_1a", "defaults": { "luksEncryption": "true" } }, { "labels": { "luks": "false" }, "zone": "us_east_1a", "defaults": { "luksEncryption": "false" } } ] } -
Use
parameters.selectorpara definir os pools de armazenamento usando criptografia LUKS. Por exemplo: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} -
Crie um segredo que contenha a senha LUKS. Por exemplo:
kubectl -n trident create -f luks-pvc1.yaml apiVersion: v1 kind: Secret metadata: name: luks-pvc1 stringData: luks-passphrase-name: A luks-passphrase: secretA
Limitações
Volumes criptografados com LUKS não podem aproveitar a deduplicação e a compressão do ONTAP.
Configuração de backend para importação de volumes LUKS
Para importar um volume LUKS, você deve definir luksEncryption para (true no backend. A opção luksEncryption informa ao Trident se o volume é compatível com LUKS (true ou não compatível com LUKS (false, conforme mostrado no exemplo a seguir.
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'
Configuração de PVC para importação de volumes LUKS
Para importar volumes LUKS dinamicamente, defina a anotação trident.netapp.io/luksEncryption para true e inclua uma classe de armazenamento habilitada para LUKS no PVC, conforme mostrado neste exemplo.
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
Rotacionar uma frase secreta LUKS
Você pode alternar a senha LUKS e confirmar a rotação.
|
|
Não se esqueça de uma senha até verificar se ela não está mais sendo referenciada por nenhum volume, snapshot ou segredo. Se uma senha referenciada for perdida, você poderá não conseguir montar o volume e os dados permanecerão criptografados e inacessíveis. |
A rotação da senha LUKS ocorre quando um pod que monta o volume é criado após a especificação de uma nova senha LUKS. Quando um novo pod é criado, Trident compara a senha LUKS no volume com a senha ativa no segredo.
-
Se a senha no volume não corresponder à senha ativa no segredo, a rotação ocorrerá.
-
Se a senha no volume corresponder à senha ativa no segredo, o
previous-luks-passphraseparâmetro será ignorado.
-
Adicione os
node-publish-secret-nameenode-publish-secret-namespaceparâmetros StorageClass. Por exemplo: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} -
Identifique as frases secretas existentes no volume ou no snapshot.
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"]
-
Atualize o segredo LUKS do volume para especificar as senhas nova e anterior. Certifique-se de que
previous-luke-passphrase-nameeprevious-luks-passphrasecorrespondam à senha anterior.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 -
Crie um novo pod montando o volume. Isso é necessário para iniciar a rotação.
-
Verifique se a senha foi rotacionada.
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"]
A senha foi rotacionada quando apenas a nova senha foi retornada no volume e no snapshot.
|
|
Se duas senhas forem retornadas, por exemplo luksPassphraseNames: ["B", "A"], a rotação estará incompleta. Você pode acionar um novo pod para tentar concluir a rotação.
|
Habilitar expansão de volume
Você pode habilitar a expansão de volume em um volume criptografado com LUKS.
-
Ative o `CSINodeExpandSecret`feature gate (beta 1.25+). Consulte "Kubernetes 1.25: use segredos para expansão de volumes CSI orientada a nós" para obter detalhes.
-
Adicione os
node-expand-secret-nameenode-expand-secret-namespaceparâmetros StorageClass. Por exemplo: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
Ao iniciar a expansão de storage online, o kubelet passa as credenciais apropriadas para o driver.