Skip to main content
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.

Configuração Unificada de Chaves do Linux (LUKS)

Colaboradores netapp-aruldeepa

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

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

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 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"
          }
        }
      ]
    }
  2. Usar 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 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.

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. Caso a senha referenciada seja 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, 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-passphrase O parâmetro é ignorado.

Passos
  1. Adicione o node-publish-secret-name e node-publish-secret-namespace Parâ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}
  2. Identifique as senhas 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"]
    Instantâneo
    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 novas e anteriores. Garantir previous-luke-passphrase-name e previous-luks-passphrase A 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
  4. Crie um novo pod para montar 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"]
    Instantâneo
    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 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.

Passos
  1. Ative o CSINodeExpandSecret recurso gate (beta 1.25+). Consulte "Kubernetes 1.25: Use segredos para expansão de volumes CSI orientada a nós" para mais detalhes.

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

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