Configuração Unificada de Chaves do Linux (LUKS)
Você pode habilitar o Linux Unified Key Setup (LUKS) para criptografar volumes ONTAP SAN e ONTAP SAN ECONOMY no Trident. O Trident suporta 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 o cryptsetup 2.1 ou superior (mas inferior a 3.0) instalado. Para mais informações, visite"Gitlab: cryptsetup" .
-
Por motivos de desempenho, a NetApp recomenda que os nós de trabalho suportem o padrão de criptografia avançada New Instructions (AES-NI). Para verificar a compatibilidade com AES-NI, execute o seguinte comando:
grep "aes" /proc/cpuinfo
Se nada for retornado, seu processador não suporta AES-NI. Para obter 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 no 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 de 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" } } ] } -
Usar
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 configurar luksEncryption para(true nos bastidores. O luksEncryption Essa opção 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 senha LUKS
Você pode alternar a senha LUKS e confirmar a alternância.
|
|
Não se esqueça de uma senha até verificar se ela não está mais sendo referenciada por nenhum volume, snapshot ou segredo. Caso a senha referenciada seja 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, o 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, ocorrerá a rotação.
-
Se a senha no volume corresponder à senha ativa no segredo, o
previous-luks-passphraseO parâmetro é ignorado.
-
Adicione o
node-publish-secret-nameenode-publish-secret-namespaceParâmetros da classe de armazenamento. 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 senhas 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"]
Instantâneotridentctl -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 novas e anteriores. Garantir
previous-luke-passphrase-nameeprevious-luks-passphraseA senha corresponde à 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 para montar 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"]
Instantâneotridentctl -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 está incompleta. Você pode acionar um novo módulo para tentar completar a rotação.
|
Ativar expansão de volume
Você pode habilitar a expansão de volume em um volume criptografado com LUKS.
-
Ative o
CSINodeExpandSecretrecurso gate (beta 1.25+). Consulte "Kubernetes 1.25: Use segredos para expansão de volumes CSI orientada a nós" para mais detalhes. -
Adicione o
node-expand-secret-nameenode-expand-secret-namespaceParâmetros da classe de armazenamento. 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 do armazenamento online, o kubelet passa as credenciais apropriadas para o driver.