第 1 章 共享资源 CSI Driver Operator


传统上,存储供应商已将存储驱动程序作为 Kubernetes 的一部分提供。随着容器存储接口(CSI)的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。CSI Operators 为构建的用户提供存储选项,如卷快照,它们无法通过 in-tree 卷插件实现。

Shared Resource CSI 驱动程序是一个特殊的 CSI 驱动程序,它允许集群管理员使用 csi 卷类型在命名空间间安全地共享 SecretConfigMap 对象。共享资源 CSI 驱动程序置备内联临时卷,启用 pod 和 OpenShift Container Platform 构建使用这些共享资源。

共享资源 CSI 驱动程序支持以下自定义资源类型:

  • 用于共享 Secret 对象的 SharedSecret 自定义资源
  • 共享 ConfigMap 对象的 SharedConfigMap 自定义资源

1.1. 在命名空间间共享 Secret 对象

Secret 对象用于存储和管理敏感信息,如密码、OAuth 令牌和 SSH 密钥。您可以使用 SharedSecret 自定义资源(CR)在集群中的不同命名空间中安全地共享 Secret 对象,而无需手动复制它。共享 Secret 对象为敏感数据提供单个源,并确保授权的命名空间有权访问它。

1.1.1. 创建 SharedSecret 自定义资源

您可以创建一个 SharedSecret 自定义资源(CR)在命名空间间共享 Secret 对象。

先决条件

  • 您已创建了要在其他命名空间中共享的 Secret 对象。要创建 Secret 对象,请参阅"创建 Secret"。
  • 已订阅集群,并通过 Insights Operator 同步授权密钥。
  • 您必须具有执行以下操作的权限:

    • 在集群范围的级别上创建 sharedsecrets.sharedresource.openshift.io CR。
    • SharedSecret CR 创建 ClusterRole 对象。
    • 为 Shared Resource CSI 驱动程序创建 RoleRoleBinding 对象。
    • 管理集群中命名空间中的角色和角色绑定,以控制用户。
    • 管理角色和角色绑定,以便 pod 指定的服务帐户可以使用 SharedSecret CR 挂载引用 Secret 对象的 CSI 卷。
    • 访问包含您要共享的 Secret 对象的命名空间。

流程

  1. 创建 RoleRoleBinding 对象,为 Shared Resource CSI 驱动程序授予使用以下示例配置访问 SharedSecret 对象的权限:

    Role 对象示例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: share-etc-pki-entitlement 
    1
    
      namespace: openshift-config-managed
    rules:
      - apiGroups:
          - ""
        resources:
          - secrets
        resourceNames:
          - etc-pki-entitlement
        verbs:
          - get
          - list
          - watch
    Copy to Clipboard Toggle word wrap

    1
    Role CR 的名称。

    RoleBinding 对象示例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: share-etc-pki-entitlement 
    1
    
      namespace: openshift-config-managed
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: share-etc-pki-entitlement 
    2
    
    subjects:
      - kind: ServiceAccount
        name: csi-driver-shared-resource 
    3
    
        namespace: openshift-builds
    Copy to Clipboard Toggle word wrap

    1
    RoleBinding CR 的名称。
    2
    Role CR 的名称。
    3
    ServiceAccount CR 的名称。
  2. 使用以下示例配置创建 SharedSecret CR:

    apiVersion: sharedresource.openshift.io/v1alpha1
    kind: SharedSecret
    metadata:
      name: shared-test-secret 
    1
    
    spec:
      secretRef:
        name: test-secret
        namespace: <name_of_the_source_namespace>
    Copy to Clipboard Toggle word wrap
    1
    <name_of_the_source_namespace > 替换为 SharedSecret CR 的名称。
  3. 使用以下示例配置,创建一个 ClusterRole 对象来授予 RBAC 权限以使用引用的共享资源:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: use-shared-test-secret 
    1
    
    rules:
      - apiGroups:
          - sharedresource.openshift.io
        resources:
          - sharedsecrets
        resourceNames:
          - shared-test-secret
        verbs:
          - use
    Copy to Clipboard Toggle word wrap
    1
    ClusterRole CR 的名称。

1.1.2. 在 pod 中使用 SharedSecret 自定义资源

要从 pod 访问 SharedSecret 自定义资源(CR),您可以为服务帐户授予基于角色的访问控制(RBAC)权限。

先决条件

  • 您已为您要在集群中的命名空间之间共享的 Secret 对象创建一个 SharedSecret CR 实例。
  • 您必须具有执行以下操作的权限:

    • 运行 oc adm policy who-can use <sharedsecret_identifier > 命令检查服务帐户是否可以使用 SharedSecret CR,并且服务帐户列在命名空间中。
    • 确认 pod 的服务帐户可以使用 csi 卷。如果以用户身份创建 pod,请确认您可以使用 csi 卷。
注意

如果您无法完成最后的两个先决条件,集群管理员可以建立必要的 RBAC 权限,以便您可以启用服务帐户使用 SharedSecret CR。

流程

  1. 在与角色关联的集群中创建 RoleBinding 对象,并为服务帐户授予使用共享资源的权限。请参见以下示例配置:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: use-shared-secret 
    1
    
      namespace: app-namespace
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: use-shared-secret
    subjects:
      - kind: ServiceAccount
        name: <service_account_name> 
    2
    Copy to Clipboard Toggle word wrap
    1
    RoleBinding CR 的名称。
    2
    <service_account_name > 替换为应用程序的服务帐户名称。
  2. 将共享资源 csi 驱动程序挂载到 pod 或接受 csi 卷的任何其他资源中。请参见以下示例配置:

    apiVersion: v1
    kind: Pod
    metadata:
      name: example-shared-secret
      namespace: <app_namespace> 
    1
    
    spec:
      ...
      serviceAccountName: default
      volumes:
        - name: shared-secret
          csi:
            readOnly: true
            driver: csi.sharedresource.openshift.io
            volumeAttributes:
              sharedSecret: shared-test-secret 
    2
    Copy to Clipboard Toggle word wrap
    1
    将 <app_namespace> 替换为应用程序的命名空间名称。
    2
    sharedSecret 属性的值,它必须与 SharedSecret CR 的名称相同。
    重要

    如果 sharedSecret 属性的值与 SharedSecret 实例的名称不匹配,则 pod 无法启动。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat