Skip to main content
Uma versão mais recente deste produto está disponível.
O português é fornecido por meio de tradução automática para sua conveniência. O inglês precede o português em caso de inconsistências.

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".

Observação 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".
Antes de começar
  • 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.

Passos
  1. 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"
          }
        }
      ]
    }
  2. Use parameters.selector para 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}
  3. 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.

Aviso 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.
Sobre esta tarefa

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-passphrase parâmetro será ignorado.

Passos
  1. Adicione os node-publish-secret-name e node-publish-secret-namespace parâ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}
  2. Identifique as frases secretas existentes no volume ou no snapshot.

    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. Atualize o segredo LUKS do volume para especificar as senhas nova e anterior. Certifique-se de que previous-luke-passphrase-name e previous-luks-passphrase correspondam à 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
  4. Crie um novo pod montando o volume. Isso é necessário para iniciar a rotação.

  5. Verifique se a senha foi rotacionada.

    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"]
Resultados

A senha foi rotacionada quando apenas a nova senha foi retornada no volume e no snapshot.

Observação 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.

Passos
  1. 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.

  2. Adicione os node-expand-secret-name e node-expand-secret-namespace parâ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
Resultados

Ao iniciar a expansão de storage online, o kubelet passa as credenciais apropriadas para o driver.