设置 IBM Cloud Object Storage 实例

IBM Cloud Object Storage 是可安装到应用程序的持久性高可用性存储器。 这是一种 Kubernetes Flex-Volume 插件,用于将 Cloud Object Storage 存储区连接到集群中的 pod。 存储在 IBM Cloud Object Storage 上的信息在传输和静止状态下均经过加密,分布于多个地理位置,并可通过 HTTP 采用 REST API 进行访问。

如果要在没有公用网络访问权的专用集群中使用 IBM Cloud Object Storage,那么必须设置 IBM Cloud Object Storage 服务实例进行 HMAC 认证。 如果不想使用 HMAC 认证,那么必须在端口 443 上打开所有出站网络流量,该插件才能在专用集群中正常工作。

创建一个 IBM Cloud Object Storage 实例

您必须在自己的帐户中供应 IBM Cloud Object Storage 服务实例后,才能开始在集群中使用对象存储器。

IBM Cloud Object Storage 插件用于任何 s3 API 端点。 例如,您可以选择使用本地 Cloud Object Storage 服务器(如 Minio ),或者连接到您在其他云服务商处设置的 s3 API端点,而不是 IBM Cloud Object Storage 服务实例。

要创建 IBM Cloud Object Storage 服务实例,请执行以下步骤。 如果您计划使用本地 Cloud Object Storage 服务器或另一个 s3 API端点,请参阅提供商的文档来配置您的 Cloud Object Storage 实例。

  1. 打开 IBM Cloud Object Storage 目录页面
  2. 输入服务实例的名称(例如,cos-backup),然后选择集群所在的资源组。 要查看集群的资源组,请运行 ibmcloud ks cluster get --cluster CLUSTER_NAME_OR_ID
  3. 查看各 套餐选项以了解价格信息,并选择一个套餐。
  4. 单击创建。 这将打开服务详细信息页面。
  5. 要继续设置 Object Storage 以用于集群,请参阅 创建服务凭证

创建 IBM Cloud Object Storage 服务凭据

开始之前,请 创建对象存储服务实例

  1. 在 Object Storage 实例的服务详细信息页面上的导航中,单击 服务凭证
  2. 单击新建凭证。 这将打开一个对话框。
  3. 输入凭证的名称。
  4. 角色 下拉列表中,选择 Object Storage 访问角色,以执行您希望集群中的存储用户有权访问的操作。 必须至少选择 写入者 服务访问角色才能使用 auto-create-bucket 动态供应功能。 如果您选择了“Reader”,则无法使用该凭据在 IBM Cloud Object Storage 上创建存储桶并向其中写入数据。
  5. 可选:点击“高级选项”,将 “包含 HMAC 凭据”开关切换为“”,以创建用于 IBM Cloud Object Storage 服务的 HMAC 凭据。 HMAC 认证通过防止误用到期或随机创建的 OAuth2 令牌,为 OAuth2 认证添加了一层额外的安全性。 重要信息:如果您拥有的是没有公共访问权的仅专用集群,那么必须使用 HMAC 认证,这样才能通过专用网络来访问 IBM Cloud Object Storage 服务。
  6. 单击添加。 您的新凭据已存入 “服务凭据”表中。
  7. 单击查看凭证
  8. 请注意 apikey 使用 OAuth2 令牌对 IBM Cloud Object Storage 服务进行身份验证。 对于 HMAC 身份验证,在 cos_hmac_keys 部分中,请注意 access_key_idsecret_access_key
  9. 将服务凭证存储在集群内的 Kubernetes 私钥中,以启用对 IBM Cloud Object Storage 服务实例的访问。

为 Object Storage 服务凭证创建私钥

要访问 IBM Cloud Object Storage 服务实例来读写数据,必须将服务凭证安全地存储在 Kubernetes 私钥中。 IBM Cloud Object Storage 插件会将这些凭证用于存储区的每个读或写操作。

要为 IBM Cloud Object Storage 服务实例的凭证创建 Kubernetes 私钥,请执行以下步骤。 如果计划使用本地 Cloud Object Storage 服务器或其他 s3 API 端点,请使用相应的凭证创建 Kubernetes 私钥。

先决条件

  • 确保您具有集群的 管理者 服务访问角色。
  • 设置 KMS 提供程序
  • 检索 apikey,或 access_key_id 以及 secret_access_keyIBM Cloud Object Storage 服务凭据 中的。 请注意,服务凭证必须足以用于应用程序需要执行的存储区操作。 例如,如果应用程序从存储区读取数据,那么您在私钥中看到的服务凭证必须至少具有 读者 许可权。

在集群中创建对象存储器私钥

完成以下步骤以在集群中为 IBM Cloud Object Storage创建私钥。

如果要在从集群中的 PVC 创建新存储区时集成 Key Protect 加密,那么必须在创建 IBM Cloud Object Storage 密钥 时包含根密钥 CRN。 请注意,无法将 Key Protect 加密添加到现有存储区。 仅当您创建新存储区时,才能使用加密。 如果删除用于加密的根密钥,那么关联存储区中的所有文件都不可访问。

  1. 获取 IBM Cloud Object Storage 服务实例的 GUID

    ibmcloud resource service-instance <service_name> | grep GUID
    
  2. 创建 Kubernetes 私钥以用于存储服务凭证。 从下列其中一个示例中选择以创建私钥。

    • 使用 API 密钥的示例 create secret 命令。
        kubectl create secret generic cos-write-access --type=ibm/ibmc-s3fs --from-literal=api-key=<api_key> --from-literal=service-instance-id=<service_instance_guid>
        ```
    * 使用 HMAC 认证的示例 `create secret` 命令。
    ```sh {: pre}
        kubectl create secret generic cos-write-access --type=ibm/ibmc-s3fs --from-literal=access-key=<access_key_ID> --from-literal=secret-key=<secret_access_key>    
        ```
    * 用于对 KMS 提供程序启用加密的示例密钥配置文件。
        1. 将以下 YAML 保存到文件中。
            ```yaml {: codeblock}
            apiVersion: v1
            data:
                access-key: xxx
                secret-key: xxx
                kp-root-key-crn: <CRN> # Key Protect or HPCS root key crn in base64 encoded format
            kind: Secret
            metadata:
                name: cos-write-access
            type: ibm/ibmc-s3fs
            ```
            `api-key`
            :   输入先前从 IBM Cloud Object Storage 服务凭证中检索到的 API 密钥。 如果要使用 HMAC 身份验证,请改用 `access-key` 和 `secret-key`。
    
            `access-key`
            :   输入先前从 IBM Cloud Object Storage 服务凭证中检索到的访问密钥标识。 如果要使用 OAuth2 身份验证,请改用 `api-key`。
    
            `secret-key`
            :   输入先前从 IBM Cloud Object Storage 服务凭证中检索到的访问密钥。 如果要使用 OAuth2 身份验证,请改用 `api-key`。
    
            `service-instance-id`
            :   输入先前检索到的 IBM Cloud Object Storage 服务实例的 GUID。
    
            `kp-root-key-crn`
            :   输入 base64 编码的 Key Protect 根密钥 CRN 以使用 Key Protect 加密。
    
        1. 将该密钥应用到您的集群中。
            ```sh {: pre}
            kubectl apply -f <secret_name>
            ```
    
    
  3. 获取集群中的私钥并验证输出。

    kubectl get secret
    

    示例输出

    NAME                  TYPE                                  DATA   AGE
    cos-write-access      ibm/ibmc-s3fs                         2      7d19h
    default-au-icr-io     kubernetes.io/dockerconfigjson        1      55d
    default-de-icr-io     kubernetes.io/dockerconfigjson        1      55d
    ...
    
  4. 安装 IBM Cloud Object Storage 插件,或者如果已安装插件,请 决定 IBM Cloud Object Storage 存储区的配置

  5. 可选: 将私钥添加到缺省存储类存储类参考

为 COS 存储分配受信任的配置文件

您可以使用受信任的配置文件授予不同的 IBM Cloud 身份访问您账户中的资源,包括您的存储解决方案。 受信任的配置文件可集中访问控制,无需长期使用 API 密钥,并允许您将权限范围精确到特定任务所需的最小值。 有关详细信息,请参阅 为存储组件配置可信配置文件

限制

  • IBM Cloud Object Storage 基于 s3fs-fuse 文件系统。 您可以查看 s3fs-fuse 存储库中的限制列表。
  • 要以非 root 用户身份访问 IBM Cloud Object Storage 中的文件,必须将部署中的 runAsUserfsGroup 值设置为相同的值。