Aprovisionamiento de PVC en el servicio File Storage

Descubra cómo aprovisionar reclamaciones de volumen persistentes para clusters que ha creado mediante Container Engine for Kubernetes (OKE) montando sistemas de archivos desde el servicio File Storage.

El servicio Oracle Cloud Infrastructure File Storage proporciona un sistema de archivos de red duradero, escalable, distribuido y empresarial. El plugin de volumen CSI se utiliza para conectar clusters a sistemas de archivos en el servicio File Storage.

Puede utilizar el servicio File Storage para aprovisionar reclamaciones de volumen persistentes (PVC) de dos formas:

  • Definiendo y creando una nueva clase de almacenamiento (opcionalmente especificando el OCID de un destino de montaje existente) y, a continuación, definiendo y creando una nueva PVC basada en la clase de almacenamiento. Al crear la PVC, el plugin de volumen CSI crea dinámicamente un nuevo sistema de archivos de servicio de File Storage y un nuevo volumen persistente respaldado por el nuevo sistema de archivos. Consulte Aprovisionamiento de una PVC en un nuevo sistema de archivos mediante el plugin de volumen CSI.
  • Mediante la creación manual de un sistema de archivos y un destino de montaje en el servicio File Storage, la definición y creación de un PV respaldado por el nuevo sistema de archivos y, por último, la definición de una nueva PVC. Al crear la PVC, Container Engine for Kubernetes enlaza la PVC al PV respaldado por el servicio File Storage. Consulte Provisionamiento de una PVC en un sistema de archivos existente.

Tenga en cuenta lo siguiente:

  • Al utilizar el plugin de volumen CSI para crear dinámicamente un nuevo sistema de archivos, no actualice manualmente las propiedades del nuevo volumen persistente que crea el plugin de volumen CSI.
  • Los sistemas de archivos de servicio, destinos de montaje y exportaciones de File Storage creados dinámicamente por el plugin de volumen CSI reciben nombres que empiezan por csi-fss-.
  • Los sistemas de archivos de servicio, destinos de montaje y exportaciones de File Storage creados dinámicamente por el plugin de volumen CSI aparecen en la consola. Sin embargo, no utilice la consola (o CLI o API de Oracle Cloud Infrastructure) para modificar estos recursos creados dinámicamente. Los cambios realizados en los recursos de Oracle Cloud Infrastructure creados dinámicamente por el plugin de volumen CSI no se concilian con los objetos de Kubernetes.
  • Si suprime un PVC enlazado a un PV respaldado por un sistema de archivos creado por el plugin de volumen CSI, el plugin de volumen CSI suprime el sistema de archivos y PV creado. Si el plugin de volumen CSI también ha creado un nuevo destino de montaje (porque no ha especificado el OCID de un destino de montaje existente en la definición de clase de almacenamiento), el plugin de volumen CSI también suprime el destino de montaje. Tenga en cuenta que si especificó el OCID de un destino de montaje existente, el plugin de volumen CSI no suprime el destino de montaje.
  • El aprovisionamiento de una PVC en un nuevo sistema de archivos creado dinámicamente por el plugin de volumen CSI está disponible cuando los clusters ejecutan Kubernetes 1.22 o posterior. Consulte Aprovisionamiento de una PVC en un nuevo sistema de archivos mediante el plugin de volumen CSI.
  • El aprovisionamiento de una PVC mediante el enlace a un PV respaldado por un sistema de archivos existente está disponible cuando los clusters ejecutan Kubernetes 1.18 o posterior. Consulte Provisionamiento de una PVC en un sistema de archivos existente.

Cifrado de datos estáticos y datos en tránsito con el servicio de almacenamiento de archivos

Al utilizar el servicio File Storage para aprovisionar PVC, especifique el cifrado en tránsito independientemente del cifrado estático.

El servicio File Storage siempre cifra los datos estáticos mediante claves de cifrado gestionadas por Oracle por defecto. Sin embargo, tiene la opción de especificar el cifrado estático mediante sus propias claves de cifrado maestras que gestiona en el servicio Vault. La forma de especificar el cifrado estático depende de si está aprovisionando una PVC en:

Si desea gestionar sus propias claves de cifrado maestras para cifrar datos estáticos, debe:

El servicio File Storage puede cifrar de forma opcional los datos en tránsito. Si especifica el cifrado en tránsito, los datos en tránsito se cifran mediante un certificado TLS (seguridad de capa de transporte) siempre gestionado por Oracle, independientemente de si los datos estáticos se cifran mediante claves gestionadas por Oracle o mediante claves gestionadas por el usuario. El cifrado en tránsito protege los datos que se transfieren entre instancias y sistemas de archivos montados mediante el cifrado TLS v. 1.2. Para obtener más información sobre el cifrado en tránsito y el servicio File Storage, consulte Uso del cifrado TLS en tránsito. La forma de especificar el cifrado en tránsito depende de si está aprovisionando una PVC en:

Tenga en cuenta que al utilizar el servicio File Storage para aprovisionar PVC, el cifrado en tránsito solo está soportado cuando las instancias informáticas que alojan nodos de trabajador ejecutan Oracle Linux 7 y Oracle Linux 8.

Aprovisionamiento de una PVC en un nuevo sistema de archivos mediante el plugin de volumen CSI

Nota

Los siguientes requisitos se aplican al aprovisionar una PVC en un nuevo sistema de archivos creado dinámicamente por el plugin de volumen CSI:
  • Los clusters deben ejecutar Kubernetes 1.22 o una versión posterior para aprovisionar una PVC en un nuevo sistema de archivos creado dinámicamente por el plugin de volumen CSI.
  • Deben existir las políticas de IAM adecuadas para permitir que el plugin de volumen CSI cree y gestione recursos de File Storage. Más concretamente:

    • Una política para crear y/o gestionar sistemas de archivos, destinos de montaje y rutas de exportación. Por ejemplo:
      ALLOW any-user to manage file-family in compartment <compartment-name> where request.principal.type = 'cluster'
    • Una política para utilizar VNIC, IP privadas, zonas de DNS privadas y subredes. Por ejemplo:
      ALLOW any-user to use virtual-network-family in compartment <compartment-name> where request.principal.type = 'cluster'
  • Si el compartimento al que pertenece un pool de nodos, una subred de nodo de trabajador, un sistema de archivos o un destino de montaje es diferente del compartimento al que pertenece un cluster, deben existir políticas de IAM para permitir que el plugin de volumen de CSI acceda a la ubicación adecuada. Por ejemplo:

    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 una clave de cifrado maestra gestionada por el usuario concreta del servicio Almacén para cifrar datos en sistemas de archivos, deben existir políticas de IAM adecuadas para permitir que el plugin de volumen CSI acceda a esa clave de cifrado maestra. Consulte Create Policy to Access User-Managed Encryption Keys for Encrypting Boot Volumes, Block Volumes, and/o File Systems.

Para aprovisionar dinámicamente una PVC en un nuevo sistema de archivos creado dinámicamente por el plugin de volumen CSI en el servicio File Storage:

  1. (Opcional) Cree un destino de montaje en el servicio File Storage. Consulte Creación de un destino de montaje.

    El plugin de volumen CSI requiere un destino de montaje activo (es decir, un destino de montaje con una dirección IP asignada) para crear un nuevo sistema de archivos. Si no crea un destino de montaje por adelantado, especifique la subred en la que el plugin de volumen CSI creará un nuevo destino de montaje al definir la clase de almacenamiento.

  2. Defina una nueva clase de almacenamiento que utilice el provisionador fss.csi.oracleclould.com:
    1. Cree un archivo de manifiesto (por ejemplo, en un archivo denominado fss-dyn-st-class.yaml), especifique un nombre para la nueva clase de almacenamiento y especifique valores para los parámetros necesarios y opcionales:
      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>"}'

      donde:

      • name: <storage-class-name>: necesario. Nombre que elija para la clase de almacenamiento.
      • availabilityDomain: <ad-name>: necesario. Nombre del dominio de disponibilidad en el que se va a crear el nuevo sistema de archivos (y en el que se va a crear el nuevo destino de montaje, si no se especifica un OCID de destino de montaje existente). Por ejemplo, US-ASHBURN-AD-1. Para averiguar el nombre de dominio de disponibilidad que se va a utilizar, ejecute el comando de la CLI oci iam availability-domain list (o utilice la operación ListAvailabilityDomains). Para obtener más información, consulte Nombres de dominio de disponibilidad de su arrendamiento.
      • mountTargetOcid: <mt-ocid> | mountTargetSubnetOcid: <mt-subnet-ocid>: necesario. El OCID de un destino de montaje activo existente (mountTargetOcid: <mt-ocid>) o el OCID de una subred en la que crear un nuevo destino de montaje (mountTargetSubnetOcid: <mt-subnet-ocid>). Especifique mountTargetOcid o mountTargetSubnetOcid. Si especifica mountTargetOcid y mountTargetSubnetOcid en la definición de clase de almacenamiento, se utiliza el destino de montaje existente especificado por mountTargetOcid y se ignora mountTargetSubnetOcid. Por ejemplo:
        • mountTargetSubnetOcid: ocid1.subnet.oc1.iad.aaaaaaaa2xpk______zva
        • mountTargetOcid: ocid1.mounttarget.oc1.iad.aaaaaaaa4np______fuy
      • compartmentOcid: <compartment-ocid>: opcional. OCID del compartimento al que va a pertenecer el nuevo sistema de archivos (y el nuevo destino de montaje, si no se especifica un OCID de destino de montaje existente). Si no se especifica, el valor por defecto es el mismo compartimento que el cluster. Por ejemplo, compartmentOcid: ocid1.compartment.oc1..aaaaaaaay______t6q
      • kmsKeyOcid: <key-ocid>: opcional. OCID de una clave de cifrado maestra que gestione, con la que cifrar los datos estáticos. Si no se especifica, los datos se cifran en reposo mediante claves de cifrado gestionadas por Oracle. Consulte Cifrado de datos estáticos en un nuevo sistema de archivos. Por ejemplo, kmsKeyOcid: ocid1.key.oc1.iad.anntl______usjh
      • exportPath: <path>: opcional. La ruta de una exportación que identifica de forma única el sistema de archivos dentro del destino de montaje. La ruta de exportación debe comenzar por una barra (/) seguida de una secuencia de cero o más elementos separados por barras. Por ejemplo, /FileSystem1. Para obtener más información, consulte Rutas en sistemas de archivos.

        Si incluye exportPath: <path> en una definición de clase de almacenamiento, no especifique una ruta (ya sea como ruta de acceso o como subruta de acceso de una ruta de acceso existente) que ya exista. Si especifica una ruta que ya existe, se devuelve un error porque varios sistemas de archivos con el mismo destino de montaje no pueden tener la misma ruta de exportación. Por lo tanto, si incluye exportPath: <path> en la definición de clase de almacenamiento, utilice solo esta definición de clase de almacenamiento para crear un sistema de archivos.

        Si no incluye exportPath: <path> en la definición de clase de almacenamiento, la ruta de acceso se define por defecto en el nombre mostrado del sistema de archivos creado por el plugin de volumen CSI (empezando por /csi-fss-).

      • exportOptions: "[{<options-in-json-format>}]" Opcional. Juego de parámetros (en formato JSON válido) dentro de la exportación que especifica el nivel de acceso otorgado a los clientes NFS cuando se conectan a un destino de montaje. Una entrada de opciones de exportación NFS en una exportación define el acceso para una única dirección IP o rango de bloques de CIDR. Para obtener más información, consulte Trabajar con opciones de exportación y exportación NFS. Si no se especifica, se utiliza el siguiente valor por defecto:
        exportOptions: "[{\"source\":\"0.0.0.0/0\",\"requirePrivilegedSourcePort\":false,\"access\":\"READ_WRITE\",\"identitySquash\":\"NONE\"}]"
      • encryptInTransit: "true"|"false": opcional. Indica si se deben cifrar los datos en tránsito. Si especifica "true", asegúrese de completar los pasos de configuración descritos en Cifrado de datos en tránsito en un nuevo sistema de archivos. Si no se especifica, el valor por defecto es "false". Por ejemplo, encryptInTransit: "true".
      • oci.oraclecloud.com/initial-defined-tags-override: '{"<tag-namespace>": {"<tag-key>": "<tag-value>"}}' Opcional. Especifica una etiqueta definida para el nuevo sistema de archivos. Por ejemplo, oci.oraclecloud.com/initial-defined-tags-override: '{"Operations": {"CostCenter": "42"}}'

        Tenga en cuenta que para aplicar etiquetas definidas de un espacio de nombres de etiqueta que pertenece a un compartimento a un recurso de sistema de archivos que pertenece a un compartimento diferente, debe incluir una sentencia de política para permitir que el cluster utilice el espacio de nombres de etiqueta. Consulte Política de IAM adicional cuando un cluster y un espacio de nombres de etiqueta están en diferentes compartimentos.

      • oci.oraclecloud.com/initial-freeform-tags-override: '{"<tag-key>": "<tag-value>"}' Opcional. Especifica una etiqueta de formato libre para el nuevo sistema de archivos. Por ejemplo, oci.oraclecloud.com/initial-freeform-tags-override: '{"Department": "Finance"}'

      Por ejemplo:

      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. Cree la clase de almacenamiento a partir del archivo de manifiesto introduciendo:
      kubectl create -f <filename>
      Por ejemplo:
      kubectl create -f fss-dyn-st-class.yaml
  3. Cree reglas de seguridad en un grupo de seguridad de red (recomendado) o en una lista de seguridad para el destino de montaje al que se hace referencia en la definición de clase de almacenamiento (o creado por ella) y para los nodos de trabajador del cluster.

    Las reglas de seguridad que se van a crear dependen de las ubicaciones de red relativas del destino de montaje y los nodos de trabajador, según los siguientes escenarios:

    Estos escenarios, las reglas de seguridad que se van a crear y dónde se van a crear, se describen completamente en la documentación del servicio File Storage (consulte Configuración de reglas de seguridad de VCN para File Storage).

  4. Cree una PVC para que la aprovisione el nuevo sistema de archivos en el servicio File Storage, de la siguiente forma:
    1. Cree un archivo de manifiesto para definir la PVC:
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: <pvc-name>
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: "<storage-class-name>"
        resources:
          requests:
            storage: 50Gi

      donde:

      • name: <pvc-name>: necesario. Por ejemplo, fss-dynamic-claim
      • storageClassName: "<storage-class-name>": necesario. Nombre de la clase de almacenamiento definida anteriormente. Por ejemplo, fss-dyn-storage.
      • accessModes: - ReadWriteMany: necesario. Tenga en cuenta que accessModes: debe especificar ReadWriteMany.
      • storage: 50Gi: necesario. Tenga en cuenta que Kubernetes necesita que especifique un valor para storage: en el manifiesto de PVC. Sin embargo, el servicio File Storage no soporta la especificación de un tamaño de sistema de archivos y crea un nuevo sistema de archivos con un tamaño por defecto, independientemente del valor que especifique para storage:.

      Por ejemplo, el siguiente archivo de manifiesto (denominado fss-dyn-claim.yaml) define una PVC denominada fss-dynamic-claim que aprovisiona el sistema de archivos definido en la clase de almacenamiento fss-dyn-storage:

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: fss-dynamic-claim
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: "fss-dyn-storage"
        resources:
          requests:
            storage: 50Gi
    2. Cree la PVC a partir del archivo de manifiesto introduciendo:
      kubectl create -f <filename>
      Por ejemplo:
      kubectl create -f fss-dyn-claim.yaml

    Se crea un nuevo PVC. El plugin de volumen CSI crea un nuevo volumen persistente (PV) y un nuevo sistema de archivos en el servicio File Storage (junto con un nuevo destino de montaje si no ha especificado un destino de montaje existente).

    El nuevo PVC está vinculado al nuevo PV. Los datos se cifran de forma estática mediante claves de cifrado gestionadas por Oracle o por usted.

  5. Verifique que la PVC se ha enlazado al nuevo volumen persistente introduciendo:
    kubectl get pvc

    La salida del comando anterior confirma que la PVC se ha enlazado correctamente:

    			
    NAME                STATUS    VOLUME                 CAPACITY   ACCESSMODES   STORAGECLASS      AGE
    fss-dynamic-claim   Bound     csi-fss-<unique_ID>    50Gi       RWX           fss-dyn-storage   4m
  6. Utilice la nueva PVC al crear otros objetos, como pods. Por ejemplo, puede crear un nuevo pod a partir de la siguiente definición 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. Después de crear un nuevo pod como se describe en el ejemplo del paso anterior, puede verificar que el pod está utilizando el nuevo PVC introduciendo:

    kubectl describe pod nginx
Consejo

Si prevé que sea frecuente crear nuevos sistemas de archivos y PV nuevos al crear PVC de forma dinámica, puede especificar que la nueva clase de almacenamiento que ha creado se utilice como clase de almacenamiento por defecto para aprovisionar nuevas PVC. Consulte la documentación de Kubernetes para obtener más información.

Cifrado de datos estáticos en un nuevo sistema de archivos

El servicio File Storage siempre cifra los datos estáticos mediante claves de cifrado gestionadas por Oracle por defecto. Sin embargo, tiene la opción de cifrar datos estáticos mediante sus propias claves de cifrado maestras que gestiona en el servicio Vault.

En función de cómo desee cifrar los datos estáticos, siga las instrucciones adecuadas a continuación:

  • Para utilizar el plugin de volumen CSI para crear de forma dinámica un nuevo sistema de archivos que utilice claves de cifrado gestionadas por Oracle para cifrar datos estáticos, siga los pasos de Aprovisionamiento de una PVC en un nuevo sistema de archivos mediante el plugin de volumen CSI y no incluya el parámetro kmsKeyOcid: <key-ocid> en la definición de clase de almacenamiento. Los datos se cifran cuando están estáticos, utilizando claves de cifrado gestionadas por Oracle.
  • Para utilizar el plugin de volumen CSI para crear de forma dinámica un nuevo sistema de archivos que utilice claves de cifrado maestras que gestione para cifrar datos estáticos, siga los pasos de Aprovisionamiento de una PVC en un nuevo sistema de archivos mediante el plugin de volumen CSI, incluya el parámetro kmsKeyOcid: <key-ocid> en la definición de clase de almacenamiento y especifique el OCID de la clave de cifrado maestra en el servicio Almacén. Los datos se cifran de forma estática, utilizando la clave de cifrado que especifique.

Cifrado de datos en tránsito en un nuevo sistema de archivos

El cifrado en tránsito protege los datos que se transfieren entre instancias y sistemas de archivos montados mediante el cifrado TLS 1.2 (seguridad de capa de transporte). Para obtener más información sobre el cifrado en tránsito y el servicio File Storage, consulte Uso del cifrado TLS en tránsito.

El cifrado en tránsito se especifica independientemente del cifrado estático. Los datos en tránsito se cifran mediante un certificado TLS que siempre está gestionado por Oracle, independientemente de si los datos estáticos se cifran mediante claves gestionadas por Oracle o mediante claves gestionadas por el usuario.

Tenga en cuenta que al utilizar el servicio File Storage para aprovisionar PVC, el cifrado en tránsito solo está soportado cuando las instancias informáticas que alojan nodos de trabajador ejecutan Oracle Linux 7 y Oracle Linux 8.

Para utilizar el plugin de volumen CSI para crear dinámicamente un nuevo sistema de archivos con cifrado en tránsito:

  1. Siga las instrucciones de Configuración del cifrado en tránsito para Linux para configurar el cifrado en tránsito en el sistema de archivos. Más concretamente:
    1. Complete los requisitos mediante la configuración de las siguientes reglas de seguridad en un grupo de seguridad de red (recomendado) o una lista de seguridad para el destino de montaje que exporta el sistema de archivos:
      • Regla de entrada con estado que permite el tráfico TCP a un rango de puertos de destino de 2051, ya sea de todos los puertos de una dirección IP de origen o bloque CIDR de su elección, o de todos los orígenes.
      • Regla de salida con estado que permite el tráfico TCP desde un rango de puertos de origen de 2051, ya sea a todos los puertos de una dirección IP de destino o bloque CIDR de su elección, o a todos los destinos.

      Para obtener más información, consulte Escenario C: El destino de montaje y la instancia utilizan cifrado TLS en tránsito.

    2. Descargue el paquete oci-fss-utils en cada nodo de trabajador. Tenga en cuenta que debe aceptar el Acuerdo de licencia. Consulte Tarea 1: Descarga del paquete OCI-FSS-UTILS.
    3. Instale el paquete oci-fss-utils en cada nodo de trabajador. Consulte Tarea 2: Instalación del paquete OCI-FSS-UTILS en Oracle Linux o CentOS.
  2. Siga las instrucciones de Aprovisionamiento de una PVC en un nuevo sistema de archivos mediante el plugin de volumen CSI e incluya el parámetro encryptInTransit: "true" en la definición de clase de almacenamiento. Los datos se cifran en tránsito mediante una clave de cifrado gestionada por Oracle.

Aprovisionamiento de una PVC en un sistema de archivos existente

Para crear una PVC en un sistema de archivos existente en el servicio File Storage (mediante claves de cifrado gestionadas por Oracle para cifrar los datos estáticos):

  1. Cree un sistema de archivos con un destino de montaje en el servicio File Storage y seleccione la opción de cifrado Cifrar mediante claves gestionadas por Oracle. Consulte Creación de un sistema de archivos.
  2. Cree reglas de seguridad en un grupo de seguridad de red (recomendado) o en una lista de seguridad tanto para el destino de montaje que exporta el sistema de archivos como para los nodos de trabajador del cluster.
    Las reglas de seguridad que se van a crear dependen de las ubicaciones de red relativas del destino de montaje y los nodos de trabajador, según los siguientes escenarios:

    Estos escenarios, las reglas de seguridad que se van a crear y dónde se van a crear, se describen completamente en la documentación del servicio File Storage (consulte Configuración de reglas de seguridad de VCN para File Storage).

  3. Cree un PV respaldado por el sistema de archivos en el servicio File Storage de la siguiente manera:
    1. Cree un archivo de manifiesto para definir un PV y, en la sección csi:, defina:

      • De driver a fss.csi.oraclecloud.com
      • De volumeHandle a <FileSystemOCID>:<MountTargetIP>:<path>
        donde:
        • <FileSystemOCID> es el OCID del sistema de archivos definido en el servicio File Storage.
        • <MountTargetIP> es la dirección IP asignada al destino de montaje.
        • <path> es la ruta de montaje al sistema de archivos relativa a la dirección IP del destino de montaje, que comienza con una barra diagonal.
        Por ejemplo: ocid1.filesystem.oc1.iad.aaaa______j2xw:10.0.0.6:/FileSystem1

      Por ejemplo, el siguiente archivo de manifiesto (denominado fss-pv.yaml) define un PV denominado fss-pv respaldado por un sistema de archivos en el servicio 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. Cree el PV desde el archivo de manifiesto introduciendo:
      kubectl create -f <filename>

      Por ejemplo:

      kubectl create -f fss-pv.yaml
  4. Cree una PVC aprovisionada por el PV que ha creado, de la siguiente forma:
    1. Cree un archivo de manifiesto para definir la PVC y defina:
      • De storageClassName a ""
      • volumeName al nombre del PV que ha creado (por ejemplo, fss-pv)

      Por ejemplo, el siguiente archivo de manifiesto (denominado fss-pvc.yaml) define una PVC denominada fss-pvc aprovisionada por un PV denominado fss-pv:

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

      Tenga en cuenta que el elemento requests: storage: debe estar presente en el archivo de manifiesto de PVC y su valor debe coincidir con el valor especificado para el elemento capacity: storage: en el archivo de manifiesto del PV. Aparte de eso, se ignora el valor del elemento requests: storage:.

    2. Cree la PVC a partir del archivo de manifiesto introduciendo:
      kubectl create -f <filename>
      Por ejemplo:
      kubectl create -f fss-pvc.yaml

La PVC está enlazada al PV respaldado por el sistema de archivos de servicio File Storage. Los datos se cifran cuando están estáticos, utilizando claves de cifrado gestionadas por Oracle.

Cifrado de datos estáticos en un sistema de archivos existente

El servicio File Storage siempre cifra los datos estáticos mediante claves de cifrado gestionadas por Oracle por defecto. Sin embargo, tiene la opción de cifrar sistemas de archivos mediante claves de cifrado maestras propias en el servicio Vault.

En función de cómo desee cifrar los datos estáticos, siga las instrucciones adecuadas a continuación:

  • Para crear una PVC en un sistema de archivos mediante claves de cifrado gestionadas por Oracle para cifrar datos estáticos, siga los pasos de Aprovisionamiento de una PVC en un sistema de archivos existente y seleccione la opción de cifrado Cifrar mediante claves gestionadas por Oracle, como se describe. Los datos se cifran cuando están estáticos, utilizando claves de cifrado gestionadas por Oracle.
  • Para crear una PVC en un sistema de archivos mediante claves de cifrado maestras que gestione para cifrar datos estáticos, siga los pasos de Aprovisionamiento de una PVC en un sistema de archivos existente, pero seleccione la opción de cifrado Cifrar mediante claves gestionadas por el cliente y especifique la clave de cifrado maestra en el servicio Almacén. Los datos se cifran de forma estática, utilizando la clave de cifrado que especifique.

Cifrado de datos en tránsito en un sistema de archivos existente

El cifrado en tránsito protege los datos que se transfieren entre instancias y sistemas de archivos montados mediante el cifrado TLS v 1.2 (seguridad de capa de transporte). Para obtener más información sobre el cifrado en tránsito y el servicio File Storage, consulte Uso del cifrado TLS en tránsito.

El cifrado en tránsito se especifica independientemente del cifrado estático. Los datos en tránsito se cifran mediante un certificado TLS que siempre está gestionado por Oracle, independientemente de si los datos estáticos se cifran mediante claves gestionadas por Oracle o mediante claves gestionadas por el usuario.

Tenga en cuenta que al utilizar el servicio File Storage para aprovisionar PVC, el cifrado en tránsito solo está soportado cuando las instancias informáticas que alojan nodos de trabajador ejecutan Oracle Linux 7 y Oracle Linux 8.

Para crear una PVC en un sistema de archivos donde los datos se cifran en tránsito:

  1. Siga las instrucciones de Configuración del cifrado en tránsito para Linux para configurar el cifrado en tránsito en el sistema de archivos. Más concretamente:
    1. Complete los requisitos mediante la configuración de las siguientes reglas de seguridad en un grupo de seguridad de red (recomendado) o una lista de seguridad para el destino de montaje que exporta el sistema de archivos:
      • Regla de entrada con estado que permite el tráfico TCP a un rango de puertos de destino de 2051, ya sea de todos los puertos de una dirección IP de origen o bloque CIDR de su elección, o de todos los orígenes.
      • Regla de salida con estado que permite el tráfico TCP desde un rango de puertos de origen de 2051, ya sea a todos los puertos de una dirección IP de destino o bloque CIDR de su elección, o a todos los destinos.

      Para obtener más información, consulte Escenario C: El destino de montaje y la instancia utilizan TLS en el cifrado en tránsito.

    2. Descargue el paquete oci-fss-utils en cada nodo de trabajador. Tenga en cuenta que debe aceptar el Acuerdo de licencia. Consulte Tarea 1: Descarga del paquete OCI-FSS-UTILS.
    3. Instale el paquete oci-fss-utils en cada nodo de trabajador. Consulte Tarea 2: Instalación del paquete OCI-FSS-UTILS en Oracle Linux o CentOS.
  2. Siga las instrucciones de Aprovisionamiento de una PVC en un sistema de archivos existente y seleccione la opción Cifrar con claves gestionadas por Oracle o la opción Cifrar con claves gestionadas por el cliente, según sea necesario para el cifrado de datos estático. Sin embargo, al crear el archivo de manifiesto para definir un PV, defina encryptInTransit en "true" en la sección csi del archivo. Por ejemplo:

    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"

Solución de problemas de aprovisionamiento del servicio File Storage de PVC

El pod no puede acceder al sistema de archivos debido a permisos insuficientes

Descripción: cuando un pod intenta acceder a un volumen persistente (PV) respaldado por un sistema de archivos en el servicio File Storage, el intento puede fallar con un mensaje de "Permiso denegado".

Causa: al definir un PV respaldado por un sistema de archivos en el servicio File Storage, defina el atributo accessModes del PV en ReadWriteMany y no tiene que especificar un valor para el atributo fsType del PV.

El plugin de volumen CSI se implementa como un objeto CSIDriver. Utilice el atributo fsGroupPolicy del objeto CSIDriver para controlar si CSIDriver cambia la propiedad y los permisos de un volumen para que coincidan con el atributo fsGroup especificado en el securityContext de un pod que monta el volumen. Al cambiar la propiedad y los permisos del volumen, el pod puede acceder al volumen después de montarlo.

Por defecto, el atributo fsGroupPolicy del objeto CSIDriver está definido en ReadWriteOnceWithFSType, lo que indica que CSIDriver debe examinar la definición de PV para determinar si se deben modificar la propiedad del volumen y los permisos para que coincidan con el atributo fsGroup del pod de la siguiente forma:

  • Si el atributo fsType del PV está definido, CSIDriver modifica la propiedad y los permisos del volumen para que coincidan con el atributo fsGroup especificado en el pod securityContext. Como resultado, el volumen es accesible para el pod.
  • Si el atributo fsType del PV no está definido, CSIDriver no modifica la propiedad ni los permisos del volumen. Los procesos que se ejecutan como raíz solo pueden acceder al volumen. Como resultado, un pod que no se está ejecutando como raíz recibe el mensaje "Permission Denied" al intentar acceder a un directorio o archivo en el volumen montado.

Puede verificar que el motivo por el que un pod recibe el mensaje "Permiso denegado" sea porque el atributo fsGroupPolicy del objeto CSIDriver está definido en ReadWriteOnceWithFSType y el atributo fsType del PV no está definido. Ejecute un comando en el pod para escribir un archivo en un directorio del volumen montado y, a continuación, examine las propiedades del archivo para confirmar si el propietario del grupo coincide con el atributo fsGroup especificado en el securityContext del pod. Por ejemplo, suponga que un pod tiene el siguiente manifiesto:

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. Ejecute un comando en el pod para escribir un archivo en un directorio del volumen montado. Por ejemplo, introduzca:
    kubectl exec -it security-context-demo -- sh -c "cd /data/demo && echo hello > testfile"
  2. Examine las propiedades del archivo recién creado para confirmar los derechos de acceso. Por ejemplo, introduzca:
    kubectl exec -it security-context-demo -- sh -c "ls -l /data/demo/testfile"

    Idealmente, la salida muestra que el propietario del grupo del archivo es el mismo que el especificado por el atributo fsGroup del pod, proporcionando al pod acceso al archivo. Por ejemplo:

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

    Sin embargo, si el atributo fsGroupPolicy del objeto CSIDriver está definido en ReadWriteOnceWithFSType y el atributo fsType del PV no está definido, la salida muestra el propietario del grupo del archivo como raíz y el pod no tiene acceso al archivo. Por ejemplo:

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

Para obtener más información, consulte la Política de fsGroup de volumen CSI en la documentación de Kubernetes.

Acción: para activar el objeto CSIDriver para modificar la propiedad y los permisos del volumen para que coincidan con el atributo fsGroup especificado en securityContext del pod, defina el atributo fsGroupPolicy del objeto CSIDriver en File de la siguiente manera:

  1. Obtenga el archivo de configuración CSIDriver introduciendo:
    kubectl get csiDriver fss.csi.oraclecloud.com -oyaml > fss_csi_driver.yaml
  2. En un editor de texto, edite el archivo fss_csi_driver.yaml y cambie el atributo fsGroupPolicy del objeto CSIDriver de ReadWriteOnceWithFSType a File.

    Por ejemplo, cambie:

    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 

    en:

    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 

    Cambie solo el valor de fsGroupPolicy. No cambie ningún otro valor.

  3. Guardar y cerrar el archivo fss_csi_driver.yaml.
  4. Suprima el objeto CSIDriver existente introduciendo:
    kubectl delete csiDriver fss.csi.oraclecloud.com
  5. Cree el nuevo objeto CSIDriver introduciendo:
    kubectl apply -f fss_csi_driver.yaml 
  6. Reinicie el pod que ha encontrado el mensaje "Permission Denied".