Provisionando PVCs no Serviço File Storage

Descubra como provisionar reivindicações de volume persistentes para clusters que você criou usando o Kubernetes Engine (OKE) montando sistemas de arquivos do serviço File Storage.

O serviço Oracle Cloud Infrastructure File Storage fornece um sistema de arquivos de rede durável, escalável e distribuído e de nível empresarial. Você usa o plug-in de volume CSI para conectar clusters a sistemas de arquivos no serviço File Storage.

Você pode usar o serviço File Storage para provisionar reivindicações de volume persistentes (PVCs) de duas maneiras:

  • Definindo e criando uma nova classe de armazenamento (opcionalmente especificando o OCID de um ponto de acesso NFS existente) e, em seguida, definindo e criando uma nova PVC com base na classe de armazenamento. Quando você cria a PVC, o plug-in de volume CSI cria dinamicamente um novo sistema de arquivos do serviço File Storage e um novo volume persistente suportado pelo novo sistema de arquivos. Consulte Provisionando uma PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI.
  • Criando manualmente um sistema de arquivos e um ponto de acesso NFS no serviço File Storage, definindo e criando um PV suportado pelo novo sistema de arquivos e, finalmente, definindo uma nova PVC. Quando você cria a PVC, o Kubernetes Engine vincula a PVC ao PV suportado pelo serviço File Storage. Consulte Provisionando uma PVC em um Sistema de Arquivos Existente.

Observe o seguinte:

  • Ao usar o plug-in de volume CSI para criar dinamicamente um novo sistema de arquivos, não atualize manualmente as propriedades do novo volume persistente que o plug-in de volume CSI cria.
  • Todos os sistemas de arquivos, pontos de acesso NFS e exportações do serviço File Storage criados dinamicamente pelo plug-in de volume CSI recebem nomes que começam com csi-fss-.
  • Todos os sistemas de arquivos, pontos de acesso NFS e exportações do serviço File Storage criados dinamicamente pelo plug-in de volume CSI aparecem na Console. No entanto, não use a Console (ou a CLI ou API do Oracle Cloud Infrastructure) para modificar esses recursos criados dinamicamente. As alterações feitas nos recursos do Oracle Cloud Infrastructure criadas dinamicamente pelo plug-in de volume CSI não são reconciliadas com objetos do Kubernetes.
  • Se você excluir uma PVC vinculada a um PV suportado por um sistema de arquivos criado pelo plug-in de volume CSI, o plug-in de volume CSI excluirá o sistema de arquivos e o PV criado. Se o plug-in de volume CSI também criou um novo ponto de acesso NFS (porque você não especificou o OCID de um ponto de acesso NFS existente na definição da classe de armazenamento), o plug-in de volume CSI também excluirá o ponto de acesso NFS. Observe que, se você especificou o OCID de um ponto de acesso NFS existente, o plug-in de volume CSI não excluirá o ponto de acesso NFS.
  • O provisionamento de uma PVC em um novo sistema de arquivos criado dinamicamente pelo plug-in de volume CSI está disponível quando os clusters estão executando o Kubernetes 1.22 ou posterior. Consulte Provisionando uma PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI.
  • O provisionamento de uma PVC vinculando-a a um PV suportado por um sistema de arquivos existente está disponível quando os clusters estão executando o Kubernetes 1.18 ou posterior. Consulte Provisionando uma PVC em um Sistema de Arquivos Existente.

Criptografando Dados em Repouso e Dados em Trânsito com o Serviço File Storage

Ao usar o serviço File Storage para provisionar PVCs, você especifica a criptografia em trânsito independentemente da criptografia em repouso.

O serviço File Storage sempre criptografa dados em repouso, usando chaves de criptografia gerenciadas pela Oracle por padrão. No entanto, você tem a opção de especificar a criptografia em repouso usando suas próprias chaves de criptografia principais que você gerencia no serviço Vault. Como especificar a criptografia em repouso depende se você está provisionando uma PVC em:

Se você quiser gerenciar suas próprias chaves de criptografia mestras para criptografar dados em repouso, terá que:

Opcionalmente, o serviço File Storage pode criptografar dados em trânsito. Se você especificar criptografia em trânsito, os dados em trânsito serão criptografados usando um certificado TLS (Transport Layer Security) que é sempre gerenciado pela Oracle, independentemente de os dados em repouso serem criptografados usando chaves gerenciadas pela Oracle ou usando chaves gerenciadas pelo usuário. A criptografia em trânsito protege os dados que estão sendo transferidos entre instâncias e sistemas de arquivos montados usando a criptografia TLS v. 1.2. Para obter mais informações sobre criptografia em trânsito e o serviço File Storage, consulte Using In-transit TLS Encryption. Como especificar a criptografia em trânsito depende de se você está provisionando uma PVC em:

Observe que, ao usar o serviço File Storage para provisionar PVCs, a criptografia em trânsito só é suportada quando as instâncias de computação que hospedam nós de trabalho estão executando o Oracle Linux 7 e o Oracle Linux 8.

Provisionando uma PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI

Observação

Os seguintes pré-requisitos se aplicam ao provisionar uma PVC em um novo sistema de arquivos criado dinamicamente pelo plug-in de volume CSI:
  • Os clusters devem estar executando o Kubernetes 1.22 ou posterior para provisionar uma PVC em um novo sistema de arquivos criado dinamicamente pelo plug-in de volume CSI.
  • Devem existir políticas de IAM apropriadas para permitir que o plug-in de volume CSI crie e gerencie recursos do serviço File Storage. Mais especificamente:

    • Uma política para criar e/ou gerenciar sistemas de arquivos, pontos de acesso NFS e caminhos de exportação. Por exemplo:
      ALLOW any-user to manage file-family in compartment <compartment-name> where request.principal.type = 'cluster'
    • Uma política para usar VNICs, IPs privados, zonas de DNS privadas e sub-redes. Por exemplo:
      ALLOW any-user to use virtual-network-family in compartment <compartment-name> where request.principal.type = 'cluster'
  • Se o compartimento ao qual pertence um pool de nós, uma sub-rede de nó de trabalho, um sistema de arquivos ou um ponto de acesso NFS for diferente do compartimento ao qual pertence um cluster, deverão existir políticas do serviço IAM para permitir que o plug-in de volume CSI acesse o local apropriado. Por exemplo:

    ALLOW any-user to manage file-family in TENANCY where request.principal.type = 'cluster'
    ALLOW any-user to use virtual-network-family in TENANCY where request.principal.type = 'cluster'
  • Para especificar uma chave de criptografia principal gerenciada pelo usuário específica do serviço Vault para criptografar dados em sistemas de arquivos, devem existir políticas apropriadas do serviço IAM para permitir que o plug-in de volume CSI acesse essa chave de criptografia principal. Consulte Criar Política para Acessar Chaves de Criptografia Gerenciadas pelo Usuário para Criptografar Volumes de Inicialização, Volumes em Blocos e/ou Sistemas de Arquivos.

Para provisionar dinamicamente uma PVC em um novo sistema de arquivos criado dinamicamente pelo plug-in de volume CSI no serviço File Storage:

  1. (Opcional) Crie um destino de montagem no serviço File Storage. Consulte Criando um Destino de Montagem.

    O plug-in de volume CSI requer um ponto de acesso NFS ativo (ou seja, um ponto de acesso NFS com um endereço IP designado) para criar um novo sistema de arquivos. Se você não criar um ponto de acesso NFS com antecedência, especifique a sub-rede na qual o plug-in de volume CSI deverá criar um novo ponto de acesso NFS ao definir a classe de armazenamento.

  2. Defina uma nova classe de armazenamento que use o provisionador fss.csi.oracleclould.com:
    1. Crie um arquivo de manifesto (por exemplo, em um arquivo chamado fss-dyn-st-class.yaml), especifique um nome para a nova classe de armazenamento e especifique valores para os parâmetros obrigatórios e opcionais:
      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: <storage-class-name>
      provisioner: fss.csi.oraclecloud.com
      parameters:
        availabilityDomain: <ad-name>
        mountTargetOcid: <mt-ocid> | mountTargetSubnetOcid: <mt-subnet-ocid>
        compartmentOcid: <compartment-ocid>
        kmsKeyOcid: <key-ocid>
        exportPath: <path>
        exportOptions: "[{<options-in-json-format>}]"
        encryptInTransit: "true"|"false"
        oci.oraclecloud.com/initial-defined-tags-override: '{"<tag-namespace>": {"<tag-key>": "<tag-value>"}}'
        oci.oraclecloud.com/initial-freeform-tags-override: '{"<tag-key>": "<tag-value>"}'

      em que:

      • name: <storage-class-name>: Obrigatório. Um nome de sua escolha para a classe de armazenamento.
      • availabilityDomain: <ad-name>: Obrigatório. O nome do domínio de disponibilidade no qual criar o novo sistema de arquivos (e no qual criar o novo ponto de acesso NFS, se um OCID de ponto de acesso NFS existente não for especificado). Por exemplo, US-ASHBURN-AD-1. Para descobrir o nome do domínio de disponibilidade a ser usado, execute o comando da CLI oci iam availability-domain list (ou use a operação ListAvailabilityDomains). Para obter mais informações, consulte Nomes de Domínio de Disponibilidade da Sua Tenancy.
      • mountTargetOcid: <mt-ocid> | mountTargetSubnetOcid: <mt-subnet-ocid>: Obrigatório. O OCID de um ponto de acesso NFS ativo existente (mountTargetOcid: <mt-ocid>) ou o OCID de uma sub-rede na qual será criado um novo ponto de acesso NFS (mountTargetSubnetOcid: <mt-subnet-ocid>). Especifique mountTargetOcid ou mountTargetSubnetOcid. Se você especificar mountTargetOcid e mountTargetSubnetOcid na definição da classe de armazenamento, o ponto de acesso NFS existente especificado por mountTargetOcid será usado e mountTargetSubnetOcid será ignorado. Por exemplo:
        • mountTargetSubnetOcid: ocid1.subnet.oc1.iad.aaaaaaaa2xpk______zva
        • mountTargetOcid: ocid1.mounttarget.oc1.iad.aaaaaaaa4np______fuy
      • compartmentOcid: <compartment-ocid>: Opcional. O OCID do compartimento ao qual o novo sistema de arquivos (e o novo ponto de acesso NFS, se um OCID de ponto de acesso NFS existente não for especificado) pertencerá. Se não for especificado, o padrão será o mesmo compartimento do cluster. Por exemplo, compartmentOcid: ocid1.compartment.oc1..aaaaaaaay______t6q
      • kmsKeyOcid: <key-ocid>: Opcional. O OCID de uma chave de criptografia mestra que você gerencia, com a qual criptografar dados em repouso. Se não for especificado, os dados serão criptografados em repouso usando chaves de criptografia gerenciadas pela Oracle. Consulte Criptografando Dados em Repouso em um Novo Sistema de Arquivos. Por exemplo, kmsKeyOcid: ocid1.key.oc1.iad.anntl______usjh
      • exportPath: <path>: Opcional. O caminho em uma exportação que identifica de forma exclusiva o sistema de arquivos dentro do destino de montagem. O caminho de exportação deve começar com uma barra (/) seguida por uma sequência de zero ou mais elementos separados por barra. Por exemplo, /FileSystem1. Para obter mais informações, consulte Caminhos em Sistemas de Arquivos.

        Se você incluir exportPath: <path> em uma definição de classe de armazenamento, não especifique um caminho (como um caminho ou como o subcaminho de um caminho existente) que já exista. Se você especificar um caminho que já existe, um erro será retornado porque vários sistemas de arquivos com o mesmo ponto de acesso NFS não podem ter o mesmo caminho de exportação. Portanto, se você incluir exportPath: <path> na definição de classe de armazenamento, use apenas essa definição de classe de armazenamento para criar um sistema de arquivos.

        Se você não incluir exportPath: <path> na definição da classe de armazenamento, o caminho assumirá como padrão o nome para exibição do sistema de arquivos criado pelo plug-in de volume CSI (começando com /csi-fss-).

      • exportOptions: "[{<options-in-json-format>}]" Opcional. Um conjunto de parâmetros (no formato JSON válido) dentro da exportação que especifica o nível de acesso concedido aos clientes NFS quando eles se conectam a um ponto de acesso NFS. Uma entrada de opções de exportação NFS dentro de uma exportação define o acesso para um único endereço IP ou faixa de blocos CIDR. Para obter mais informações, consulte Working with NFS Exports and Export Options. Se não for especificado, o seguinte padrão será usado:
        exportOptions: "[{\"source\":\"0.0.0.0/0\",\"requirePrivilegedSourcePort\":false,\"access\":\"READ_WRITE\",\"identitySquash\":\"NONE\"}]"
      • encryptInTransit: "true"|"false": Opcional. Indica se os dados devem ser criptografados em trânsito. Se você especificar "true", certifique-se de concluir as etapas de configuração descritas em Criptografando Dados em Trânsito em um Novo Sistema de Arquivos. Se não for especificado, o padrão será "false". Por exemplo, encryptInTransit: "true".
      • oci.oraclecloud.com/initial-defined-tags-override: '{"<tag-namespace>": {"<tag-key>": "<tag-value>"}}' Opcional. Especifica uma tag definida para o novo sistema de arquivos. Por exemplo, oci.oraclecloud.com/initial-defined-tags-override: '{"Operations": {"CostCenter": "42"}}'

        Observe que, para aplicar tags definidas de um namespace de tag pertencente a um compartimento a um recurso do sistema de arquivos pertencente a outro compartimento, inclua uma instrução de política para permitir que o cluster use o namespace de tag. Consulte Política Adicional do IAM quando um Cluster e um Namespace de Tag estão em Diferentes Compartimentos.

      • oci.oraclecloud.com/initial-freeform-tags-override: '{"<tag-key>": "<tag-value>"}' Opcional. Especifica uma tag de formato livre para o novo sistema de arquivos. Por exemplo, oci.oraclecloud.com/initial-freeform-tags-override: '{"Department": "Finance"}'

      Por exemplo:

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: fss-dyn-storage
      provisioner: fss.csi.oraclecloud.com
      parameters:
        availabilityDomain: US-ASHBURN-AD-1
        mountTargetSubnetOcid: ocid1.subnet.oc1.iad.aaaaaaaa2xpk______zva
        compartmentOcid: ocid1.compartment.oc1..aaaaaaaay______t6q
        kmsKeyOcid: ocid1.key.oc1.iad.anntl______usjh
        exportPath: /FileSystem1
        exportOptions: "[{\"source\":\"0.0.0.0/0\",\"requirePrivilegedSourcePort\":false,\"access\":\"READ_WRITE\",\"identitySquash\":\"NONE\"}]"
        encryptInTransit: "true"
    2. Crie a classe de armazenamento a partir do arquivo de manifesto digitando:
      kubectl create -f <filename>
      Por exemplo:
      kubectl create -f fss-dyn-st-class.yaml
  3. Crie regras de segurança em um grupo de segurança de rede (recomendado) ou em uma lista de segurança para o ponto de acesso NFS referenciado na definição da classe de armazenamento (ou criado por) e para os nós de trabalho do cluster.

    As regras de segurança a serem criadas dependem dos locais de rede relativos do ponto de acesso NFS e dos nós de trabalho, de acordo com os seguintes cenários:

    Esses cenários, as regras de segurança a serem criadas e onde criá-las, são totalmente descritos na documentação do serviço File Storage (consulte Configurando Regras de Segurança da VCN para o Serviço File Storage).

  4. Crie uma PVC a ser provisionada pelo novo sistema de arquivos no serviço File Storage, da seguinte forma:
    1. Crie um arquivo de manifesto para definir a PVC:
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: <pvc-name>
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: "<storage-class-name>"
        resources:
          requests:
            storage: 50Gi

      em que:

      • name: <pvc-name>: Obrigatório. Por exemplo, fss-dynamic-claim
      • storageClassName: "<storage-class-name>": Obrigatório. O nome da classe de armazenamento definida anteriormente. Por exemplo, fss-dyn-storage.
      • accessModes: - ReadWriteMany: Obrigatório. Observe que accessModes: deve especificar ReadWriteMany.
      • storage: 50Gi: Obrigatório. Observe que o Kubernetes exige que você especifique um valor para storage: no manifesto de PVC. No entanto, o serviço File Storage não suporta a especificação de um tamanho de sistema de arquivos e cria um novo sistema de arquivos com um tamanho padrão, independentemente do valor especificado para storage:.

      Por exemplo, o seguinte arquivo de manifesto (denominado fss-dyn-claim.yaml) define uma PVC denominada fss-dynamic-claim que é provisionada pelo sistema de arquivos definido na classe de armazenamento fss-dyn-storage:

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: fss-dynamic-claim
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: "fss-dyn-storage"
        resources:
          requests:
            storage: 50Gi
    2. Crie a PVC a partir do arquivo de manifesto digitando:
      kubectl create -f <filename>
      Por exemplo:
      kubectl create -f fss-dyn-claim.yaml

    Um novo PVC é criado. O plug-in de volume CSI cria um novo volume persistente (PV) e um novo sistema de arquivos no serviço File Storage (junto com um novo ponto de acesso NFS se você não tiver especificado um ponto de acesso NFS existente).

    O novo PVC está ligado ao novo PV. Os dados são criptografados em repouso, usando chaves de criptografia gerenciadas pela Oracle ou por você.

  5. Verifique se a PVC foi vinculada ao novo volume persistente digitando:
    kubectl get pvc

    A saída do comando anterior confirma que a PVC foi vinculada com sucesso:

    			
    NAME                STATUS    VOLUME                 CAPACITY   ACCESSMODES   STORAGECLASS      AGE
    fss-dynamic-claim   Bound     csi-fss-<unique_ID>    50Gi       RWX           fss-dyn-storage   4m
  6. Use a nova PVC ao criar outros objetos, como pods. Por exemplo, você pode criar um novo pod com base na seguinte definição de pod:
    apiVersion: v1
    kind: Pod
    metadata:
      name: fss-dynamic-app
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - name: http
              containerPort: 80
          volumeMounts:
            - name: persistent-storage
              mountPath: /usr/share/nginx/html
      volumes:
      - name: persistent-storage
        persistentVolumeClaim:
          claimName: fss-dynamic-claim
  7. Depois de criar um novo pod conforme descrito no exemplo da etapa anterior, você pode verificar se o pod está usando a nova PVC digitando:

    kubectl describe pod nginx
Dica

Se você prever um requisito frequente de criar dinamicamente novos PVs e novos sistemas de arquivos ao criar PVCs, poderá especificar que a nova classe de armazenamento que você criou deve ser usada como a classe de armazenamento padrão para provisionar novas PVCs. Consulte a documentação do Kubernetes para ver mais detalhes.

Criptografando Dados em Repouso em um Novo Sistema de Arquivos

O serviço File Storage sempre criptografa dados em repouso, usando chaves de criptografia gerenciadas pela Oracle por padrão. No entanto, você tem a opção de criptografar dados em repouso usando suas próprias chaves de criptografia principais que você gerencia no serviço Vault.

Dependendo de como você deseja criptografar dados em repouso, siga as instruções apropriadas abaixo:

  • Para usar o plug-in de volume CSI para criar dinamicamente um novo sistema de arquivos que usa chaves de criptografia gerenciadas pela Oracle para criptografar dados em repouso, siga as etapas em Provisionando uma PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI e não inclua o parâmetro kmsKeyOcid: <key-ocid> na definição da classe de armazenamento. Os dados são criptografados em repouso, usando chaves de criptografia gerenciadas pela Oracle.
  • Para usar o plug-in de volume CSI para criar dinamicamente um novo sistema de arquivos que use chaves de criptografia principais que você gerencia para criptografar dados em repouso, siga as etapas em Provisionando um PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI, inclua o parâmetro kmsKeyOcid: <key-ocid> na definição da classe de armazenamento e especifique o OCID da chave de criptografia mestra no serviço Vault. Os dados são criptografados em repouso, usando a chave de criptografia especificada.

Criptografando Dados em Trânsito em um Novo Sistema de Arquivos

A criptografia em trânsito protege os dados que estão sendo transferidos entre instâncias e sistemas de arquivos montados usando a criptografia TLS 1.2 (Transport Layer Security). Para obter mais informações sobre criptografia em trânsito e o serviço File Storage, consulte Using In-transit TLS Encryption.

Você especifica a criptografia em trânsito independentemente da criptografia em armazenamento. Os dados em trânsito são criptografados usando um certificado TLS que é sempre gerenciado pela Oracle, independentemente de os dados em repouso serem criptografados usando chaves gerenciadas pela Oracle ou usando chaves gerenciadas pelo usuário.

Observe que, ao usar o serviço File Storage para provisionar PVCs, a criptografia em trânsito só é suportada quando as instâncias de computação que hospedam nós de trabalho estão executando o Oracle Linux 7 e o Oracle Linux 8.

Para usar o plug-in de volume CSI para criar dinamicamente um novo sistema de arquivos com criptografia em trânsito:

  1. Siga as instruções em Setting up In-Transit Encryption for Linux para configurar a criptografia em trânsito no sistema de arquivos. Mais especificamente:
    1. Conclua os pré-requisitos configurando as seguintes regras de segurança em um grupo de segurança de rede (recomendado) ou em uma lista de segurança para o ponto de acesso NFS que exporta o sistema de arquivos:
      • Uma regra de entrada com monitoramento de estado que permite o tráfego TCP para um Intervalo de Portas de Destino de 2051, seja de todas as portas de um endereço IP de origem ou de um bloco CIDR de sua escolha ou de todas as origens.
      • Uma regra de saída com monitoramento de estado que permite o tráfego TCP de um Intervalo de Portas de Origem de 2051, para todas as portas de um endereço IP de destino ou bloco CIDR de sua escolha ou para todos os destinos.

      Para obter mais informações, consulte Cenário C: Ponto de acesso NFS e instância usam criptografia TLS em trânsito.

    2. Faça download do pacote oci-fss-utils em cada nó de trabalho. Observe que você precisa concordar com o Contrato de Licença. Consulte Tarefa 1: Fazer download do pacote OCI-FSS-UTILS.
    3. Instale o pacote oci-fss-utils em cada nó de trabalho. Consulte Tarefa 2: Instalar o pacote OCI-FSS-UTILS no Oracle Linux ou CentOS.
  2. Siga as instruções em Provisionando uma PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI e inclua o parâmetro encryptInTransit: "true" na definição da classe de armazenamento. Os dados são criptografados em trânsito, usando uma chave de criptografia gerenciada pela Oracle.

Provisionando uma PVC em um Sistema de Arquivos Existente

Para criar uma PVC em um sistema de arquivos existente no serviço File Storage (usando chaves de criptografia gerenciadas pela Oracle para criptografar dados em repouso):

  1. Crie um sistema de arquivos com um ponto de acesso NFS no serviço File Storage, selecionando a opção de criptografia Criptografar usando chaves gerenciadas pela Oracle. Consulte Criando um Sistema de Arquivos.
  2. Crie regras de segurança em um grupo de segurança de rede (recomendado) ou em uma lista de segurança para o ponto de acesso NFS que exporta o sistema de arquivos e para os nós de trabalho do cluster.
    As regras de segurança a serem criadas dependem dos locais de rede relativos do ponto de acesso NFS e dos nós de trabalho, de acordo com os seguintes cenários:

    Esses cenários, as regras de segurança a serem criadas e onde criá-las, são totalmente descritos na documentação do serviço File Storage (consulte Configurando Regras de Segurança da VCN para o Serviço File Storage).

  3. Crie um PV suportado pelo sistema de arquivos no serviço File Storage da seguinte forma:
    1. Crie um arquivo de manifesto para definir um PV e, na seção csi:, defina:

      • driver a fss.csi.oraclecloud.com
      • volumeHandle a <FileSystemOCID>:<MountTargetIP>:<path>
        em que:
        • <FileSystemOCID> é o OCID do sistema de arquivos definido no serviço File Storage.
        • <MountTargetIP> é o endereço IP designado ao ponto de acesso NFS.
        • <path> é o caminho de montagem para o sistema de arquivos relativo ao endereço IP do ponto de acesso NFS, começando com uma barra.
        Por exemplo: ocid1.filesystem.oc1.iad.aaaa______j2xw:10.0.0.6:/FileSystem1

      Por exemplo, o seguinte arquivo de manifesto (denominado fss-pv.yaml) define um PV chamado fss-pv suportado por um sistema de arquivos no serviço File Storage:

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: fss-pv
      spec:
        capacity:
          storage: 50Gi
        volumeMode: Filesystem
        accessModes:
          - ReadWriteMany
        persistentVolumeReclaimPolicy: Retain
        csi:
          driver: fss.csi.oraclecloud.com
          volumeHandle: ocid1.filesystem.oc1.iad.aaaa______j2xw:10.0.0.6:/FileSystem1
    2. Crie o PV a partir do arquivo de manifesto digitando:
      kubectl create -f <filename>

      Por exemplo:

      kubectl create -f fss-pv.yaml
  4. Crie uma PVC provisionada pelo PV que você criou, da seguinte forma:
    1. Crie um arquivo de manifesto para definir a PVC e defina:
      • storageClassName a ""
      • volumeName para o nome do PV criado (por exemplo, fss-pv)

      Por exemplo, o seguinte arquivo de manifesto (denominado fss-pvc.yaml) define uma PVC chamada fss-pvc que é provisionada por um PV chamado fss-pv:

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: fss-pvc
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: ""
        resources:
          requests:
            storage: 50Gi
        volumeName: fss-pv

      Observe que o elemento requests: storage: deve estar presente no arquivo de manifesto da PVC, e seu valor deve corresponder ao valor especificado para o elemento capacity: storage: no arquivo de manifesto do PV. Além disso, o valor do elemento requests: storage: é ignorado.

    2. Crie a PVC a partir do arquivo de manifesto digitando:
      kubectl create -f <filename>
      Por exemplo:
      kubectl create -f fss-pvc.yaml

A PVC está vinculada ao PV suportado pelo sistema de arquivos do serviço File Storage. Os dados são criptografados em repouso, usando chaves de criptografia gerenciadas pela Oracle.

Criptografando Dados em Repouso em um Sistema de Arquivos Existente

O serviço File Storage sempre criptografa dados em repouso, usando chaves de criptografia gerenciadas pela Oracle por padrão. No entanto, você tem a opção de criptografar sistemas de arquivos usando suas próprias chaves de criptografia principais que você gerencia no serviço Vault.

Dependendo de como você deseja criptografar dados em repouso, siga as instruções apropriadas abaixo:

  • Para criar uma PVC em um sistema de arquivos usando chaves de criptografia gerenciadas pela Oracle para criptografar dados em repouso, siga as etapas em Provisionando uma PVC em um Sistema de Arquivos Existente e selecione a opção de criptografia Criptografar usando chaves gerenciadas pela Oracle, conforme descrito. Os dados são criptografados em repouso, usando chaves de criptografia gerenciadas pela Oracle.
  • Para criar uma PVC em um sistema de arquivos usando chaves de criptografia principais que você gerencia para criptografar dados em repouso, siga as etapas em Provisionando uma PVC em um Sistema de Arquivos Existente, mas selecione a opção de criptografia Criptografar usando chaves gerenciadas pelo cliente e especifique a chave de criptografia principal no serviço Vault. Os dados são criptografados em repouso, usando a chave de criptografia especificada.

Criptografando Dados em Trânsito em um Sistema de Arquivos Existente

A criptografia em trânsito protege os dados que estão sendo transferidos entre instâncias e sistemas de arquivos montados usando a criptografia TLS v. 1.2 (Transport Layer Security). Para obter mais informações sobre criptografia em trânsito e o serviço File Storage, consulte Using In-transit TLS Encryption.

Você especifica a criptografia em trânsito independentemente da criptografia em armazenamento. Os dados em trânsito são criptografados usando um certificado TLS que é sempre gerenciado pela Oracle, independentemente de os dados em repouso serem criptografados usando chaves gerenciadas pela Oracle ou usando chaves gerenciadas pelo usuário.

Observe que, ao usar o serviço File Storage para provisionar PVCs, a criptografia em trânsito só é suportada quando as instâncias de computação que hospedam nós de trabalho estão executando o Oracle Linux 7 e o Oracle Linux 8.

Para criar uma PVC em um sistema de arquivos em que os dados são criptografados em trânsito:

  1. Siga as instruções em Setting up In-Transit Encryption for Linux para configurar a criptografia em trânsito no sistema de arquivos. Mais especificamente:
    1. Conclua os pré-requisitos configurando as seguintes regras de segurança em um grupo de segurança de rede (recomendado) ou em uma lista de segurança para o ponto de acesso NFS que exporta o sistema de arquivos:
      • Uma regra de entrada com monitoramento de estado que permite o tráfego TCP para um Intervalo de Portas de Destino de 2051, seja de todas as portas de um endereço IP de origem ou de um bloco CIDR de sua escolha ou de todas as origens.
      • Uma regra de saída com monitoramento de estado que permite o tráfego TCP de um Intervalo de Portas de Origem de 2051, para todas as portas de um endereço IP de destino ou bloco CIDR de sua escolha ou para todos os destinos.

      Para obter mais informações, consulte Cenário C: Ponto de acesso NFS e instância usam TLS na criptografia -transit.

    2. Faça download do pacote oci-fss-utils em cada nó de trabalho. Observe que você precisa concordar com o Contrato de Licença. Consulte Tarefa 1: Fazer download do pacote OCI-FSS-UTILS.
    3. Instale o pacote oci-fss-utils em cada nó de trabalho. Consulte Tarefa 2: Instalar o pacote OCI-FSS-UTILS no Oracle Linux ou CentOS.
  2. Siga as instruções em Provisionando uma PVC em um Sistema de Arquivos Existente, selecionando a opção Criptografar usando chaves gerenciadas pela Oracle ou a opção Criptografar usando chaves gerenciadas pelo cliente conforme necessário para criptografia de dados em repouso. No entanto, ao criar o arquivo de manifesto para definir um PV, defina encryptInTransit como "true" na seção csi do arquivo. Por exemplo:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: fss-encrypted-it-pv
    spec:
      capacity:
        storage: 50Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: fss.csi.oraclecloud.com
        volumeHandle: ocid1.filesystem.oc1.iad.aaaa______j2xw:10.0.0.6:/FileSystem1
        volumeAttributes:
          encryptInTransit: "true"

Diagnosticando e Solucionando Problemas do Provisionamento do Serviço File Storage de PVCs

O pod não pode acessar o sistema de arquivos devido a permissões insuficientes

Descrição

Quando um pod tenta acessar um volume persistente (PV) suportado por um sistema de arquivos no serviço File Storage, a tentativa pode falhar com uma mensagem "Permissão Negada".

Causa

Ao definir um PV suportado por um sistema de arquivos no serviço File Storage, você define o atributo accessModes do PV como ReadWriteMany e não precisa especificar um valor para o atributo fsType do PV.

O plug-in de volume CSI é implementado como um objeto CSIDriver. Você usa o atributo fsGroupPolicy do objeto CSIDriver para controlar se o CSIDriver altera a propriedade e as permissões de um volume para corresponder ao atributo fsGroup especificado no securityContext de um pod que monta o volume. A alteração da propriedade e das permissões do volume permite que o pod acesse o volume depois de montá-lo.

Por padrão, o atributo fsGroupPolicy do objeto CSIDriver é definido como ReadWriteOnceWithFSType, indicando que CSIDriver deve examinar a definição PV para determinar se a propriedade e as permissões do volume devem ser modificadas para corresponder ao atributo fsGroup do pod da seguinte forma:

  • Se o atributo fsType do PV estiver definido, o CSIDriver modificará a propriedade e as permissões do volume para corresponder ao atributo fsGroup especificado no securityContext do pod. Como resultado, o volume fica acessível ao pod.
  • Se o atributo fsType do PV não estiver definido, o CSIDriver não modificará a propriedade e as permissões do volume. O volume só pode ser acessado por processos em execução como raiz. Como resultado, um pod que não está em execução como raiz recebe a mensagem "Permissão Negada" ao tentar acessar um diretório ou arquivo no volume montado.

Veja como verificar se o motivo pelo qual um pod está recebendo a mensagem "Permissão Negada" é porque o atributo fsGroupPolicy do objeto CSIDriver está definido como ReadWriteOnceWithFSType e o atributo fsType do PV não está definido. Execute um comando no pod para gravar um arquivo em um diretório no volume montado e, em seguida, examine as propriedades do arquivo para confirmar se o proprietário do grupo corresponde ao atributo fsGroup especificado no securityContext do pod. Por exemplo, suponha que um pod tenha o seguinte manifesto:

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    fsGroup: 2000
  containers:
  - name: sec-ctx-demo
    image: busybox:1.28
    command: [ "sh", "-c", "sleep 1h" ]
    volumeMounts:
    - name: sec-ctx-vol
      mountPath: /data/demo
  1. Execute um comando no pod para gravar um arquivo em um diretório no volume montado. Por exemplo, informando:
    kubectl exec -it security-context-demo -- sh -c "cd /data/demo && echo hello > testfile"
  2. Examine as propriedades do arquivo recém-criado para confirmar os direitos de acesso. Por exemplo, informando:
    kubectl exec -it security-context-demo -- sh -c "ls -l /data/demo/testfile"

    Idealmente, a saída mostra que o proprietário do grupo do arquivo é o mesmo especificado pelo atributo fsGroup do pod, dando ao pod acesso ao arquivo. Por exemplo:

    -rw-r--r-- 1 root 2000 6 Jun  6 20:08 testfile

    No entanto, se o atributo fsGroupPolicy do objeto CSIDriver estiver definido como ReadWriteOnceWithFSType e o atributo fsType do PV não estiver definido, a saída mostrará o proprietário do grupo do arquivo como raiz e o pod não terá acesso ao arquivo. Por exemplo:

    -rw-r--r-- 1 root root 6 Jun  6 20:08 testfile

Para obter mais informações, consulte a Política de Volume fsGroup do CSI na documentação do Kubernetes.

Ação

Se você souber o ID de grupo do proprietário do volume dos arquivos que o pod acessa e o ID de grupo do proprietário do volume não for raiz (0), recomendamos que você especifique um grupo suplementar em securityContext na especificação do pod. Por exemplo, se o ID de usuário do proprietário do volume for 0 (raiz) e o ID de grupo do proprietário do volume for 1000, especifique 1000 como um grupo complementar no securityContext do pod da seguinte forma:


spec:
  securityContext:
    supplementalGroups: [1000]

Se você não puder designar o ID de grupo do proprietário do volume como um grupo complementar no securityContext do pod, sugerimos duas soluções alternativas:

  • Solução Alternativa 1: Ative o objeto CSIDriver para modificar a propriedade de volume e as permissões para corresponder ao atributo fsGroup especificado no securityContext do pod.
  • Solução Alternativa 2: Use as opções de exportação Squash do sistema de arquivos para permitir que os pods acessem arquivos e diretórios no volume sem alterar a propriedade do volume.

Antes de escolher uma solução, considere as vantagens e desvantagens descritas para cada solução.

Solução Alternativa 1: Ative o objeto CSIDriver para modificar a propriedade de volume e as permissões para corresponder ao atributo fsGroup especificado no securityContext do pod

Para permitir que o objeto CSIDriver modifique a propriedade do volume e as permissões para corresponder ao atributo fsGroup especificado no securityContext do pod, defina o atributo fsGroupPolicy do objeto CSIDriver como File da seguinte forma:

  1. Obtenha o arquivo de configuração CSIDriver digitando:
    kubectl get csiDriver fss.csi.oraclecloud.com -oyaml > fss_csi_driver.yaml
  2. Em um editor de texto, edite o arquivo fss_csi_driver.yaml e altere o atributo fsGroupPolicy do objeto CSIDriver de ReadWriteOnceWithFSType para File.

    Por exemplo, altere:

    apiVersion: storage.k8s.io/v1
    kind: CSIDriver
    metadata:
      creationTimestamp: "<timestamp>"
      name: fss.csi.oraclecloud.com
      resourceVersion: "<version>"
      uid: <identifier>
    spec:
      attachRequired: false
      fsGroupPolicy: ReadWriteOnceWithFSType
      podInfoOnMount: false
      requiresRepublish: false
      storageCapacity: false
      volumeLifecycleModes:
      - Persistent 

    para:

    apiVersion: storage.k8s.io/v1
    kind: CSIDriver
    metadata:
      creationTimestamp: "<timestamp>"
      name: fss.csi.oraclecloud.com
      resourceVersion: "<version>"
      uid: <identifier>
    spec:
      attachRequired: false
      fsGroupPolicy: File
      podInfoOnMount: false
      requiresRepublish: false
      storageCapacity: false
      volumeLifecycleModes:
      - Persistent 

    Altere apenas o valor de fsGroupPolicy. Não altere nenhum outro valor.

  3. Salvar e fechar o arquivo fss_csi_driver.yaml.
  4. Exclua o objeto CSIDriver existente digitando:
    kubectl delete csiDriver fss.csi.oraclecloud.com
  5. Crie o novo objeto CSIDriver digitando:
    kubectl apply -f fss_csi_driver.yaml 
  6. Reinicie o pod que encontrou a mensagem "Permissão Negada".

Coisas a considerar antes de escolher esta solução:

  • Ao montar um grande volume com muitos arquivos e diretórios aninhados, você pode notar que a montagem do volume leva muito tempo. Essa latência de montagem de volume ocorre porque, quando fsGroupPolicy é definido como File, o Kubernetes altera recursivamente a propriedade do volume de todos os arquivos e diretórios aninhados chamando chown() e chmod(). Para reduzir a latência de montagem de volume, tente definir o atributo fsGroupChangePolicy como "OnRootMismatch" no securityContext do pod, da seguinte forma:
    securityContext:
      fsGroup: <sample-fsGroup>
      fsGroupChangePolicy: "OnRootMismatch"

    A definição de fsGroupChangePolicy como "OnRootMismatch" reduz a latência de montagem do volume porque o Kubernetes só altera a propriedade do volume nos casos em que as permissões do arquivo de nível raiz não correspondem à definição fsGroup do pod.

  • Os IDs de grupo especificados como valores de fsGroup para todos os pods que acessam um volume são adicionados como proprietários de grupos complementares do volume. Como resultado, o acesso a esse volume é restrito aos IDs de grupo especificados como valores de fsGroup.

    Por exemplo, se você criar dois pods com valores fsGroup diferentes que montam o mesmo volume, o ID do grupo especificado para o fsGroup do segundo pod será o grupo do proprietário do volume e o primeiro pod ainda terá acesso ao volume.

  • Se o Kubernetes detectar uma incompatibilidade de propriedade entre o proprietário do volume e o fsGroup definido na especificação do pod, o Kubernetes alterará a propriedade do volume de todos os arquivos. Se o volume tiver muitos arquivos e diretórios aninhados, você pode notar que a montagem do volume leva muito tempo.

Solução alternativa 2: Use as opções de exportação Squash do sistema de arquivos para permitir que os pods acessem arquivos e diretórios em um volume sem alterar a propriedade do volume.

Cuidado

Esta solução requer que você defina a opção de exportação Squash do sistema de arquivos como Todos. A definição de Squash como Tudo concede acesso irrestrito ao sistema de arquivos a todos os processos em execução no nó em que o volume está montado (inclusive a outros pods). Portanto, antes de escolher esta solução, verifique a conformidade com seus requisitos de segurança.

Você pode permitir que os pods acessem arquivos e diretórios em um volume sem alterar a propriedade do volume definindo as opções de exportação Squash do sistema de arquivos. As opções de exportação Squash determinam se os clientes de origem que acessam o sistema de arquivos têm seu ID de usuário (UID) e ID de grupo (GID) remapados para Squash de UID e Squash de GID. Para obter mais informações, consulte Opções de Exportação NFS.

Se você decidir usar essa solução, não altere o atributo fsGroupPolicy do objeto CSIDriver para File.

Para definir opções de exportação Squash ao provisionar uma PVC em um sistema de arquivos existente:

  1. Abra o menu de navegação e clique em Armazenamento. Em File Storage, clique em Sistemas de Arquivos.
  2. Na seção Escopo da lista, em Compartimento, selecione um compartimento. Todos os sistemas de arquivos no compartimento selecionado são exibidos.
  3. Clique no nome do sistema de arquivos para o qual deseja definir opções de exportação.
  4. Na página de detalhes do sistema de arquivos, em Recursos, clique em Exportações.
  5. Na lista Exportações, clique no nome da exportação para a qual você deseja definir opções.
  6. Na página de detalhes da exportação, em Opções de Exportação do cliente NFS, clique em Editar opções.
  7. No painel Editar opções, atualize as opções de exportação Squash da seguinte forma:

    • Squash: Altere para Todos.
    • Formar UID: Altere para o UID do proprietário do volume ou para o UID raiz (0).
    • Squash GUID: Altere para o GID do proprietário do volume ou para o GID raiz (0).

    Para obter mais informações, consulte Opções de Exportação NFS.

  8. Clique em Atualizar.

Para definir opções de exportação Squash ao provisionar uma PVC em um novo sistema de arquivos:

  1. Siga as instruções em Provisionando uma PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI, mas quando você criar o arquivo de manifesto para a classe de armazenamento que usa o provisionador fss.csi.oracleclould.com, defina o parâmetro exportOptions para especificar valores para as opções de exportação Squash da seguinte forma:
    exportOptions: "[\"identitySquash\":\"ALL\",\"anonymous-uid\":\"0\",\"anonymous-gid\":\"0\"]"

    Por exemplo:

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: fss-dyn-storage
    provisioner: fss.csi.oraclecloud.com
    parameters:
      availabilityDomain: US-ASHBURN-AD-1
      mountTargetSubnetOcid: ocid1.subnet.oc1.iad.aaaaaaaa2xpk______zva
      compartmentOcid: ocid1.compartment.oc1..aaaaaaaay______t6q
      kmsKeyOcid: ocid1.key.oc1.iad.anntl______usjh
      exportPath: /FileSystem1
      exportOptions: "[\"identitySquash\":\"ALL\",\"anonymous-uid\":\"0\",\"anonymous-gid\":\"0\"]"
      encryptInTransit: "true"
  2. Crie a classe de armazenamento a partir do arquivo de manifesto digitando:
    kubectl create -f <filename>
    Por exemplo:
    kubectl create -f fss-dyn-st-class.yaml
  3. Siga as instruções restantes em Provisionando uma PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI para criar regras de segurança e a PVC.

    O plug-in de volume CSI cria um novo volume persistente (PV) e um novo sistema de arquivos no serviço File Storage. O novo sistema de arquivos tem as opções de exportação Squash especificadas na classe de armazenamento.

Coisas a considerar antes de escolher esta solução:

  • A definição de Squash como Tudo concede acesso irrestrito ao sistema de arquivos a todos os processos em execução no nó em que o volume está montado (inclusive a outros pods). Portanto, antes de escolher esta solução, verifique a conformidade com seus requisitos de segurança.
  • Diferentemente da Solução Alternativa 1, a propriedade de um volume não muda sempre que o volume é montado por um novo pod que tem seu atributo fsGroup definido para outro grupo.
  • Ao contrário da Solução Alternativa 1, não há latência de montagem de volume ao montar um grande volume com muitos arquivos e diretórios aninhados, porque o Kubernetes não altera recursivamente a propriedade de volume dos arquivos e diretórios aninhados.
  • Diferentemente da Solução Alternativa 1, você não edita o arquivo fss_csi_driver.yaml e altera o atributo fsGroupPolicy do objeto CSIDriver para File. Em vez disso, o valor de atributo padrão fsGroupPolicy: ReadWriteOnceWithFSType garante que o objeto CSIDriver utilize recursos fornecidos pelo serviço File Storage.