传输过程中的加密适用于 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 会在您的工作节点上安装所需的软件包。

  1. 请记录下您希望在集群中启用 EIT 的 worker 池。

  2. 编辑 addon-vpc-file-csi-driver-configmap 文件。

    oc edit cm addon-vpc-file-csi-driver-configmap -n kube-system
    
  3. 在配置映射(ConfigMap)中,将 ENABLE_EIT: "true" 设为启用,并在 EIT_ENABLED_WORKER_POOLS 字段中添加需要启用EIT的工作者池。 例如:"wp1,wp2"。 您还可以设置 EIT_METADATA_RETRY_COUNTEIT_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
    
  4. 启用 EIT 后,请保存并关闭 configmap。

由于操作员需要在指定的工作节点上安装 EIT 软件包,因此此步骤最多可能需要 5 分钟才能完成。

  1. 要验证 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"
    
  2. 如果您的 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>
    
  3. 选择一个支持 EIT 的预安装存储类,或创建自己的存储类。

    • 使用 ibmc-vpc-file-eit 存储类创建一个PVC。
    • 创建您自己的存储类,并将 isEITEnabled 参数设置为 true
  4. 创建一个引用您所选存储类的 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 被删除时,隧道即被拆除。

准备工作

限制

在启用 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

请按照以下步骤配置具有传输中加密功能的区域文件共享。

  1. 创建一个存储类,该类指定 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
    
  2. 应用存储类。

    oc apply -f rfs-eit-sc.yaml
    
  3. 创建一个引用 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
    
  4. 涂上PVC。

    oc apply -f rfs-eit-pvc.yaml
    
  5. 创建一个挂载该 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
    
  6. 将药囊涂抹上去。

    oc apply -f rfs-eit-pod.yaml
    

验证传输中加密功能是否已启用

pod 启动后,请通过检查文件共享目标来验证传输过程中的加密功能是否正常。 挂载目标必须显示“Transit Encryption: stunnel”,以确认 EIT 处于活动状态。

  1. 请等待 pod 进入“Running”状态,且 PVC 进入“Bound”状态。

    oc get pod my-rfs-eit-app
    oc get pvc my-rfs-eit-pvc
    
  2. 从持久卷中获取文件共享 ID 和挂载目标 ID。

    oc describe pv <pv-name> | grep -E "fileShareId|fileShareTargetId"
    

    请注意输出中的 fileShareIdfileShareTargetId 的数值。 您将在下一步中使用它们来验证 VPC 侧的 EIT。

  3. 请确认文件共享挂载目标显示的传输加密方法为 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 传输中加密的故障排除 》。

后续步骤