傳輸過程中的加密適用於 IBM Cloud File Storage for VPC
虛擬私有雲
請使用傳輸中加密 (EIT) 來保護資料在您的工作節點與 File Storage for VPC 服務之間傳輸時的安全性。 本主題涵蓋了使用「dp2」設定檔的區域性檔案共用,以及使用「rfs」設定檔的區域性檔案共用之 EIT 功能。
區域性檔案共用 — 設定傳輸中加密
若您選擇使用傳輸中加密,請在安全性需求與效能需求之間取得平衡。 對傳輸中的資料進行加密可能會影響效能,因為資料必須在端點處進行加密和解密。 如需更多資訊,請參閱「VPC 傳輸中加密」。
在 RHCOS( CoreOS )的工作節點上,在操作員安裝所需套件後,必須重新啟動該節點,EIT 才會啟用。 啟用 EIT 時,請規劃分階段重新啟動。
- EIT 適用於 4.16 及後續版本的叢集版本。
- 預設情況下,檔案共用皆採用 靜態加密,並由 IBM 管理加密功能。
- 若要在「預設安全」叢集中使用 EIT,您必須將以下出站規則新增至「
kube-<clusterID>」安全群組中。 此規則會自動新增至版本為 4.18 及之後的 ROKS 叢集。 若使用較舊的叢集版本,請手動新增該規則。- 通訊協定:任意
- 來源類型:任何
- 來源:
0.0.0.0/0 - 目的地:
169.254.169.254
- EIT 不適用於靜態配置的卷。 若要設定 EIT,必須使用動態配置。
- 啟用 EIT 後,您的叢集中的 EIT 套件將會自動更新。
- 對傳輸中的資料進行加密可能會影響效能。 其影響取決於您的工作負載特性。 執行同步寫入或繞過 VSI 快取的工作負載(例如資料庫),在啟用 EIT 時可能會受到顯著的效能影響。 為了評估其影響,請將採用 EIT 與未採用 EIT 時的工作負載進行對比。
- 即使沒有 EIT,資料仍會透過安全的資料中心網路傳輸。 如需更多有關網路安全的資訊,請參閱 《 VPC 中的安全性 》以及《 透過基於上下文的限制來保護虛擬私有雲(VPC)基礎架構服務 》。
File Storage for VPC 僅當啟用傳輸中加密功能時,該服務才會被視為「金融服務驗證」服務。 如需更多資訊,請參閱「何謂『金融服務驗證』服務」。
請依照以下步驟,為您 Red Hat OpenShift on IBM Cloud 叢集中的檔案共用設定傳輸中加密 (EIT)。 啟用 EIT 會將所需的套件安裝至您的工作節點上。
-
請記錄下您希望在叢集中啟用 EIT 的工作節點池。
-
編輯
addon-vpc-file-csi-driver-configmap`` 檔案。oc edit cm addon-vpc-file-csi-driver-configmap -n kube-system -
在 ConfigMap 中,將
ENABLE_EIT: "true"設為true,並在您希望啟用 EIT 的工作執行個體池中,於EIT_ENABLED_WORKER_POOLS欄位中進行設定。 例如:"wp1,wp2"。 您也可以設定EIT_METADATA_RETRY_COUNT和EIT_METADATA_RETRY_INTERVAL參數,以控制擷取實例元資料時的重試行為。apiVersion: v1 data: EIT_ENABLED_WORKER_POOLS: "wp1,wp2" # Specify the worker pools where you want to enable EIT. If this field is blank, EIT is not enabled on any worker pools. ENABLE_EIT: "true" # Specify true/false EIT_METADATA_RETRY_COUNT: "3" # Number of retries for fetching instance metadata before an error is returned EIT_METADATA_RETRY_INTERVAL: "30" # Interval in seconds between each metadata fetch retry kind: ConfigMap metadata: creationTimestamp: "2024-06-18T09:45:48Z" labels: app.kubernetes.io/name: ibm-vpc-file-csi-driver name: addon-vpc-file-csi-driver-configmap namespace: kube-system ownerReferences: - apiVersion: csi.drivers.ibmcloud.io/v1 blockOwnerDeletion: true controller: true kind: VPCFileCSIDriver name: ibm-vpc-file-csi-driver uid: d3c8bbcd-24fa-4203-9352-4ab7aa72a055 resourceVersion: "1251777" uid: 5c9d6679-4135-458b-800d-217b34d27c75 -
啟用 EIT 後,請儲存並關閉 configmap。
由於操作員需在指定的工作節點上安裝 EIT 套件,此步驟可能需要長達 5 分鐘才能完成。
-
要驗證 EIT 是否已啟用,請檢視
file-csi-driver-status配置映射中的事件,以確認 EIT 已在每個工作節點上成功安裝。 請查看您指定工作群組中各節點的「Package installation successful」事件。oc describe cm file-csi-driver-status -n kube-system輸出範例
apiVersion: v1 data: EIT_ENABLED_WORKER_NODES: | default: - 10.240.0.10 - 10.240.0.8 PACKAGE_DEPLOYER_VERSION: v1.0.0 events: | - event: EnableVPCFileCSIDriver description: 'VPC File CSI Driver enable successful, DriverVersion: v2.0.3' timestamp: "2024-06-13 09:17:07" - event: EnableEITRequest description: 'Request received to enableEIT, workerPools: , check the file-csi-driver-status configmap for eit installation status on each node of each workerpool.' timestamp: "2024-06-13 09:17:31" - event: 'Enabling EIT on host: 10.240.0.10' description: 'Package installation successful on host: 10.240.0.10, workerpool: wp1' timestamp: "2024-06-13 09:17:48" - event: 'Enabling EIT on host: 10.240.0.8' description: 'Package installation successful on host: 10.240.0.8, workerpool: wp2' timestamp: "2024-06-13 09:17:48" -
若您的工作匣中包含 RHCOS( CoreOS )節點,請將每個受影響的節點清空並重新啟動,以啟用 EIT 套件。 在重新啟動節點之前,EIT 在 RHCOS 節點上無法運作。 先將節點清空,可確保在重新啟動前,將正在執行的作業重新排程至其他節點,從而避免對生產環境應用程式造成影響。
將節點清空,以安全地移除所有正在運行的 Pod。
oc drain <node-name> --ignore-daemonsets --delete-emptydir-data重新啟動已斷電的節點。
ibmcloud ks worker reboot --cluster CLUSTER_ID --worker WORKER_ID當節點恢復線上狀態並處於「
Ready」狀態後,請解除其鎖定,以便工作負載能再次排程至該節點上。oc uncordon <node-name> -
請選擇一個預先安裝且支援 EIT 的儲存類別,或自行建立儲存類別。
- 使用
ibmc-vpc-file-eit儲存類別建立一個 PVC。 - 建立您自己的儲存類別,並將
isEITEnabled參數設定為true。
- 使用
-
建立一個參照您所選儲存類別的 PVC,然後部署一個使用該 PVC 的應用程式。
若在完成這些步驟後仍遇到 EIT 相關問題,請參閱以下疑難排解主題:
區域性檔案共用 — 設定傳輸中加密(測試版)
具備傳輸中加密 (EIT) 功能的區域性 File Storage (RFS) 可為區域內多個可用區域之間的檔案共用,提供安全且採用 TLS 加密的 NFS 連線。 File Storage for VPC 擴充套件會在每個工作節點上自動管理一個 stunnel 側車,該側車會將所有 NFS 流量封裝為 TLS 1.3 或更高版本的流量,且對您的應用程式完全透明。
有關區域性 File Storage 的背景資訊,請參閱《 區域性檔案儲存概覽 》。
具備 EIT 功能的 RFS 目前僅提供 Beta 版支援,建議僅用於實驗用途。 請勿在生產環境的工作負載中使用此功能。
如何運作
當您建立一個儲存類別為 RFS EIT 的 PVC,且有 Pod 將其掛載時,此附加元件會自動在工作節點上建立一個加密的 stunnel 隧道,並將所有 NFS 流量導向該隧道。 此加密機制對您的應用程式而言是透明的——它們仍可繼續使用標準的 NFS 掛載點,同時所有傳輸中的資料均受 TLS 1.3 或更高版本的加密保護。
隧道的生命週期完全由驅動程式管理:當 Pod 掛載該卷時,隧道即被建立;當 Pod 被刪除時,隧道即被拆除。
開始之前
- 您的叢集已安裝 File Storage for VPC 附加元件的 2.0 或更新版本。 如需更多資訊,請參閱 《啟用 IBM Cloud File Storage for VPC 叢集附加元件》。
限制
在啟用 RFS EIT 之前,請先檢視以下限制事項。
- 每個節點的最大 PVC 連接數: 300,每個 PVC 佔用 11300–11599 埠區範圍內的一個埠,並綁定至
127.0.0.1。 - 使用
hostNetwork: true時,應用程式會發生埠號衝突: 使用hostNetwork: true並在 11300–11599 端口範圍內綁定至127.0.0.1的應用程式 Pod,可能會與現有的 RFS EIT PVC 掛載產生衝突。 - 所有適用於 VPC File Storage 的限制條款同樣適用。
為「區域」設定傳輸中加密 File Storage
請依照以下步驟,設定具備傳輸中加密功能的區域性檔案共用。
-
建立一個儲存類別,指定
rfs配置檔,並設定isEITEnabled: "true"。 將以下 YAML 內容儲存至名為rfs-eit-sc.yaml的檔案中。RFS EIT 需要以下參數:在掛載選項中需指定
profile: "rfs"、isENIEnabled: "true"、isEITEnabled: "true"以及proto=tcp。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibmc-vpc-file-rfs-eit-custom labels: app.kubernetes.io/name: ibm-vpc-file-csi-driver provisioner: vpc.file.csi.ibm.io parameters: profile: "rfs" # Regional File Storage profile billingType: "hourly" throughput: "1000" # Bandwidth in MB/s (25–8192 MB/s for RFS profile) encrypted: "false" encryptionKey: "" # Specify the CRK CRN if encrypted is true resourceGroup: "" # Defaults to the resource group in the storage secret store isENIEnabled: "true" # Required for RFS — enables ENI/VNI feature isEITEnabled: "true" # Enables encryption in transit with stunnel securityGroupIDs: "" # Defaults to the cluster security group kube-<clusterID> subnetID: "" # Defaults to an available subnet in the cluster VPC region: "" # Defaults to the region from the cluster node topology primaryIPID: "" # Optional: existing reserved IP ID (region is required) primaryIPAddress: "" # Optional: IP address for ENI/VNI (region and subnetID required) tags: "" uid: "0" gid: "0" classVersion: "1" mountOptions: - hard - nfsvers=4.1 - sec=sys - proto=tcp # Required for stunnel (encryption in transit) reclaimPolicy: "Delete" allowVolumeExpansion: true -
套用儲存類別。
oc apply -f rfs-eit-sc.yaml -
建立一個參照
ibmc-vpc-file-rfs-eit-custom儲存類別的 PVC。 將以下 YAML 內容儲存至名為rfs-eit-pvc.yaml的檔案中。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-rfs-eit-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: ibmc-vpc-file-rfs-eit-custom -
塗上 PVC。
oc apply -f rfs-eit-pvc.yaml -
建立一個會掛載 PVC 的 Pod。 將以下 YAML 內容儲存至名為
rfs-eit-pod.yaml的檔案中。apiVersion: v1 kind: Pod metadata: name: my-rfs-eit-app spec: containers: - name: app image: nginx:latest volumeMounts: - name: rfs-eit-storage mountPath: /data volumes: - name: rfs-eit-storage persistentVolumeClaim: claimName: my-rfs-eit-pvc -
將膠囊塗抹於患處。
oc apply -f rfs-eit-pod.yaml
驗證傳輸中加密功能是否已啟用
在 pod 啟動後,請透過檢查檔案共用目標,確認傳輸中的加密功能是否正常運作。 掛載目標必須顯示「Transit Encryption: stunnel」,以確認 EIT 已啟用。
-
請等待 Pod 進入「
Running」狀態,且 PVC 進入「Bound」狀態。oc get pod my-rfs-eit-app oc get pvc my-rfs-eit-pvc -
從持久性卷中取得檔案共用 ID 和掛載目標 ID。
oc describe pv <pv-name> | grep -E "fileShareId|fileShareTargetId"請注意輸出中的
fileShareId和fileShareTargetId的數值。 您將在下一步驟中使用它們,以驗證 VPC 端的 EIT。 -
請確認檔案共用掛載目標是否顯示「
stunnel」作為中繼加密方法。ibmcloud is share-mount-target FILE_SHARE_ID FILE_SHARE_TARGET_ID | grep "Transit Encryption"確認 EIT 已啟用的輸出範例:
Transit Encryption stunnel
RFS EIT 疑難排解
如需有關 RFS EIT 常見錯誤的協助,請參閱《 區域性「File Storage」傳輸中加密的疑難排解 》。