传输过程中的加密适用于 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,数据也会通过安全的数据中心网络传输。 有关网络安全的更多信息,请参阅 “VPC 中的安全性”和 “使用基于上下文的限制保护虚拟私有云(VPC)基础设施服务”。
File Storage for VPC 只有在启用了传输中加密功能时,该服务才被视为“金融服务验证”服务。 如需了解更多信息,请参阅 “什么是‘金融服务认证’服务”。
请按照以下步骤为 Red Hat OpenShift on IBM Cloud 集群中的文件共享配置传输中加密(EIT)。 启用 EIT 会在您的工作节点上安装所需的软件包。
-
请记录下您希望在集群中启用 EIT 的 worker 池。
-
编辑
addon-vpc-file-csi-driver-configmap文件。oc edit cm addon-vpc-file-csi-driver-configmap -n kube-system -
在配置映射(ConfigMap)中,将
ENABLE_EIT: "true"设为启用,并在EIT_ENABLED_WORKER_POOLS字段中添加需要启用EIT的工作者池。 例如:"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" -
如果您的 worker 池中包含 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 挂载了该 PVC 时,该附加组件会自动在工作节点上建立一个加密的 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并绑定到127.0.0.1(端口范围为11300–11599)的应用程序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 传输中加密的故障排除 》。