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:
- ein neues Dateisystem, das dynamisch vom CSI-Volume-Plug-in erstellt wird (siehe Data At Rest auf einem neuen Dateisystem verschlüsseln)
- ein vorhandenes Dateisystem, das Sie manuell erstellt haben (siehe Data At Rest auf einem vorhandenen Dateisystem verschlüsseln)
Wenn Sie Ihre eigenen Masterverschlüsselungsschlüssel verwalten möchten, um Daten im Ruhezustand zu verschlüsseln, müssen Sie:
- Erstellen Sie einen geeigneten Master-Verschlüsselungsschlüssel in Vault (oder rufen Sie die OCID eines solchen Schlüssels ab). Siehe Schlüssel verwalten.
- Erstellen Sie eine Policy, die Zugriff auf den Masterverschlüsselungsschlüssel erteilt. Siehe Policy zum Zugriff auf benutzerverwaltete Verschlüsselungsschlüssel zum Verschlüsseln von Boot-Volumes, Block-Volumes und/oder Dateisystemen erstellen.
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:
- ein neues Dateisystem, das dynamisch vom CSI-Volume-Plug-in erstellt wird (siehe In Transit befindliche Daten in einem neuen Dateisystem verschlüsseln)
- ein vorhandenes Dateisystem, das Sie manuell erstellt haben (siehe In Transit befindliche Daten in einem vorhandenen Dateisystem verschlüsseln)
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
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'
- Eine Policy zum Erstellen und/oder Verwalten von Dateisystemen, Mountzielen und Exportpfaden. Beispiel:
-
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:
- (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.
- Definieren Sie eine neue Speicherklasse, die den Provisioning-Vorgang
fss.csi.oraclecloud.com
verwendet:- 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-Befehloci 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 entwedermountTargetOcid
odermountTargetSubnetOcid
an. Wenn Sie in der Speicherklassendefinition sowohlmountTargetOcid
als auchmountTargetSubnetOcid
angeben, wird das mitmountTargetOcid
angegebene vorhandene Mountziel verwendet, undmountTargetSubnetOcid
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 alsoexportPath: <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"
- Erstellen Sie die Speicherklasse aus der Manifestdatei, indem Sie Folgendes eingeben:
kubectl create -f <filename>
Beispiel:kubectl create -f fss-dyn-st-class.yaml
- 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:
-
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).
- Erstellen Sie wie folgt ein PVC, das vom neuen Dateisystem im File Storage-Service bereitgestellt werden soll:
- 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, dassaccessModes:
ReadWriteMany
angeben muss.storage: 50Gi
: Erforderlich. Beachten Sie, dass Sie in Kubernetes einen Wert fürstorage:
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ürstorage:
angeben.
Beispiel: Die folgende Manifestdatei (mit dem Namen
fss-dyn-claim.yaml
) definiert einen PVC namensfss-dynamic-claim
, der von dem Dateisystem bereitgestellt wird, das in der Speicherklassefss-dyn-storage
definiert ist:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fss-dynamic-claim spec: accessModes: - ReadWriteMany storageClassName: "fss-dyn-storage" resources: requests: storage: 50Gi
- 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.
- Erstellen Sie eine Manifestdatei, um den PVC zu definieren:
- 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
- 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
-
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
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:
- 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:
- 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.
- 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. - Installieren Sie das Package
oci-fss-utils
auf jedem Worker-Knoten. Siehe Aufgabe 2: OCI-FSS-UTILS-Package unter Oracle Linux oder CentOS installieren.
- 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:
-
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):
- 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.
- 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).
- Erstellen Sie wie folgt eine vom Dateisystem im File Storage-Service unterstützte PV:
-
Erstellen Sie eine Manifestdatei, um eine PV zu definieren, und legen Sie im Abschnitt
csi:
Folgendes fest:driver
bisfss.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.
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
- Erstellen Sie PV aus der Manifestdatei, indem Sie Folgendes eingeben:
kubectl create -f <filename>
Beispiel:
kubectl create -f fss-pv.yaml
-
- Erstellen Sie wie folgt einen PVC, der von der von Ihnen erstellten PV bereitgestellt wird:
- Erstellen Sie eine Manifestdatei, um den PVC zu definieren und festzulegen:
storageClassName
bis""
. Beachten Sie, dass Sie einen leeren Wert fürstorageClassName
angeben müssen, auch wenn die Speicherklasse beim statischen Provisioning des persistenten Speichers nicht anwendbar ist. Wenn Sie keinen leeren Wert fürstorageClassName
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 namensfss-pvc
, der von einem PV namensfss-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 Elementcapacity: storage:
in der Manifestdatei des PV angegeben ist. Ansonsten wird der Wert des Elementsrequests: storage:
ignoriert. - Erstellen Sie PVC aus der Manifestdatei, indem Sie Folgendes eingeben:
kubectl create -f <filename>
Beispiel:kubectl create -f fss-pvc.yaml
- Erstellen Sie eine Manifestdatei, um den PVC zu definieren und festzulegen:
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:
- 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:
- 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.
- 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. - Installieren Sie das Package
oci-fss-utils
auf jedem Worker-Knoten. Siehe Aufgabe 2: OCI-FSS-UTILS-Package unter Oracle Linux oder CentOS installieren.
- 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:
-
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 Abschnittcsi
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 AttributfsGroup
übereinstimmen, das imsecurityContext
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
- 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"
- 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 aufReadWriteOnceWithFSType
gesetzt ist und das AttributfsType
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 AttributfsGroup
ü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
:
- Rufen Sie die Konfigurationsdatei CSIDriver ab, indem Sie Folgendes eingeben:
kubectl get csiDriver fss.csi.oraclecloud.com -oyaml > fss_csi_driver.yaml
- Bearbeiten Sie in einem Texteditor die Datei fss_csi_driver.yaml, und ändern Sie das Attribut
fsGroupPolicy
des Objekts CSIDriver vonReadWriteOnceWithFSType
inFile
.Ä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. - Speichern und schließen Sie die Datei fss_csi_driver.yaml.
- Löschen Sie das vorhandene CSIDriver-Objekt, indem Sie Folgendes eingeben:
kubectl delete csiDriver fss.csi.oraclecloud.com
- Erstellen Sie das neue CSIDriver-Objekt, indem Sie Folgendes eingeben:
kubectl apply -f fss_csi_driver.yaml
- 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
aufFile
gesetzt ist, ändert Kubernetes rekursiv die Volume-Eigentümerschaft aller verschachtelten Dateien und Verzeichnisse, indem eschown()
undchmod()
aufruft. Um die Latenz beim Mounten des Volumes zu reduzieren, setzen Sie das AttributfsGroupChangePolicy
wie folgt auf"OnRootMismatch"
im PodsecurityContext
: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 EinstellungfsGroup
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 vonfsGroup
angegeben haben.Beispiel: Wenn Sie zwei Pods mit unterschiedlichen
fsGroup
-Werten erstellen, die beide dasselbe Volume mounten, ist die Gruppen-ID, die Sie fürfsGroup
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.
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:
- Öffnen Sie das Navigationsmenü , und wählen Sie Speicher aus. Wählen Sie unter File Storage die Option Dateisysteme aus.
- Wählen Sie im Abschnitt Listengeltungsbereich unter Compartment ein Compartment aus. Alle Dateisystemen im ausgewählten Compartment werden angezeigt.
- Klicken Sie auf den Namen des Dateisystems, für das Sie Exportoptionen festlegen möchten.
- Klicken Sie auf der Detailseite des Dateisystems unter Ressourcen auf Exporte.
- Klicken Sie in der Liste Exporte auf den Namen des Exports, für den Sie Optionen festlegen möchten.
- Klicken Sie auf der Detailseite des Exports unter Exportoptionen für NFS-Client auf Optionen bearbeiten.
-
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.
- Klicken Sie auf Aktualisieren.
So legen Sie beim Provisioning eines PVCs in einem neuen Dateisystem Squash-Exportoptionen fest:
- 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 ParameterexportOptions
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"
- Erstellen Sie die Speicherklasse aus der Manifestdatei, indem Sie Folgendes eingeben:
kubectl create -f <filename>
Beispiel:kubectl create -f fss-dyn-st-class.yaml
- 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 inFile
. Stattdessen stellt der StandardattributwertfsGroupPolicy: ReadWriteOnceWithFSType
sicher, dass das Objekt CSIDriver Features verwendet, die vom File Storage-Service bereitgestellt werden.