Persistent Volume Claims (PVCs) im File Storage-Service bereitstellen

Erfahren Sie, wie Sie Persistent Volume Claims für Cluster bereitstellen, die Sie mit der Kubernetes Engine (OKE) erstellt haben, indem Sie Dateisysteme aus dem File Storage-Service mounten.

Oracle Cloud Infrastructure File Storage Service stellt ein dauerhaftes, skalierbares, verteiltes Netzwerkdateisystem der Unternehmensklasse bereit. Mit dem CSI-Volume-Plug-in können Sie Cluster mit Dateisystemen im File Storage-Service verbinden.

Mit File Storage Service können Sie Persistent Volume Claims (PVCs) auf zwei Arten bereitstellen:

  • Indem Sie eine neue Speicherklasse definieren und erstellen (optional die OCID eines vorhandenen Mountziels angeben) und dann ein neues PVC basierend auf der Speicherklasse definieren und erstellen. Wenn Sie das PVC erstellen, erstellt das CSI-Volume-Plug-in dynamisch sowohl ein neues File Storage-Service-Dateisystem als auch ein neues persistentes Volume, das vom neuen Dateisystem gesichert wird. Siehe PVC in einem neuen Dateisystem mit dem CSI-Volume-Plug-in bereitstellen.
  • Erstellen Sie manuell ein Dateisystem und ein Mountziel im File Storage-Service, definieren und erstellen Sie dann ein PV, das vom neuen Dateisystem unterstützt wird, und definieren Sie schließlich ein neues PVC. Wenn Sie das PVC erstellen, bindet die Kubernetes-Engine das PVC an das PV, das vom File Storage-Service unterstützt wird. Siehe PVC in einem vorhandenen Dateisystem bereitstellen.

Beachten Sie Folgendes:

  • Wenn Sie mit dem CSI-Volume-Plug-in ein neues Dateisystem dynamisch erstellen, aktualisieren Sie die Eigenschaften des neuen persistenten Volumes, das das CSI-Volume-Plug-in erstellt, nicht manuell.
  • Alle File Storage Service-Dateisysteme, Mountziele und Exporte, die dynamisch vom CSI-Volume-Plug-in erstellt werden, erhalten Namen, die mit csi-fss- beginnen.
  • Alle Dateisysteme, Mountziele und Exporte des File Storage-Service, die dynamisch vom CSI-Volume-Plug-in erstellt werden, werden in der Konsole angezeigt. Verwenden Sie jedoch nicht die Konsole (oder die Oracle Cloud Infrastructure-CLI oder -API), um diese dynamisch erstellten Ressourcen zu ändern. Vom CSI-Volume-Plug-in dynamisch erstellte Änderungen an Oracle Cloud Infrastructure-Ressourcen werden nicht mit Kubernetes-Objekten abgestimmt.
  • Wenn Sie einen PVC löschen, der an einen PV gebunden ist, der von einem vom CSI-Volume-Plug-in erstellten Dateisystem gesichert wird, löscht das CSI-Volume-Plug-in das Dateisystem und den erstellten PV. Wenn das CSI-Volume-Plug-in auch ein neues Mountziel erstellt hat (weil Sie die OCID eines vorhandenen Mountziels in der Speicherklassendefinition nicht angegeben haben), löscht das CSI-Volume-Plug-in auch das Mountziel. Wenn Sie die OCID eines vorhandenen Mountziels angegeben haben, löscht das CSI-Volume-Plug-in das Mountziel nicht.
  • Das Provisioning eines PVC auf einem neuen Dateisystem, das dynamisch vom CSI-Volume-Plug-in erstellt wird, ist verfügbar, wenn Cluster Kubernetes 1.22 oder höher ausführen. Siehe PVC mit dem CSI-Volume-Plug-in in einem neuen Dateisystem bereitstellen.
  • Das Provisioning eines PVC, indem es an einen PV gebunden wird, der von einem vorhandenen Dateisystem unterstützt wird, ist verfügbar, wenn Cluster Kubernetes 1.18 oder höher ausführen. Siehe PVC in einem vorhandenen Dateisystem durch Provisioning bereitstellen.

Data At Rest und Data In Transit mit File Storage Service verschlüsseln

Wenn Sie den File Storage-Service zum Provisioning von PVCs verwenden, geben Sie die Verschlüsselung während der Übertragung unabhängig von der Data-at-Rest-Verschlüsselung an.

Der File Storage-Service verschlüsselt Daten im Ruhezustand immer mit von Oracle verwalteten Verschlüsselungsschlüsseln. Sie haben jedoch die Möglichkeit, die Verschlüsselung im Ruhezustand mit Ihren eigenen Masterverschlüsselungsschlüsseln anzugeben, die Sie selbst im Vault-Service verwalten. Wie Sie die Data-at-Rest-Verschlüsselung angeben, hängt davon ab, ob Sie ein PVC bereitstellen:

Wenn Sie Ihre eigenen Masterverschlüsselungsschlüssel verwalten möchten, um Daten im Ruhezustand zu verschlüsseln, müssen Sie:

Der File Storage-Service kann Daten während der Übertragung optional verschlüsseln. Wenn Sie Verschlüsselung während der Übertragung angeben, werden Daten während der Übertragung mit einem TLS-(Transport Layer Security-)Zertifikat verschlüsselt, das immer von Oracle verwaltet wird, unabhängig davon, ob Daten im Ruhezustand mit von Oracle verwalteten Schlüsseln oder mit benutzerverwalteten Schlüsseln verschlüsselt werden. Die Verschlüsselung während der Übertragung sichert die Daten, die zwischen Instanzen und gemounteten Dateisystemen mit TLS v. 1.2-Verschlüsselung übertragen werden. Weitere Informationen zur Verschlüsselung während der Übertragung und zum File Storage-Service finden Sie unter TLS-Verschlüsselung während der Übertragung verwenden. Wie Sie die Verschlüsselung während der Übertragung angeben, hängt davon ab, ob Sie ein PVC bereitstellen:

Beachten Sie, dass bei Verwendung des File Storage-Service zum Provisioning von PVCs die Verschlüsselung während der Übertragung nur unterstützt wird, wenn die Compute-Instanzen, die Worker-Knoten hosten, Oracle Linux 7 und Oracle Linux 8 ausführen.

PVC auf einem neuen Dateisystem mit dem CSI-Volume-Plug-in bereitstellen

Hinweis

Beim Provisioning eines PVC in einem neuen Dateisystem, das dynamisch vom CSI-Volume-Plug-in erstellt wird, gelten die folgenden Voraussetzungen:
  • Cluster müssen Kubernetes 1.22 oder höher ausführen, um ein PVC in einem neuen Dateisystem bereitzustellen, das dynamisch vom CSI-Volume-Plug-in erstellt wird.
  • Damit das CSI-Volume-Plug-in File Storage-Ressourcen erstellen und verwalten kann, müssen entsprechende IAM-Policys vorhanden sein. Genauer:

    • Eine Policy zum Erstellen und/oder Verwalten von Dateisystemen, Mountzielen und Exportpfaden. Beispiel:
      ALLOW any-user to manage file-family in compartment <compartment-name> where request.principal.type = 'cluster'
    • Eine Policy zur Verwendung von VNICs, privaten IPs, privaten DNS-Zonen und Subnetzen. Beispiel:
      ALLOW any-user to use virtual-network-family in compartment <compartment-name> where request.principal.type = 'cluster'
  • Wenn sich das Compartment, zu dem ein Knotenpool, ein Worker-Knotensubnetz, ein Dateisystem oder ein Mountziel gehört, von dem Compartment unterscheidet, zu dem ein Cluster gehört, müssen IAM-Policys vorhanden sein, damit das CSI-Volume-Plug-in auf den entsprechenden Speicherort zugreifen kann. Beispiel:

    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'
  • Um einen bestimmten vom Benutzer verwalteten Masterverschlüsselungsschlüssel aus dem Vault-Service zur Verschlüsselung von Daten in Dateisystemen anzugeben, müssen entsprechende IAM-Policys vorhanden sein, damit das CSI-Volume Plug-in auf diesen Masterverschlüsselungsschlüssel zugreifen kann. Siehe Policy für den Zugriff auf vom Benutzer verwaltete Verschlüsselungsschlüssel zum Verschlüsseln von Boot-Volumes, Block-Volumes und/oder Dateisystemen erstellen.

So stellen Sie ein PVC dynamisch in einem neuen Dateisystem bereit, das dynamisch vom CSI-Volume-Plug-in im File Storage-Service erstellt wird:

  1. (Optional) Erstellen Sie ein Mountziel im File Storage-Service. Siehe Mountziel erstellen.

    Das CSI-Volume-Plug-in erfordert ein aktives Mountziel (d.h. ein Mountziel mit einer zugewiesenen IP-Adresse), um ein neues Dateisystem zu erstellen. Wenn Sie kein Mountziel im Voraus erstellen, geben Sie das Subnetz an, in dem das CSI-Volume-Plug-in beim Definieren der Speicherklasse ein neues Mountziel erstellen soll.

  2. Definieren Sie eine neue Speicherklasse, die den Provisioning-Vorgang fss.csi.oraclecloud.com verwendet:
    1. Erstellen Sie eine Manifestdatei (Beispiel: in einer Datei mit dem Namen fss-dyn-st-class.yaml), geben Sie einen Namen für die neue Speicherklasse an, und geben Sie Werte für erforderliche und optionale Parameter an:
      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>"}'

      Hierbei gilt:

      • name: <storage-class-name>: Erforderlich. Ein Name Ihrer Wahl für die Speicherklasse.
      • availabilityDomain: <ad-name>: Erforderlich. Der Name der Availability-Domain, in der das neue Dateisystem erstellt werden soll (und in der das neue Mountziel erstellt werden soll, wenn keine vorhandene Mountziel-OCID angegeben ist). Beispiel: US-ASHBURN-AD-1. Um den zu verwendenden Availability-Domainnamen zu ermitteln, führen Sie den CLI-Befehl oci iam availability-domain list aus (oder verwenden Sie den Vorgang ListAvailabilityDomains). Weitere Informationen finden Sie unter Availability-Domainnamen Ihres Mandanten.
      • mountTargetOcid: <mt-ocid> | mountTargetSubnetOcid: <mt-subnet-ocid>: Erforderlich. Entweder die OCID eines vorhandenen aktiven Mountziels (mountTargetOcid: <mt-ocid>) oder die OCID eines Subnetzes, in dem ein neues Mountziel erstellt werden soll (mountTargetSubnetOcid: <mt-subnet-ocid>). Geben Sie entweder mountTargetOcid oder mountTargetSubnetOcid an. Wenn Sie in der Speicherklassendefinition sowohl mountTargetOcid als auch mountTargetSubnetOcid angeben, wird das mit mountTargetOcid angegebene vorhandene Mountziel verwendet, und mountTargetSubnetOcid wird ignoriert. Beispiel:
        • mountTargetSubnetOcid: ocid1.subnet.oc1.iad.aaaaaaaa2xpk______zva
        • mountTargetOcid: ocid1.mounttarget.oc1.iad.aaaaaaaa4np______fuy
      • compartmentOcid: <compartment-ocid>: Optional. Die OCID des Compartments, zu dem das neue Dateisystem (und das neue Mountziel, wenn keine vorhandene Mountziel-OCID angegeben ist) gehören soll. Wenn keine Angabe gemacht wird, wird standardmäßig dasselbe Compartment wie das Cluster verwendet. Beispiel: compartmentOcid: ocid1.compartment.oc1..aaaaaaaay______t6q
      • kmsKeyOcid: <key-ocid>: Optional. Die OCID eines von Ihnen verwalteten Masterverschlüsselungsschlüssels, mit dem Daten im Ruhezustand verschlüsselt werden. Wenn keine Angabe gemacht wird, werden die Daten im Ruhezustand mit von Oracle verwalteten Verschlüsselungsschlüsseln verschlüsselt. Siehe Data At Rest auf einem neuen Dateisystem verschlüsseln. Beispiel: kmsKeyOcid: ocid1.key.oc1.iad.anntl______usjh
      • exportPath: <path>: Optional. Der Pfad in einem Export, der das Dateisystem im Mount-Ziel eindeutig identifiziert. Der Exportpfad muss mit einem Schrägstrich (/) beginnen, gefolgt von einer Sequenz aus null oder mehr Elementen, die durch einen Schrägstrich voneinander getrennt sind. Beispiel: /FileSystem1. Weitere Informationen finden Sie unter Pfade in Dateisystemen.

        Wenn Sie exportPath: <path> in eine Speicherklassendefinition aufnehmen, geben Sie keinen Pfad (entweder als Pfad oder als Unterpfad eines vorhandenen Pfads) an, der bereits vorhanden ist. Wenn Sie einen bereits vorhandenen Pfad angeben, wird ein Fehler zurückgegeben, da mehrere Dateisysteme mit demselben Mountziel nicht denselben Exportpfad aufweisen können. Wenn Sie also exportPath: <path> in die Speicherklassendefinition aufnehmen, verwenden Sie diese Speicherklassendefinition nur, um ein Dateisystem zu erstellen.

        Wenn Sie exportPath: <path> nicht in die Speicherklassendefinition aufnehmen, wird standardmäßig der Anzeigename des Dateisystems verwendet, das vom CSI-Volume-Plug-in erstellt wurde (ab /csi-fss-).

      • exportOptions: "[{<options-in-json-format>}]" Optional. Eine Gruppe von Parametern (im gültigen JSON-Format) im Export, die die Zugriffsebene angibt, die NFS-Clients erteilt wird, wenn sie eine Verbindung zu einem Mountziel herstellen. Ein Eintrag für NFS-Exportoptionen innerhalb eines Exports definiert den Zugriff für eine einzelne IP-Adresse oder einen CIDR-Blockbereich. Weitere Informationen finden Sie unter Mit NFS-Exports und -Exportoptionen arbeiten. Wenn nicht angegeben, wird der folgende Standardwert verwendet:
        exportOptions: "[{\"source\":\"0.0.0.0/0\",\"requirePrivilegedSourcePort\":false,\"access\":\"READ_WRITE\",\"identitySquash\":\"NONE\"}]"
      • encryptInTransit: "true"|"false": Optional. Gibt an, ob Daten während der Übertragung verschlüsselt werden. Wenn Sie "true" angeben, müssen Sie die Setupschritte ausführen, die unter In Transit befindliche Daten in einem neuen Dateisystem verschlüsseln beschrieben sind. Wenn keine Angabe gemacht wird, wird standardmäßig "false" verwendet. Beispiel: encryptInTransit: "true".
      • oci.oraclecloud.com/initial-defined-tags-override: '{"<tag-namespace>": {"<tag-key>": "<tag-value>"}}' Optional. Gibt ein definiertes Tag für das neue Dateisystem an. Beispiel: oci.oraclecloud.com/initial-defined-tags-override: '{"Operations": {"CostCenter": "42"}}'

        Um definierte Tags aus einem Tag-Namespace, der zu einem Compartment gehört, auf eine Dateisystemressource anzuwenden, die zu einem anderen Compartment gehört, müssen Sie eine Policy-Anweisung aufnehmen, damit das Cluster den Tag-Namespace verwenden kann. Siehe Zusätzliche IAM-Policy, wenn sich ein Cluster und ein Tag-Namespace in verschiedenen Compartments befinden.

      • oci.oraclecloud.com/initial-freeform-tags-override: '{"<tag-key>": "<tag-value>"}' Optional. Gibt ein Freiformtag für das neue Dateisystem an. Beispiel: oci.oraclecloud.com/initial-freeform-tags-override: '{"Department": "Finance"}'

      Beispiel:

      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. Erstellen Sie die Speicherklasse aus der Manifestdatei, indem Sie Folgendes eingeben:
      kubectl create -f <filename>
      Beispiel:
      kubectl create -f fss-dyn-st-class.yaml
  3. Erstellen Sie Sicherheitsregeln entweder in einer Netzwerksicherheitsgruppe (empfohlen) oder in einer Sicherheitsliste für das Mountziel, das in der Speicherklassendefinition referenziert (oder von dieser erstellt) wird, sowie für die Worker-Knoten des Clusters.

    Die zu erstellenden Sicherheitsregeln hängen von den relativen Netzwerkspeicherorten des Mountziels und der Worker-Knoten gemäß den folgenden Szenarios ab:

    Diese Szenarios, die zu erstellenden Sicherheitsregeln und die Stelle, an der sie erstellt werden sollen, werden in der Dokumentation zum File Storage-Service ausführlich beschrieben (siehe VCN-Sicherheitsregeln für File Storage konfigurieren).

  4. Erstellen Sie wie folgt ein PVC, das vom neuen Dateisystem im File Storage-Service bereitgestellt werden soll:
    1. Erstellen Sie eine Manifestdatei, um den PVC zu definieren:
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: <pvc-name>
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: "<storage-class-name>"
        resources:
          requests:
            storage: 50Gi

      Hierbei gilt:

      • name: <pvc-name>: Erforderlich. Beispiel: fss-dynamic-claim
      • storageClassName: "<storage-class-name>": Erforderlich. Der Name der Speicherklasse, die Sie zuvor definiert haben. Beispiel: fss-dyn-storage.
      • accessModes: - ReadWriteMany: Erforderlich. Beachten Sie, dass accessModes: ReadWriteMany angeben muss.
      • storage: 50Gi: Erforderlich. Beachten Sie, dass Sie in Kubernetes einen Wert für storage: im PVC-Manifest angeben müssen. Der File Storage-Service unterstützt jedoch nicht die Angabe einer Dateisystemgröße und erstellt ein neues Dateisystem mit einer Standardgröße, unabhängig vom Wert, den Sie für storage: angeben.

      Beispiel: Die folgende Manifestdatei (mit dem Namen fss-dyn-claim.yaml) definiert einen PVC namens fss-dynamic-claim, der von dem Dateisystem bereitgestellt wird, das in der Speicherklasse fss-dyn-storage definiert ist:

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: fss-dynamic-claim
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: "fss-dyn-storage"
        resources:
          requests:
            storage: 50Gi
    2. Erstellen Sie PVC aus der Manifestdatei, indem Sie Folgendes eingeben:
      kubectl create -f <filename>
      Beispiel:
      kubectl create -f fss-dyn-claim.yaml

    Ein neues PVC entsteht. Das CSI-Volume-Plug-in erstellt ein neues persistentes Volume (PV) und ein neues Dateisystem im File Storage-Service (zusammen mit einem neuen Mountziel, wenn Sie kein vorhandenes Mountziel angegeben haben).

    Das neue PVC ist an das neue PV gebunden. Daten werden im Ruhezustand mit Verschlüsselungsschlüsseln verschlüsselt, die entweder von Oracle oder von Ihnen verwaltet werden.

  5. Prüfen Sie, ob der PVC an das neue Persistent Volume gebunden wurde, indem Sie Folgendes eingeben:
    kubectl get pvc

    Die Ausgabe des obigen Befehls bestätigt, dass der PVC erfolgreich gebunden wurde:

    			
    NAME                STATUS    VOLUME                 CAPACITY   ACCESSMODES   STORAGECLASS      AGE
    fss-dynamic-claim   Bound     csi-fss-<unique_ID>    50Gi       RWX           fss-dyn-storage   4m
  6. Verwenden Sie den neuen PVC beim Erstellen anderer Objekte, wie Pods. Beispiel: Sie können einen neuen Pod aus der folgenden Poddefinition erstellen:
    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. Nachdem Sie einen neuen Pod erstellt haben, wie im Beispiel im vorherigen Schritt beschrieben, können Sie prüfen, ob der Pod den neuen PVC verwendet, indem Sie Folgendes eingeben:

    kubectl describe pod nginx
Tipp

Wenn beim Erstellen von PVCs häufig neue PVs und neue Dateisysteme dynamisch erstellt werden müssen, können Sie angeben, dass die neu erstellte Speicherklasse als Standardspeicherklasse für das Provisioning neuer PVCs verwendet werden soll. Weitere Informationen finden Sie in der Kubernetes-Dokumentation.

In einem neuen Dateisystem gespeicherte Daten verschlüsseln

Der File Storage-Service verschlüsselt Daten im Ruhezustand immer mit von Oracle verwalteten Verschlüsselungsschlüsseln. Sie können jedoch Daten im Ruhezustand mit Ihren eigenen Masterverschlüsselungsschlüsseln, die Sie selbst im Vault-Service verwalten, verschlüsseln.

Je nachdem, wie Sie Daten im Ruhezustand verschlüsseln möchten, befolgen Sie die entsprechenden Anweisungen unten:

  • Um mit dem CSI-Volume-Plug-in dynamisch ein neues Dateisystem zu erstellen, das mit von Oracle verwalteten Verschlüsselungsschlüsseln ruhende Daten verschlüsselt, führen Sie die Schritte unter PVC auf einem neuen Dateisystem mit dem CSI-Volume-Plug-in bereitstellen aus, und nehmen Sie den Parameter kmsKeyOcid: <key-ocid> nicht in die Speicherklassendefinition auf. Daten werden im Ruhezustand mit von Oracle verwalteten Verschlüsselungsschlüsseln verschlüsselt.
  • Um mit dem CSI-Volume-Plug-in ein neues Dateisystem dynamisch zu erstellen, das Masterverschlüsselungsschlüssel verwendet, die Sie zur Verschlüsselung von Daten im Ruhezustand verwalten, führen Sie die Schritte unter Provisioning eines Dateisystems ausführen PVC in einem neuen Dateisystem mit dem CSI-Volume-Plug-in, nehmen Sie den Parameter kmsKeyOcid: <key-ocid> in die Speicherklassendefinition auf, und geben Sie die OCID des Masterverschlüsselungsschlüssels im Vault-Service an. Die Daten werden im Ruhezustand mit dem angegebenen Verschlüsselungsschlüssel verschlüsselt.

In einem neuen Dateisystem übertragene Daten verschlüsseln

Die Verschlüsselung während der Übertragung schützt Daten, die zwischen Instanzen und gemounteten Dateisystemen mit TLS 1.2-(Transport Layer Security-)Verschlüsselung übertragen werden. Weitere Informationen zur Verschlüsselung während der Übertragung und zum File Storage-Service finden Sie unter TLS-Verschlüsselung während der Übertragung verwenden.

Sie geben die Verschlüsselung während der Übertragung unabhängig von der Verschlüsselung im Ruhezustand an. Daten während der Übertragung werden mit einem TLS-Zertifikat verschlüsselt, das immer von Oracle verwaltet wird. Dabei spielt es keine Rolle, ob ruhende Daten mit von Oracle verwalteten Schlüsseln oder mit vom Benutzer verwalteten Schlüsseln verschlüsselt werden.

Beachten Sie, dass bei Verwendung des File Storage-Service zum Provisioning von PVCs die Verschlüsselung während der Übertragung nur unterstützt wird, wenn die Compute-Instanzen, die Worker-Knoten hosten, Oracle Linux 7 und Oracle Linux 8 ausführen.

So erstellen Sie mit dem CSI-Volume-Plug-in dynamisch ein neues Dateisystem mit Verschlüsselung während der Übertragung:

  1. Befolgen Sie die Anweisungen unter Verschlüsselung während der Übertragung für Linux einrichten, um die Verschlüsselung während der Übertragung im Dateisystem einzurichten. Genauer:
    1. Richten Sie die Voraussetzungen ein, indem Sie die folgenden Sicherheitsregeln in einer Netzwerksicherheitsgruppe (empfohlen) oder einer Sicherheitsliste für das Mountziel einrichten, das das Dateisystem exportiert:
      • Eine zustandsbehaftete Ingress-Regel, die TCP-Traffic zu einem Zielportbereich von 2051 entweder von allen Ports einer Quell-IP-Adresse oder eines CIDR-Blocks Ihrer Wahl oder von allen Quellen aus zulässt.
      • Eine zustandsbehaftete Egress-Regel, die TCP-Traffic von einem Quellportbereich von 2051 zu allen Ports einer Ziel-IP-Adresse oder eines CIDR-Blocks Ihrer Wahl oder zu allen Zielen zulässt.

      Weitere Informationen finden Sie unter Szenario C: Mountziel und Instanz verwenden TLS-Verschlüsselung während der Übertragung.

    2. Laden Sie das Package oci-fss-utils auf jeden Worker-Knoten herunter. Beachten Sie, dass Sie der Lizenzvereinbarung zustimmen müssen. Siehe Aufgabe 1: OCI-FSS-UTILS-Package herunterladen.
    3. Installieren Sie das Package oci-fss-utils auf jedem Worker-Knoten. Siehe Aufgabe 2: OCI-FSS-UTILS-Package unter Oracle Linux oder CentOS installieren.
  2. Befolgen Sie die Anweisungen unter PVC auf einem neuen Dateisystem mit dem CSI-Volume-Plug-in bereitstellen, und nehmen Sie den Parameter encryptInTransit: "true" in die Speicherklassendefinition auf. Daten werden bei der Übertragung mit einem von Oracle verwalteten Verschlüsselungsschlüssel verschlüsselt.

PVC in einem vorhandenen Dateisystem bereitstellen

So erstellen Sie einen PVC in einem vorhandenen Dateisystem im File Storage-Service (mit von Oracle verwalteten Verschlüsselungsschlüsseln zur Verschlüsselung von Data-at-Rest):

  1. Erstellen Sie ein Dateisystem mit einem Mountziel im File Storage-Service, und wählen Sie die Verschlüsselungsoption Mit von Oracle verwalteten Schlüsseln verschlüsseln aus. Siehe Dateisystem erstellen.
  2. Erstellen Sie Sicherheitsregeln entweder in einer Netzwerksicherheitsgruppe (empfohlen) oder in einer Sicherheitsliste für das Mountziel, das das Dateisystem exportiert, und für die Worker-Knoten des Clusters.
    Die zu erstellenden Sicherheitsregeln hängen von den relativen Netzwerkspeicherorten des Mountziels und der Worker-Knoten gemäß den folgenden Szenarios ab:

    Diese Szenarios, die zu erstellenden Sicherheitsregeln und die Stelle, an der sie erstellt werden sollen, werden in der Dokumentation zum File Storage-Service ausführlich beschrieben (siehe VCN-Sicherheitsregeln für File Storage konfigurieren).

  3. Erstellen Sie wie folgt eine vom Dateisystem im File Storage-Service unterstützte PV:
    1. Erstellen Sie eine Manifestdatei, um eine PV zu definieren, und legen Sie im Abschnitt csi: Folgendes fest:

      • driver bis fss.csi.oraclecloud.com
      • volumeHandle bis <FileSystemOCID>:<MountTargetIP>:<path>
        Hierbei gilt:
        • <FileSystemOCID> ist die OCID des im File Storage-Service definierten Dateisystems.
        • <MountTargetIP> ist die IP-Adresse, die dem Mountziel zugewiesen ist.
        • <path> ist der Mountpfad zum Dateisystem relativ zur IP-Adresse des Mountziels, beginnend mit einem Schrägstrich.
        Beispiel: ocid1.filesystem.oc1.iad.aaaa______j2xw:10.0.0.6:/FileSystem1

      Beispiel: Die folgende Manifestdatei (mit dem Namen fss-pv.yaml) definiert eine PV mit dem Namen fss-pv, die von einem Dateisystem im File Storage-Service gesichert wird:

      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. Erstellen Sie PV aus der Manifestdatei, indem Sie Folgendes eingeben:
      kubectl create -f <filename>

      Beispiel:

      kubectl create -f fss-pv.yaml
  4. Erstellen Sie wie folgt einen PVC, der von der von Ihnen erstellten PV bereitgestellt wird:
    1. Erstellen Sie eine Manifestdatei, um den PVC zu definieren und festzulegen:
      • storageClassName bis "". Beachten Sie, dass Sie einen leeren Wert für storageClassName angeben müssen, auch wenn die Speicherklasse beim statischen Provisioning des persistenten Speichers nicht anwendbar ist. Wenn Sie keinen leeren Wert für storageClassName angeben, wird die Standardspeicherklasse (oci-bv) verwendet, die einen Fehler verursacht.
      • volumeName für den Namen der erstellten PV (Beispiel: fss-pv)

      Beispiel: Die folgende Manifestdatei (mit dem Namen fss-pvc.yaml) definiert einen PVC namens fss-pvc, der von einem PV namens fss-pv bereitgestellt wird:

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

      Beachten Sie, dass das Element requests: storage: in der Manifestdatei des PVCs vorhanden sein muss und der Wert mit dem Wert übereinstimmen muss, der für das Element capacity: storage: in der Manifestdatei des PV angegeben ist. Ansonsten wird der Wert des Elements requests: storage: ignoriert.

    2. Erstellen Sie PVC aus der Manifestdatei, indem Sie Folgendes eingeben:
      kubectl create -f <filename>
      Beispiel:
      kubectl create -f fss-pvc.yaml

Das PVC ist an das PV gebunden, das vom File Storage Service-Dateisystem gesichert wird. Die Daten werden im Ruhezustand mit von Oracle verwalteten Verschlüsselungsschlüsseln verschlüsselt.

In einem vorhandenen Dateisystem gespeicherte Daten verschlüsseln

Der File Storage-Service verschlüsselt Daten im Ruhezustand immer mit von Oracle verwalteten Verschlüsselungsschlüsseln. Sie können jedoch Dateisysteme mit Ihren eigenen Masterverschlüsselungsschlüsseln verschlüsseln, die Sie selbst im Vault-Service verwalten.

Je nachdem, wie Sie Daten im Ruhezustand verschlüsseln möchten, befolgen Sie die entsprechenden Anweisungen unten:

  • Um einen PVC in einem Dateisystem mit von Oracle verwalteten Verschlüsselungsschlüsseln zur Verschlüsselung von Daten im Ruhezustand zu erstellen, führen Sie die Schritte unter PVC in einem vorhandenen Dateisystem bereitstellen aus, und wählen Sie die Verschlüsselungsoption Mit von Oracle verwalteten Schlüsseln verschlüsseln aus, wie beschrieben. Daten werden im Ruhezustand mit von Oracle verwalteten Verschlüsselungsschlüsseln verschlüsselt.
  • Um ein PVC in einem Dateisystem mit Masterverschlüsselungsschlüsseln zu erstellen, die Sie zum Verschlüsseln von Daten im Ruhezustand verwalten, führen Sie die Schritte unter PVC in einem vorhandenen Dateisystem bereitstellen aus, wählen Sie jedoch die Verschlüsselungsoption Mit vom Kunden verwalteten Schlüsseln verschlüsseln aus, und geben Sie den Masterverschlüsselungsschlüssel im Vault-Service an. Die Daten werden im Ruhezustand mit dem angegebenen Verschlüsselungsschlüssel verschlüsselt.

In einem vorhandenen Dateisystem übertragene Daten verschlüsseln

Die Verschlüsselung während der Übertragung schützt Daten, die zwischen Instanzen und gemounteten Dateisystemen mit TLS v.1.2-(Transport Layer Security-)Verschlüsselung übertragen werden. Weitere Informationen zur Verschlüsselung während der Übertragung und zum File Storage-Service finden Sie unter TLS-Verschlüsselung während der Übertragung verwenden.

Sie geben die Verschlüsselung während der Übertragung unabhängig von der Verschlüsselung im Ruhezustand an. Daten während der Übertragung werden mit einem TLS-Zertifikat verschlüsselt, das immer von Oracle verwaltet wird. Dabei spielt es keine Rolle, ob ruhende Daten mit von Oracle verwalteten Schlüsseln oder mit vom Benutzer verwalteten Schlüsseln verschlüsselt werden.

Beachten Sie, dass bei Verwendung des File Storage-Service zum Provisioning von PVCs die Verschlüsselung während der Übertragung nur unterstützt wird, wenn die Compute-Instanzen, die Worker-Knoten hosten, Oracle Linux 7 und Oracle Linux 8 ausführen.

So erstellen Sie einen PVC in einem Dateisystem, in dem Daten während der Übertragung verschlüsselt werden:

  1. Befolgen Sie die Anweisungen unter Verschlüsselung während der Übertragung für Linux einrichten, um die Verschlüsselung während der Übertragung im Dateisystem einzurichten. Genauer:
    1. Richten Sie die Voraussetzungen ein, indem Sie die folgenden Sicherheitsregeln in einer Netzwerksicherheitsgruppe (empfohlen) oder einer Sicherheitsliste für das Mountziel einrichten, das das Dateisystem exportiert:
      • Eine zustandsbehaftete Ingress-Regel, die TCP-Traffic zu einem Zielportbereich von 2051 entweder von allen Ports einer Quell-IP-Adresse oder eines CIDR-Blocks Ihrer Wahl oder von allen Quellen aus zulässt.
      • Eine zustandsbehaftete Egress-Regel, die TCP-Traffic von einem Quellportbereich von 2051 zu allen Ports einer Ziel-IP-Adresse oder eines CIDR-Blocks Ihrer Wahl oder zu allen Zielen zulässt.

      Weitere Informationen finden Sie unter Szenario C: Mountziel und Instanz verwenden TLS in -transit-Verschlüsselung.

    2. Laden Sie das Package oci-fss-utils auf jeden Worker-Knoten herunter. Beachten Sie, dass Sie der Lizenzvereinbarung zustimmen müssen. Siehe Aufgabe 1: OCI-FSS-UTILS-Package herunterladen.
    3. Installieren Sie das Package oci-fss-utils auf jedem Worker-Knoten. Siehe Aufgabe 2: OCI-FSS-UTILS-Package unter Oracle Linux oder CentOS installieren.
  2. Befolgen Sie die Anweisungen unter PVC in einem vorhandenen Dateisystem bereitstellen, und wählen Sie entweder die Option Mit von Oracle verwalteten Schlüsseln verschlüsseln oder die Option Mit vom Kunden verwalteten Schlüsseln verschlüsseln aus, wie für die Datenverschlüsselung im Ruhezustand erforderlich. Wenn Sie jedoch die Manifestdatei zur Definition eines PV erstellen, setzen Sie encryptInTransit im Abschnitt csi der Datei auf "true". Beispiel:

    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"

Fehler beim File Storage Service Provisioning von PVCs beheben

Pod kann aufgrund unzureichender Berechtigungen nicht auf das Dateisystem zugreifen

Beschreibung

Wenn ein Pod versucht, auf ein persistentes Volume (PV) zuzugreifen, das von einem Dateisystem im File Storage-Service gesichert wird, schlägt der Versuch möglicherweise mit der Meldung "Berechtigung abgelehnt" fehl.

Ursache

Wenn Sie ein PV definieren, das von einem Dateisystem im File Storage-Service gesichert wird, setzen Sie das Attribut accessModes des PV auf ReadWriteMany, und Sie müssen keinen Wert für das Attribut fsType des PV angeben.

Das CSI-Volume-Plug-in wird als CSIDriver-Objekt implementiert. Mit dem Attribut fsGroupPolicy des Objekts CSIDriver können Sie steuern, ob CSIDriver den Eigentümer und die Berechtigungen eines Volumes so ändert, dass sie mit dem Attribut fsGroup übereinstimmen, das in securityContext eines Pod-Mounters für das Volume angegeben ist. Wenn Sie den Eigentümer und die Berechtigungen des Volumes ändern, kann der Pod nach dem Mounten auf das Volume zugreifen.

Standardmäßig ist das fsGroupPolicy-Attribut des CSIDriver-Objekts auf ReadWriteOnceWithFSType gesetzt. Dies gibt an, dass CSIDriver die PV-Definition prüfen soll, um zu bestimmen, ob die Volume-Eigentümerschaft und -Berechtigungen so geändert werden sollen, dass sie mit dem fsGroup-Attribut des Pods übereinstimmen:

  • Wenn das Attribut fsType des PV festgelegt ist, ändert CSIDriver den Eigentümer und die Berechtigungen des Volumes so, dass sie mit dem Attribut fsGroup übereinstimmen, das im securityContext des Pods angegeben ist. Dadurch kann der Pod auf das Volume zugreifen.
  • Wenn das Attribut fsType des PV nicht festgelegt ist, ändert CSIDriver die Eigentümerrechte und Berechtigungen des Volumes nicht. Auf das Volume können nur Prozesse zugreifen, die als Root ausgeführt werden. Infolgedessen erhält ein Pod, der nicht als Root ausgeführt wird, die Meldung "Berechtigung verweigert", wenn versucht wird, auf ein Verzeichnis oder eine Datei im gemounteten Volume zuzugreifen.

So prüfen Sie, ob ein Pod die Meldung "Berechtigung abgelehnt" erhält, weil das Attribut fsGroupPolicy des Objekts CSIDriver auf ReadWriteOnceWithFSType gesetzt ist und das Attribut fsType des PV nicht festgelegt ist. Führen Sie einen Befehl auf dem Pod aus, um eine Datei in ein Verzeichnis auf dem gemounteten Volume zu schreiben, und prüfen Sie dann die Eigenschaften der Datei, um zu prüfen, ob der Gruppeneigentümer mit dem in securityContext des Pods angegebenen Attribut fsGroup übereinstimmt. Beispiel: Angenommen, ein Pod hat das folgende Manifest:

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. Führen Sie einen Befehl auf dem Pod aus, um eine Datei in ein Verzeichnis auf dem gemounteten Volume zu schreiben. Beispiel: Geben Sie Folgendes ein:
    kubectl exec -it security-context-demo -- sh -c "cd /data/demo && echo hello > testfile"
  2. Prüfen Sie die Eigenschaften der neu erstellten Datei, um die Zugriffsrechte zu bestätigen. Beispiel: Geben Sie Folgendes ein:
    kubectl exec -it security-context-demo -- sh -c "ls -l /data/demo/testfile"

    Im Idealfall zeigt die Ausgabe an, dass der Gruppeneigentümer der Datei mit demjenigen identisch ist, der durch das Attribut fsGroup des Pods angegeben wird. Dadurch erhält der Pod Zugriff auf die Datei. Beispiel:

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

    Wenn das Attribut fsGroupPolicy des Objekts CSIDriver jedoch auf ReadWriteOnceWithFSType gesetzt ist und das Attribut fsType des PV nicht festgelegt ist, wird in der Ausgabe der Gruppeneigentümer der Datei als Root angezeigt, und der Pod hat keinen Zugriff auf die Datei. Beispiel:

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

Weitere Informationen hierzu finden Sie unter CSI Volume fsGroup Policy in der Kubernetes-Dokumentation.

Maßnahme

Wenn Sie die Gruppen-ID des Volume-Eigentümers der Dateien kennen, auf die der Pod zugreift, und die Gruppen-ID des Volume-Eigentümers nicht root (0) ist, wird empfohlen, in der Podspezifikation securityContext eine zusätzliche Gruppe anzugeben. Beispiel: Wenn die Benutzer-ID des Volume-Eigentümers 0 (root) lautet und die Gruppen-ID des Volume-Eigentümers 1000 lautet, geben Sie 1000 als zusätzliche Gruppe in der securityContext des Pods wie folgt an:


spec:
  securityContext:
    supplementalGroups: [1000]

Wenn Sie die Gruppen-ID des Volume-Eigentümers nicht als zusätzliche Gruppe in securityContext des Pods zuweisen können, schlagen wir zwei alternative Lösungen vor:

  • Alternative Lösung 1: Aktivieren Sie das Objekt CSIDriver, um die Volume-Eigentümerschaft und -Berechtigungen so zu ändern, dass sie mit dem im Pod securityContext angegebenen Attribut fsGroup übereinstimmen.
  • Alternative Lösung 2: Verwenden Sie die Squash-Exportoptionen des Dateisystems, damit Pods auf Dateien und Verzeichnisse im Volume zugreifen können, ohne die Volume-Eigentümerschaft zu ändern.

Bevor Sie sich für eine Lösung entscheiden, sollten Sie die für jede Lösung beschriebenen Vor- und Nachteile berücksichtigen.

Alternative Lösung 1: Aktivieren Sie das Objekt CSIDriver, um die Volume-Eigentümerschaft und -Berechtigungen so zu ändern, dass sie mit dem im Pod securityContext angegebenen Attribut fsGroup übereinstimmen

Damit das Objekt CSIDriver die Volume-Eigentümerschaft und -Berechtigungen so ändern kann, dass es mit dem im Pod securityContext angegebenen Attribut fsGroup übereinstimmt, setzen Sie das Attribut fsGroupPolicy des Objekts CSIDriver wie folgt auf File:

  1. Rufen Sie die Konfigurationsdatei CSIDriver ab, indem Sie Folgendes eingeben:
    kubectl get csiDriver fss.csi.oraclecloud.com -oyaml > fss_csi_driver.yaml
  2. Bearbeiten Sie in einem Texteditor die Datei fss_csi_driver.yaml, und ändern Sie das Attribut fsGroupPolicy des Objekts CSIDriver von ReadWriteOnceWithFSType in File.

    Ändern Sie zum Beispiel:

    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 

    in:

    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 

    Ändern Sie nur den Wert von fsGroupPolicy. Ändern Sie keinen anderen Wert.

  3. Speichern und schließen Sie die Datei fss_csi_driver.yaml.
  4. Löschen Sie das vorhandene CSIDriver-Objekt, indem Sie Folgendes eingeben:
    kubectl delete csiDriver fss.csi.oraclecloud.com
  5. Erstellen Sie das neue CSIDriver-Objekt, indem Sie Folgendes eingeben:
    kubectl apply -f fss_csi_driver.yaml 
  6. Starten Sie den Pod neu, der auf die Meldung "Berechtigung abgelehnt" gestoßen ist.

Vor der Auswahl dieser Lösung zu berücksichtigende Aspekte:

  • Wenn Sie ein großes Volume mit vielen verschachtelten Dateien und Verzeichnissen mounten, kann es vorkommen, dass das Mounten des Volumes lange dauert. Wenn fsGroupPolicy auf File gesetzt ist, ändert Kubernetes rekursiv die Volume-Eigentümerschaft aller verschachtelten Dateien und Verzeichnisse, indem es chown() und chmod() aufruft. Um die Latenz beim Mounten des Volumes zu reduzieren, setzen Sie das Attribut fsGroupChangePolicy wie folgt auf "OnRootMismatch" im Pod securityContext:
    securityContext:
      fsGroup: <sample-fsGroup>
      fsGroupChangePolicy: "OnRootMismatch"

    Wenn Sie fsGroupChangePolicy auf "OnRootMismatch" setzen, wird die Latenz beim Mounten von Volumes verringert, da Kubernetes die Volume-Eigentümerschaft nur in Fällen ändert, in denen die Dateiberechtigungen auf Root-Ebene nicht mit der Einstellung fsGroup des Pods übereinstimmen.

  • Die Gruppen-IDs, die Sie als Werte von fsGroup für alle Pods angeben, die auf ein Volume zugreifen, werden als zusätzliche Gruppeneigentümer des Volumes hinzugefügt. Daher ist der Zugriff auf dieses Volume auf die Gruppen-IDs beschränkt, die Sie als Werte von fsGroup angegeben haben.

    Beispiel: Wenn Sie zwei Pods mit unterschiedlichen fsGroup-Werten erstellen, die beide dasselbe Volume mounten, ist die Gruppen-ID, die Sie für fsGroup des zweiten Pods angeben, die Gruppe des Volume-Eigentümers, und der erste Pod hat weiterhin Zugriff auf das Volume.

  • Wenn Kubernetes eine Nichtübereinstimmung der Eigentümerschaft zwischen dem Volume-Eigentümer und der in der Podspezifikation definierten fsGroup erkennt, ändert Kubernetes die Volume-Eigentümerschaft aller Dateien. Wenn das Volume viele verschachtelte Dateien und Verzeichnisse enthält, dauert das Mounten des Volumes möglicherweise lange.

Alternative Lösung 2: Verwenden Sie die Squash-Exportoptionen des Dateisystems, damit Pods auf Dateien und Verzeichnisse in einem Volume zugreifen können, ohne die Volume-Eigentümerschaft zu ändern.

Achtung

Bei dieser Lösung müssen Sie die Exportoption Squash des Dateisystems auf Alle setzen. Wenn Sie Squash auf Alle setzen, wird allen Prozessen, die auf dem Knoten ausgeführt werden, auf dem das Volume gemountet ist (einschließlich anderer Pods), uneingeschränkter Dateisystemzugriff erteilt. Bevor Sie sich für diese Lösung entscheiden, überprüfen Sie daher die Einhaltung Ihrer Sicherheitsanforderungen.

Sie können Pods den Zugriff auf Dateien und Verzeichnisse in einem Volume ermöglichen, ohne die Volume-Eigentümerschaft zu ändern, indem Sie die Squash-Exportoptionen des Dateisystems festlegen. Die Squash-Exportoptionen bestimmen, ob die Benutzer-ID (UID) und Gruppen-ID (GID) der Quellclients, die auf das Dateisystem zugreifen, der Squash-UID und Squash-GID neu zugeordnet werden. Weitere Informationen finden Sie unter NFS-Exportoptionen.

Wenn Sie diese Lösung verwenden möchten, ändern Sie das Attribut fsGroupPolicy des Objekts CSIDriver nicht in File.

So legen Sie beim Provisioning eines PVCs in einem vorhandenen Dateisystem Squash-Exportoptionen fest:

  1. Öffnen Sie das Navigationsmenü , und wählen Sie Speicher aus. Wählen Sie unter File Storage die Option Dateisysteme aus.
  2. Wählen Sie im Abschnitt Listengeltungsbereich unter Compartment ein Compartment aus. Alle Dateisystemen im ausgewählten Compartment werden angezeigt.
  3. Klicken Sie auf den Namen des Dateisystems, für das Sie Exportoptionen festlegen möchten.
  4. Klicken Sie auf der Detailseite des Dateisystems unter Ressourcen auf Exporte.
  5. Klicken Sie in der Liste Exporte auf den Namen des Exports, für den Sie Optionen festlegen möchten.
  6. Klicken Sie auf der Detailseite des Exports unter Exportoptionen für NFS-Client auf Optionen bearbeiten.
  7. Aktualisieren Sie im Bereich Optionen bearbeiten die Exportoptionen für Squash wie folgt:

    • Squash: Wechseln Sie zu Alle.
    • Squash-UID: Wechseln Sie zur UID des Volume-Eigentümers oder zur Root-UID (0).
    • Squash-GUID: Wechseln Sie zur GID des Volume-Eigentümers oder zur Root-GID (0).

    Weitere Informationen finden Sie unter NFS-Exportoptionen.

  8. Klicken Sie auf Aktualisieren.

So legen Sie beim Provisioning eines PVCs in einem neuen Dateisystem Squash-Exportoptionen fest:

  1. Befolgen Sie die Anweisungen unter PVC in einem neuen Dateisystem mit dem CSI-Volume-Plug-in bereitstellen. Wenn Sie jedoch die Manifestdatei für die Speicherklasse erstellen, die den fss.csi.oraclecloud.com-Provisioner verwendet, legen Sie den Parameter exportOptions so fest, dass Werte für die Squash-Exportoptionen wie folgt angegeben werden:
    exportOptions: "[\"identitySquash\":\"ALL\",\"anonymous-uid\":\"0\",\"anonymous-gid\":\"0\"]"

    Beispiel:

    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. Erstellen Sie die Speicherklasse aus der Manifestdatei, indem Sie Folgendes eingeben:
    kubectl create -f <filename>
    Beispiel:
    kubectl create -f fss-dyn-st-class.yaml
  3. Befolgen Sie die restlichen Anweisungen unter PVC in einem neuen Dateisystem mit dem CSI-Volume-Plug-in bereitstellen, um Sicherheitsregeln zu erstellen und das PVC zu erstellen.

    Das CSI-Volume-Plug-in erstellt ein neues persistentes Volume (PV) und ein neues Dateisystem im File Storage-Service. Das neue Dateisystem verfügt über die Squash-Exportoptionen, die Sie in der Speicherklasse angegeben haben.

Vor der Auswahl dieser Lösung zu berücksichtigende Aspekte:

  • Wenn Sie Squash auf Alle setzen, wird allen Prozessen, die auf dem Knoten ausgeführt werden, auf dem das Volume gemountet ist (einschließlich anderer Pods), uneingeschränkter Dateisystemzugriff erteilt. Bevor Sie sich für diese Lösung entscheiden, überprüfen Sie daher die Einhaltung Ihrer Sicherheitsanforderungen.
  • Im Gegensatz zu Alternative Lösung 1 ändert sich die Eigentümerschaft eines Volumes nicht, wenn das Volume von einem neuen Pod gemountet wird, für den das Attribut fsGroup auf eine andere Gruppe gesetzt ist.
  • Im Gegensatz zu Alternative Lösung 1 gibt es keine Latenz beim Mounten eines großen Volumes mit vielen verschachtelten Dateien und Verzeichnissen, da Kubernetes das Volume-Eigentum an den verschachtelten Dateien und Verzeichnissen nicht rekursiv ändert.
  • Im Gegensatz zu Alternative Lösung 1 bearbeiten Sie die Datei fss_csi_driver.yaml nicht und ändern das Attribut fsGroupPolicy des Objekts CSIDriver nicht in File. Stattdessen stellt der Standardattributwert fsGroupPolicy: ReadWriteOnceWithFSType sicher, dass das Objekt CSIDriver Features verwendet, die vom File Storage-Service bereitgestellt werden.