ファイル・ストレージ・サービスでのPVCのプロビジョニング
File Storageサービスからファイル・システムをマウントして、Kubernetes Engine (OKE)を使用して作成したクラスタに対して永続ボリューム・クレームをプロビジョニングする方法をご紹介します。
Oracle Cloud Infrastructure File Storageサービスは、永続的でスケーラブルな分散型のエンタープライズ規模のネットワーク・ファイル・システムを提供します。CSIボリューム・プラグインを使用して、クラスタをファイル・ストレージ・サービスのファイル・システムに接続します。
File Storageサービスを使用すると、次の2つの方法で永続ボリューム要求(PVC)をプロビジョニングできます。
- 新しいストレージ・クラスを定義および作成し(オプションで既存のマウント・ターゲットのOCIDを指定)、ストレージ・クラスに基づいて新しいPVCを定義および作成します。PVCを作成すると、CSIボリューム・プラグインによって、新しいファイル・ストレージ・サービス・ファイル・システムと、新しいファイル・システムによってバックアップされた新しい永続ボリュームの両方が動的に作成されます。「CSIボリューム・プラグインを使用した新しいファイル・システムでのPVCのプロビジョニング」を参照してください。
- ファイル・ストレージ・サービスでファイル・システムとマウント・ターゲットを手動で作成し、新しいファイル・システムでバックアップされたPVを定義して作成し、最後に新しいPVCを定義します。PVCを作成すると、KubernetesエンジンはPVCをファイル・ストレージ・サービスによって支援されるPVにバインドします。既存のファイル・システムでのPVCのプロビジョニングを参照してください。
次の点に注意してください:
- CSIボリューム・プラグインを使用して新しいファイル・システムを動的に作成する場合は、CSIボリューム・プラグインによって作成される新しい永続ボリュームのプロパティを手動で更新しないでください。
- CSIボリューム・プラグインによって動的に作成されるファイル・ストレージ・サービスのファイル・システム、マウント・ターゲットおよびエクスポートには、
csi-fss-
で始まる名前が付けられます。 - CSIボリューム・プラグインによって動的に作成されたファイル・ストレージ・サービスのファイル・システム、マウント・ターゲットおよびエクスポートは、コンソールに表示されます。ただし、動的に作成されるこれらのリソースの変更にコンソール(またはOracle Cloud Infrastructure CLIまたはAPI)を使用しないでください。CSIボリューム・プラグインによって動的に作成されたOracle Cloud Infrastructureリソースに加えられた変更は、Kubernetesオブジェクトと照合されません。
- CSIボリュームプラグインによって作成されたファイルシステムによってバックアップされたPVにバインドされたPVCを削除すると、CSIボリュームプラグインはファイルシステムとそれが作成したPVを削除します。CSIボリューム・プラグインで新しいマウント・ターゲットも作成した場合(ストレージ・クラス定義で既存のマウント・ターゲットのOCIDを指定しなかったため)、CSIボリューム・プラグインもマウント・ターゲットを削除します。既存のマウント・ターゲットのOCIDを指定した場合、CSIボリューム・プラグインはマウント・ターゲットを削除しないことに注意してください。
- CSIボリューム・プラグインによって動的に作成された新しいファイル・システムでのPVCのプロビジョニングは、クラスタがKubernetes 1.22以降を実行している場合に使用できます。「CSIボリューム・プラグインを使用した新しいファイル・システムでのPVCのプロビジョニング」を参照してください。
- 既存のファイル・システムによってバックアップされたPVにバインドしてPVCをプロビジョニングすることは、クラスタがKubernetes 1.18以降を実行している場合に使用できます。既存のファイル・システムでのPVCのプロビジョニングを参照してください。
File Storageサービスでの保存中のデータおよび転送中のデータの暗号化
File Storageサービスを使用してPVCをプロビジョニングする場合、保存中の暗号化とは無関係に、転送中暗号化を指定します。
File Storageサービスは、デフォルトでOracle管理暗号化キーを使用して、保存時に常にデータを暗号化します。ただし、Vaultサービスで自分を管理している独自のマスター暗号化キーを使用して保存中の暗号化を指定するオプションがあります。保存時の暗号化を指定する方法は、PVCをプロビジョニングするかどうかによって異なります。
- CSIボリューム・プラグインによって動的に作成される新しいファイル・システム(新しいファイル・システムでの保存データの暗号化を参照)
- 手動で作成した既存のファイル・システム(既存のファイル・システムでの保存データの暗号化を参照)
保存データを暗号化するために独自のマスター暗号化キーを管理する場合は、次のことを行う必要があります。
- Vaultで適切なマスター暗号化キーを作成します(または、そのようなキーのOCIDを取得します)。キーの管理を参照してください。
- マスター暗号化キーへのアクセス権を付与するポリシーを作成します。ブート・ボリューム、ブロック・ボリュームまたはファイル・システム(あるいはその両方)を暗号化するためのユーザー管理暗号化キーにアクセスするポリシーの作成を参照してください。
File Storageサービスは、オプションで転送中のデータを暗号化できます。転送中暗号化を指定すると、保存中のデータがOracle管理キーを使用して暗号化されるか、ユーザー管理キーを使用して暗号化されるかに関係なく、転送中のデータは常にOracle管理であるTLS (Transport Layer Security)証明書を使用して暗号化されます。転送中暗号化は、TLS v. 1.2暗号化を使用して、インスタンスとマウントされたファイル・システム間で転送されるデータを保護します。転送中暗号化およびファイル・ストレージ・サービスの詳細は、転送中TLS暗号化の使用を参照してください。転送中暗号化の指定方法は、PVCをプロビジョニングするかどうかによって異なります。
- CSIボリューム・プラグインによって動的に作成される新しいファイル・システム(新しいファイル・システムでの転送中のデータの暗号化を参照)
- 手動で作成した既存のファイル・システム(既存のファイル・システムでの転送中のデータの暗号化を参照)
File Storageサービスを使用してPVCをプロビジョニングする場合、転送中暗号化は、ワーカー・ノードをホストしているコンピュート・インスタンスがOracle Linux 7およびOracle Linux 8を実行している場合にのみサポートされます。
CSIボリューム・プラグインを使用した新しいファイル・システムでのPVCのプロビジョニング
CSIボリューム・プラグインによって動的に作成された新しいファイル・システムにPVCをプロビジョニングする場合、次の前提条件が適用されます:
- CSIボリューム・プラグインによって動的に作成される新しいファイル・システムにPVCをプロビジョニングするには、クラスタでKubernetes 1.22以降が実行されている必要があります。
-
CSIボリューム・プラグインがファイル・ストレージ・リソースを作成および管理できるようにするには、適切なIAMポリシーが存在する必要があります。詳細は次のとおりです:
- ファイル・システム、マウント・ターゲットおよびエクスポート・パスを作成および管理するポリシー。例:
ALLOW any-user to manage file-family in compartment <compartment-name> where request.principal.type = 'cluster'
- VNIC、プライベートIP、プライベートDNSゾーンおよびサブネットを使用するポリシー。例:
ALLOW any-user to use virtual-network-family in compartment <compartment-name> where request.principal.type = 'cluster'
- ファイル・システム、マウント・ターゲットおよびエクスポート・パスを作成および管理するポリシー。例:
-
ノード・プール、ワーカー・ノード・サブネット、ファイル・システムまたはマウント・ターゲットが属するコンパートメントがクラスタが属するコンパートメントと異なる場合、CSIボリューム・プラグインが適切な場所にアクセスできるようにするには、IAMポリシーが存在する必要があります。例:
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'
-
Vaultサービスから特定のユーザー管理マスター暗号化キーを指定してファイル・システムのデータを暗号化するには、CSIボリューム・プラグインがそのマスター暗号化キーにアクセスできるように、適切なIAMポリシーが存在する必要があります。ブート・ボリューム、ブロック・ボリュームまたはファイル・システム(あるいはその両方)を暗号化するためのユーザー管理暗号化キーにアクセスするポリシーの作成を参照してください。
ファイル・ストレージ・サービスのCSIボリューム・プラグインによって動的に作成された新しいファイル・システムにPVCを動的にプロビジョニングするには:
- (オプション)ファイル・ストレージ・サービスにマウント・ターゲットを作成します。マウント・ターゲットの作成を参照してください。
CSIボリューム・プラグインでは、新しいファイル・システムを作成するには、アクティブなマウント・ターゲット(つまり、IPアドレスが割り当てられたマウント・ターゲット)が必要です。マウント・ターゲットを事前に作成しない場合は、ストレージ・クラスの定義時にCSIボリューム・プラグインが新しいマウント・ターゲットを作成するサブネットを指定します。
fss.csi.oracleclould.com
プロビジョナを使用する新しいストレージ・クラスを定義します。- マニフェスト・ファイル(たとえば、fss-dyn-st-class.yamlという名前のファイル)を作成し、新しいストレージ・クラスの名前を指定し、必須パラメータとオプション・パラメータの値を指定します。
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>"}'
ここでは:
name: <storage-class-name>
: 必須。ストレージ・クラスに選択した名前。availabilityDomain: <ad-name>
: 必須。新しいファイル・システムを作成する可用性ドメインの名前(および既存のマウント・ターゲットOCIDが指定されていない場合、新しいマウント・ターゲットを作成する可用性ドメインの名前)。たとえば、US-ASHBURN-AD-1
です。使用する可用性ドメイン名を確認するには、oci iam availability-domain list
CLIコマンドを実行します(または、ListAvailabilityDomains操作を使用します)。詳細は、テナンシのアベイラビリティ・ドメイン名を参照してください。mountTargetOcid: <mt-ocid> | mountTargetSubnetOcid: <mt-subnet-ocid>
: 必須。既存のアクティブ・マウント・ターゲット(mountTargetOcid: <mt-ocid>
)のOCID、または新しいマウント・ターゲットを作成するサブネットのOCID (mountTargetSubnetOcid: <mt-subnet-ocid>
)。mountTargetOcid
またはmountTargetSubnetOcid
のいずれかを指定します。ストレージ・クラス定義でmountTargetOcid
とmountTargetSubnetOcid
の両方を指定すると、mountTargetOcid
で指定された既存のマウント・ターゲットが使用され、mountTargetSubnetOcid
は無視されます。例:mountTargetSubnetOcid: ocid1.subnet.oc1.iad.aaaaaaaa2xpk______zva
mountTargetOcid: ocid1.mounttarget.oc1.iad.aaaaaaaa4np______fuy
compartmentOcid: <compartment-ocid>
: オプション。新しいファイル・システム(および既存のマウント・ターゲットOCIDが指定されていない場合は、新しいマウント・ターゲット)が属するコンパートメントのOCID。指定しない場合、デフォルトでクラスタと同じコンパートメントに設定されます。たとえば、compartmentOcid: ocid1.compartment.oc1..aaaaaaaay______t6q
です。kmsKeyOcid: <key-ocid>
: オプション。保存データの暗号化に使用する、管理するマスター暗号化キーのOCID。指定しない場合、データはOracleによって管理される暗号化キーを使用して保存時に暗号化されます。新しいファイル・システムでの保存データの暗号化を参照してください。たとえば、kmsKeyOcid: ocid1.key.oc1.iad.anntl______usjh
です。exportPath: <path>
: オプション。マウント・ターゲット内のファイル・システムを一意に識別するエクスポート内のパス。このエクスポート・パスの先頭にはスラッシュ(/)を付ける必要があり、その後にゼロ個以上のスラッシュ区切り要素を続けます。たとえば、/FileSystem1
です。詳細は、ファイル・システム内のパスを参照してください。ストレージ・クラス定義に
exportPath: <path>
を含める場合は、すでに存在するパス(パスとして、または既存のパスのサブパスとして)を指定しないでください。すでに存在するパスを指定すると、同じマウント・ターゲットを持つ複数のファイル・システムに同じエクスポート・パスを指定できないため、エラーが返されます。したがって、ストレージ・クラス定義にexportPath: <path>
を含める場合は、このストレージ・クラス定義を使用して1つのファイル・システムを作成します。ストレージ・クラス定義に
exportPath: <path>
を含めない場合、パスはデフォルトで、CSIボリューム・プラグインによって作成されたファイル・システムの表示名になります(/csi-fss-
から開始)。exportOptions: "[{<options-in-json-format>}]"
オプション。NFSクライアントがマウント・ターゲットに接続するときに付与されるアクセス・レベルを指定する、エクスポート内の一連のパラメータ(有効なJSON形式)。エクスポート内のNFSエクスポート・オプション・エントリでは、単一のIPアドレスまたはCIDRブロック範囲に対するアクセス権を定義します。詳細は、NFSエクスポートおよびエクスポート・オプションの作業を参照してください。指定しない場合、次のデフォルトが使用されます。exportOptions: "[{\"source\":\"0.0.0.0/0\",\"requirePrivilegedSourcePort\":false,\"access\":\"READ_WRITE\",\"identitySquash\":\"NONE\"}]"
encryptInTransit: "true"|"false"
: オプション。転送中のデータを暗号化するかどうかを示します。"true"
を指定する場合は、「新規ファイル・システムでの転送中のデータの暗号化」で説明されている設定ステップを完了してください。指定しなかった場合は、デフォルトで"false"
に設定されます。たとえば、encryptInTransit: "true"
です。oci.oraclecloud.com/initial-defined-tags-override: '{"<tag-namespace>": {"<tag-key>": "<tag-value>"}}'
オプション。新しいファイル・システムの定義済タグを指定します。たとえば、oci.oraclecloud.com/initial-defined-tags-override: '{"Operations": {"CostCenter": "42"}}'
です。あるコンパートメントに属するタグ・ネームスペースの定義済タグを別のコンパートメントに属するファイルシステム・リソースに適用するには、クラスタでタグ・ネームスペースを使用できるようにするポリシー・ステートメントを含める必要があります。クラスタおよびタグ・ネームスペースが異なるコンパートメントにある場合の追加のIAMポリシーを参照してください。
oci.oraclecloud.com/initial-freeform-tags-override: '{"<tag-key>": "<tag-value>"}'
オプション。新しいファイル・システムのフリーフォーム・タグを指定します。たとえば、oci.oraclecloud.com/initial-freeform-tags-override: '{"Department": "Finance"}'
です。
例:
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"
- 次のように入力して、マニフェストファイルからストレージクラスを作成します。
kubectl create -f <filename>
例:kubectl create -f fss-dyn-st-class.yaml
- マニフェスト・ファイル(たとえば、fss-dyn-st-class.yamlという名前のファイル)を作成し、新しいストレージ・クラスの名前を指定し、必須パラメータとオプション・パラメータの値を指定します。
-
セキュリティ・ルールは、ネットワーク・セキュリティ・グループ(推奨)またはセキュリティ・リストのいずれかで、ストレージ・クラス定義で参照(または作成者)されたマウント・ターゲットと、クラスタのワーカー・ノードの両方に対して作成します。
作成するセキュリティ・ルールは、次のシナリオに従って、マウント・ターゲットおよびワーカー・ノードの相対ネットワークの場所によって異なります:これらのシナリオ、作成するセキュリティ・ルールおよび作成場所は、File Storageサービスのドキュメント(ファイル・ストレージのVCNセキュリティ・ルールの構成を参照)で詳しく説明されています。
- 次のように、File Storageサービスの新しいファイル・システムによってプロビジョニングされるPVCを作成します。
- PVCを定義するマニフェスト・ファイルを作成します。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <pvc-name> spec: accessModes: - ReadWriteMany storageClassName: "<storage-class-name>" resources: requests: storage: 50Gi
ここでは:
name: <pvc-name>
: 必須。たとえば、fss-dynamic-claim
です。storageClassName: "<storage-class-name>"
: 必須。前に定義したストレージクラスの名前。たとえば、fss-dyn-storage
です。accessModes: - ReadWriteMany
: 必須。accessModes:
にはReadWriteMany
を指定する必要があります。storage: 50Gi
: 必須。Kubernetesでは、PVCマニフェストでstorage:
の値を指定する必要があります。ただし、ファイル・ストレージ・サービスは、storage:
に指定した値に関係なく、ファイル・システム・サイズの指定をサポートせず、デフォルト・サイズの新しいファイル・システムを作成します。
たとえば、次のマニフェスト・ファイル(
fss-dyn-claim.yaml
という名前)は、fss-dyn-storage
ストレージ・クラスで定義されたファイル・システムによってプロビジョニングされるfss-dynamic-claim
という名前のPVCを定義します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fss-dynamic-claim spec: accessModes: - ReadWriteMany storageClassName: "fss-dyn-storage" resources: requests: storage: 50Gi
- 次のように入力して、マニフェスト・ファイルからPVCを作成します。
kubectl create -f <filename>
例:kubectl create -f fss-dyn-claim.yaml
新しいPVCが作成されます。CSIボリューム・プラグインは、新しい永続ボリューム(PV)と新しいファイル・システムをファイル・ストレージ・サービス(既存のマウント・ターゲットを指定しなかった場合は新しいマウント・ターゲットとともに)に作成します。
新しいPVCは新しいPVに結合されます。データは、Oracleまたはユーザーが管理する暗号化キーを使用して、保存時に暗号化されます。
- PVCを定義するマニフェスト・ファイルを作成します。
- 次を入力して、PVCが新しい永続ボリュームにバインドされていることを確認します:
kubectl get pvc
前述のコマンドの出力で、PVCが正常にバインドされていることを確認します:
NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE fss-dynamic-claim Bound csi-fss-<unique_ID> 50Gi RWX fss-dyn-storage 4m
- ポッドなどの他のオブジェクトを作成するときに、新しいPVCを使用します。たとえば、次のポッド定義から新しいポッドを作成できます:
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
-
前のステップの例で説明したように、新しいポッドを作成したら、次のように入力して、ポッドが新しいPVCを使用していることを確認できます。
kubectl describe pod nginx
PVCの作成時に新しいPVおよび新しいファイルシステムを動的に作成するという頻繁な要件が予想される場合は、作成した新しいストレージ・クラスを新しいPVCをプロビジョニングするためのデフォルトのストレージ・クラスとして使用するように指定できます。詳細は、Kubernetesのドキュメントを参照してください。
新しいファイル・システムでの保存データの暗号化
File Storageサービスは、デフォルトでOracle管理暗号化キーを使用して、保存時に常にデータを暗号化します。ただし、Vaultサービスで自分を管理している独自のマスター暗号化キーを使用して保存データを暗号化することもできます。
保存データの暗号化方法に応じて、次の適切な手順に従ってください。
- CSIボリューム・プラグインを使用して、Oracle管理の暗号化キーを使用して保存データを暗号化する新しいファイル・システムを動的に作成するには、CSIボリューム・プラグインを使用した新規ファイル・システムでのPVCのプロビジョニングのステップに従って、ストレージ・クラス定義に
kmsKeyOcid: <key-ocid>
パラメータを含めないでください。データは、Oracleによって管理される暗号化キーを使用して、保存時に暗号化されます。 - CSIボリューム・プラグインを使用して、保存時にデータを暗号化するために管理するマスター暗号化キーを使用する新しいファイル・システムを動的に作成するには、「プロビジョニング」のステップに従いますCSIボリューム・プラグインを使用した新規ファイル・システムのPVCでは、ストレージ・クラス定義に
kmsKeyOcid: <key-ocid>
パラメータを含めて、Vaultサービスでマスター暗号化キーのOCIDを指定します。データは、指定した暗号化キーを使用して保存時に暗号化されます。
新しいファイル・システムでの転送中のデータの暗号化
転送中暗号化では、TLS 1.2 (Transport Layer Security)暗号化を使用して、インスタンスとマウントされたファイル・システム間のデータ転送が保護されます。転送中暗号化およびファイル・ストレージ・サービスの詳細は、転送中TLS暗号化の使用を参照してください。
保存時の暗号化とは関係なく、転送中暗号化を指定します。移動中のデータは、保存中のデータがOracle管理キーを使用して暗号化されるか、ユーザー管理キーを使用して暗号化されるかに関係なく、常にOracle管理であるTLS証明書を使用して暗号化されます。
File Storageサービスを使用してPVCをプロビジョニングする場合、転送中暗号化は、ワーカー・ノードをホストしているコンピュート・インスタンスがOracle Linux 7およびOracle Linux 8を実行している場合にのみサポートされます。
CSIボリューム・プラグインを使用して、転送中暗号化で新しいファイル・システムを動的に作成するには:
- 「Linuxでの転送中暗号化の設定」の手順に従って、ファイル・システムに転送中暗号化を設定します。詳細は次のとおりです:
- ファイル・システムをエクスポートするマウント・ターゲットのネットワーク・セキュリティ・グループ(推奨)またはセキュリティ・リストのいずれかで次のセキュリティ・ルールを設定して、前提条件を完了します:
- 2051の宛先ポート範囲へのTCPトラフィックを許可するステートフル・イングレス・ルール(任意のソースIPアドレスまたはCIDRブロックのすべてのポートから、またはすべてのソースから)。
- 2051のソース・ポート範囲からのTCPトラフィックを、任意の宛先IPアドレスまたはCIDRブロックのすべてのポート、またはすべての宛先に許可するステートフル・エグレス・ルール。
詳細は、シナリオC: マウント・ターゲットおよびインスタンスでTLS転送中暗号化を使用を参照してください。
- 各ワーカー・ノードで
oci-fss-utils
パッケージをダウンロードします。ライセンス契約に同意する必要があります。タスク1: OCI-FSS-UTILSパッケージのダウンロードを参照してください。 - 各ワーカー・ノードに
oci-fss-utils
パッケージをインストールします。タスク2: Oracle LinuxまたはCentOSでのOCI-FSS-UTILSパッケージのインストールを参照してください。
- ファイル・システムをエクスポートするマウント・ターゲットのネットワーク・セキュリティ・グループ(推奨)またはセキュリティ・リストのいずれかで次のセキュリティ・ルールを設定して、前提条件を完了します:
-
CSIボリューム・プラグインを使用した新しいファイル・システムでのPVCのプロビジョニングの手順に従って、ストレージ・クラス定義に
encryptInTransit: "true"
パラメータを含めます。データは、Oracleによって管理される暗号化キーを使用して、転送中に暗号化されます。
既存のファイル・システムでのPVCのプロビジョニング
ファイル・ストレージ・サービスの既存のファイル・システムにPVCを作成するには(Oracle管理の暗号化キーを使用して保存データを暗号化します):
- ファイル・ストレージ・サービスでマウント・ターゲットを含むファイル・システムを作成し、「Oracle管理キーを使用した暗号化」暗号化オプションを選択します。ファイル・システムの作成を参照してください。
- セキュリティ・ルールは、ファイル・システムをエクスポートするマウント・ターゲットとクラスタのワーカー・ノードの両方について、ネットワーク・セキュリティ・グループ(推奨)またはセキュリティ・リストのいずれかで作成します。作成するセキュリティ・ルールは、次のシナリオに従って、マウント・ターゲットおよびワーカー・ノードの相対ネットワークの場所によって異なります:
これらのシナリオ、作成するセキュリティ・ルールおよび作成場所は、File Storageサービスのドキュメント(ファイル・ストレージのVCNセキュリティ・ルールの構成を参照)で詳しく説明されています。
- 次のように、ファイル・ストレージ・サービスのファイル・システムでバックアップされたPVを作成します。
-
PVを定義するマニフェスト・ファイルを作成し、
csi:
セクションで次のように設定します。driver
からfss.csi.oraclecloud.com
volumeHandle
から<FileSystemOCID>:<MountTargetIP>:<path>
ここでは:<FileSystemOCID>
は、ファイル・ストレージ・サービスで定義されたファイル・システムのOCIDです。<MountTargetIP>
は、マウント・ターゲットに割り当てられたIPアドレスです。<path>
は、マウント・ターゲットのIPアドレスに対するファイル・システムへのマウント・パスで、スラッシュで始まります。
ocid1.filesystem.oc1.iad.aaaa______j2xw:10.0.0.6:/FileSystem1
たとえば、次のマニフェスト・ファイル(fss-pv.yamlという名前)は、ファイル・ストレージ・サービスのファイル・システムによってバックアップされる
fss-pv
というPVを定義します。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
- 次のように入力して、マニフェスト・ファイルからPVを作成します。
kubectl create -f <filename>
例:
kubectl create -f fss-pv.yaml
-
- 次のように、作成したPVによってプロビジョニングされるPVCを作成します。
- PVCを定義するマニフェスト・ファイルを作成し、次のように設定します。
storageClassName
から""
volumeName
: 作成したPVの名前(fss-pv
など)
たとえば、次のマニフェスト・ファイル(
fss-pvc.yaml
という名前)は、fss-pv
という名前のPVによってプロビジョニングされるfss-pvc
という名前のPVCを定義します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fss-pvc spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 50Gi volumeName: fss-pv
requests: storage:
要素はPVCのマニフェスト・ファイルに存在する必要があり、その値はPVのマニフェスト・ファイルのcapacity: storage:
要素に指定された値と一致する必要があります。それ以外に、requests: storage:
要素の値は無視されます。 - 次のように入力して、マニフェスト・ファイルからPVCを作成します。
kubectl create -f <filename>
例:kubectl create -f fss-pvc.yaml
- PVCを定義するマニフェスト・ファイルを作成し、次のように設定します。
PVCは、ファイル・ストレージ・サービス・ファイル・システムによってバックアップされたPVにバインドされます。データは、Oracleによって管理される暗号化キーを使用して、保存時に暗号化されます。
既存のファイル・システムでの保存データの暗号化
File Storageサービスは、デフォルトでOracle管理暗号化キーを使用して、保存時に常にデータを暗号化します。ただし、Vaultサービスで自分で管理する独自のマスター暗号化キーを使用して、ファイル・システムを暗号化することもできます。
保存データの暗号化方法に応じて、次の適切な手順に従ってください。
- Oracle管理の暗号化キーを使用して保存データを暗号化するファイル・システムにPVCを作成するには、「既存のファイル・システムでのPVCのプロビジョニング」のステップに従って、説明に従って「Oracle管理キーを使用した暗号化」暗号化オプションを選択します。データは、Oracleによって管理される暗号化キーを使用して、保存時に暗号化されます。
- 保存時にデータを暗号化するために管理するマスター暗号化キーを使用してファイル・システムにPVCを作成するには、「既存のファイル・システムでのPVCのプロビジョニング」のステップに従いますが、「顧客管理キーを使用した暗号化」暗号化オプションを選択し、Vaultサービスでマスター暗号化キーを指定します。データは、指定した暗号化キーを使用して保存時に暗号化されます。
既存のファイル・システムでの転送中のデータの暗号化
転送中暗号化では、TLS v. 1.2 (Transport Layer Security)暗号化を使用して、インスタンスとマウントされたファイル・システム間のデータ転送が保護されます。転送中暗号化およびファイル・ストレージ・サービスの詳細は、転送中TLS暗号化の使用を参照してください。
保存時の暗号化とは関係なく、転送中暗号化を指定します。移動中のデータは、保存中のデータがOracle管理キーを使用して暗号化されるか、ユーザー管理キーを使用して暗号化されるかに関係なく、常にOracle管理であるTLS証明書を使用して暗号化されます。
File Storageサービスを使用してPVCをプロビジョニングする場合、転送中暗号化は、ワーカー・ノードをホストしているコンピュート・インスタンスがOracle Linux 7およびOracle Linux 8を実行している場合にのみサポートされます。
転送中にデータが暗号化されているファイル・システムにPVCを作成するには:
- 「Linuxでの転送中暗号化の設定」の手順に従って、ファイル・システムに転送中暗号化を設定します。詳細は次のとおりです:
- ファイル・システムをエクスポートするマウント・ターゲットのネットワーク・セキュリティ・グループ(推奨)またはセキュリティ・リストのいずれかで次のセキュリティ・ルールを設定して、前提条件を完了します:
- 2051の宛先ポート範囲へのTCPトラフィックを許可するステートフル・イングレス・ルール(任意のソースIPアドレスまたはCIDRブロックのすべてのポートから、またはすべてのソースから)。
- 2051のソース・ポート範囲からのTCPトラフィックを、任意の宛先IPアドレスまたはCIDRブロックのすべてのポート、またはすべての宛先に許可するステートフル・エグレス・ルール。
詳細は、シナリオC: マウント・ターゲットおよびインスタンスで-transit暗号化でTLSを使用を参照してください。
- 各ワーカー・ノードで
oci-fss-utils
パッケージをダウンロードします。ライセンス契約に同意する必要があります。タスク1: OCI-FSS-UTILSパッケージのダウンロードを参照してください。 - 各ワーカー・ノードに
oci-fss-utils
パッケージをインストールします。タスク2: Oracle LinuxまたはCentOSでのOCI-FSS-UTILSパッケージのインストールを参照してください。
- ファイル・システムをエクスポートするマウント・ターゲットのネットワーク・セキュリティ・グループ(推奨)またはセキュリティ・リストのいずれかで次のセキュリティ・ルールを設定して、前提条件を完了します:
-
保存データの暗号化に必要な「既存のファイル・システムでのPVCのプロビジョニング」の手順に従って、「Oracle管理キーを使用した暗号化」オプションまたは「顧客管理キーを使用した暗号化」オプションのいずれかを選択します。ただし、PVを定義するマニフェスト・ファイルを作成する場合は、ファイルの
csi
セクションでencryptInTransit
を"true"
に設定します。例: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"
PVCのファイル・ストレージ・サービス・プロビジョニングのトラブルシューティング
権限が不十分なため、ポッドはファイル・システムにアクセスできません
説明:ポッドがファイル・ストレージ・サービスのファイル・システムによってバックアップされた永続ボリューム(PV)にアクセスしようとすると、試行が失敗し、「Permission Denied」メッセージが表示されることがあります。
原因:ファイル・ストレージ・サービスでファイル・システムによってバックアップされたPVを定義するときに、PVのaccessModes
属性をReadWriteMany
に設定し、PVのfsType
属性の値を指定する必要はありません。
CSIボリューム・プラグインは、CSIDriverオブジェクトとして実装されます。CSIDriverオブジェクトのfsGroupPolicy
属性を使用して、CSIDriverがボリュームをマウントするポッドのsecurityContext
で指定されたfsGroup
属性と一致するようにボリュームの所有権および権限を変更するかどうかを制御します。ボリュームの所有権および権限を変更すると、マウント後にポッドがボリュームにアクセスできるようになります。
デフォルトでは、CSIDriverオブジェクトのfsGroupPolicy
属性がReadWriteOnceWithFSType
に設定され、CSIDriverがPV定義を調べて、次のようにポッドのfsGroup
属性と一致するようにボリュームの所有権および権限を変更するかどうかを判断することを示します。
- PVの
fsType
属性が設定されている場合、CSIDriverは、ポッドのsecurityContext
で指定されたfsGroup
属性と一致するようにボリュームの所有権および権限を変更します。その結果、ポッドからボリュームにアクセスできます。 - PVの
fsType
属性が設定されていない場合、CSIDriverはボリュームの所有権および権限を変更しません。ボリュームにアクセスできるのは、rootとして実行されているプロセスのみです。その結果、rootとして実行されていないポッドは、マウントされたボリューム内のディレクトリまたはファイルにアクセスしようとしたときに「Permission Denied」メッセージを受信します。
ポッドが「Permission Denied」メッセージを受信する理由は、CSIDriverオブジェクトのfsGroupPolicy
属性がReadWriteOnceWithFSType
に設定されていて、PVのfsType
属性が設定されていないことが原因であることを確認できます。ポッドに対してコマンドを実行して、マウントされたボリューム上のディレクトリにファイルを書き込み、ファイルのプロパティを調べて、グループ所有者がポッドのsecurityContext
で指定されたfsGroup
属性と一致するかどうかを確認します。たとえば、ポッドに次のマニフェストがあるとします。
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
- ポッドに対してコマンドを実行して、マウントされたボリューム上のディレクトリにファイルを書き込みます。たとえば、次のように入力します:
kubectl exec -it security-context-demo -- sh -c "cd /data/demo && echo hello > testfile"
- 新しく作成したファイルのプロパティを調べ、アクセス権を確認します。たとえば、次のように入力します:
kubectl exec -it security-context-demo -- sh -c "ls -l /data/demo/testfile"
出力には、ポッドの
fsGroup
属性で指定されたものと同じであるファイルのグループ所有者が表示され、ポッドがファイルにアクセスできるようになります。例:-rw-r--r-- 1 root 2000 6 Jun 6 20:08 testfile
ただし、CSIDriverオブジェクトの
fsGroupPolicy
属性がReadWriteOnceWithFSType
に設定されていて、PVのfsType
属性が設定されていない場合、出力にはファイルのグループ所有者がrootとして表示され、ポッドはそのファイルにアクセスできません。例:-rw-r--r-- 1 root root 6 Jun 6 20:08 testfile
詳細は、KubernetesドキュメントのCSIボリュームのfsGroupポリシーを参照してください。
処置: CSIDriverオブジェクトが、ポッドのsecurityContext
で指定されたfsGroup
属性と一致するようにボリュームの所有権および権限を変更できるようにするには、CSIDriverオブジェクトのfsGroupPolicy
属性を次のようにFile
に設定します。
- 次のように入力して、CSIDriver構成ファイルを取得します。
kubectl get csiDriver fss.csi.oraclecloud.com -oyaml > fss_csi_driver.yaml
- テキスト・エディタで、fss_csi_driver.yamlファイルを編集し、CSIDriverオブジェクトの
fsGroupPolicy
属性をReadWriteOnceWithFSType
からFile
に変更します。たとえば:
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
先:
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
fsGroupPolicy
の値のみを変更します。その他の値は変更しません。 - fss_csi_driver.yamlファイルを保存して閉じます。
- 次のように入力して、既存のCSIDriverオブジェクトを削除します。
kubectl delete csiDriver fss.csi.oraclecloud.com
- 次のように入力して、新しいCSIDriverオブジェクトを作成します。
kubectl apply -f fss_csi_driver.yaml
- 「Permission Denied」メッセージが表示されたポッドを再起動します。