1.2. 在命名空间间共享 ConfigMap 对象


ConfigMap 对象存储非敏感配置数据,如应用程序 URL 或功能标记。SharedConfigMap 自定义资源(CR)可让您在没有手动重复的情况下,在集群中的多个命名空间中安全地共享 ConfigMap 对象。通过共享 ConfigMap 对象,您可以建立单个配置数据源并确保集群的一致性。

1.2.1. 创建 SharedConfigMap 自定义资源

您可以创建 SharedConfigMap 自定义资源(CR)实例,以在命名空间间共享 ConfigMap 对象。

先决条件

  • 您已创建了要在其他命名空间中共享的 ConfigMap 对象。要创建 ConfigMap 对象,请参阅"添加输入 secret 和 configmaps"。
  • 您必须具有执行以下操作的权限:

    • 在集群范围的级别上创建 sharedconfigmaps.sharedresource.openshift.io CR。
    • SharedConfigMap CR 创建 ClusterRole 对象。
    • 为 Shared Resource Container Storage Interface (CSI)驱动程序创建 RoleRoleBinding 对象。
    • 管理集群中命名空间中的角色和角色绑定,以控制哪些用户可以获取、列出和监视实例。
    • 管理角色和角色绑定,以便 pod 指定的服务帐户可以使用 SharedConfigMap CR 挂载引用 ConfigMap 对象的 csi 卷。
    • 访问包含您要共享的 ConfigMap 对象的命名空间。

流程

  1. 创建 RoleRoleBinding 对象,为 Shared Resource CSI Driver 授予访问 ConfigMap 对象的权限。请参见以下示例配置:

    Role 对象示例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: shared-test-config
      namespace: <name_of_the_source_namespace> 
    1
    
    rules:
      - apiGroups: [""]
        resources: ["configmaps"]
        resourceNames: ["shared-config"]
        verbs: ["get", "list", "watch"]
    Copy to Clipboard Toggle word wrap

    1
    <name_of_the_source_namespace > 替换为源命名空间的名称。

    RoleBinding 对象示例

     apiVersion: rbac.authorization.k8s.io/v1
     kind: RoleBinding
     metadata:
       name: shared-test-config
       namespace: <name_of_the_source_namespace> 
    1
    
     roleRef:
       apiGroup: rbac.authorization.k8s.io
       kind: Role
       name: shared-test-config
     subjects: 
    2
    
       - kind: ServiceAccount
         name: csi-driver-shared-resource
         namespace: openshift-builds
    Copy to Clipboard Toggle word wrap

    1
    <name_of_the_source_namespace > 替换为源命名空间的名称。
    2
    指定 Shared Resource CSI 驱动程序 DaemonSet 的服务帐户列表。使用 Red Hat OpenShift 构建部署时,服务帐户名称为 csi-driver-shared-resource,命名空间与部署 Red Hat OpenShift Operator 的 Builds 匹配。
  2. 为您要在集群中的命名空间之间共享的 ConfigMap 对象创建 SharedConfigMap CR。以下示例显示了示例配置:

    apiVersion: sharedresource.openshift.io/v1alpha1
    kind: SharedConfigMap
    metadata:
      name: share-test-config 
    1
    
    spec:
      configMapRef:
        name: shared-config
        namespace: <name_of_the_source_namespace> 
    2
    Copy to Clipboard Toggle word wrap
    1
    指定 SharedConfigMap CR 的名称。
    2
    <name_of_the_source_namespace > 替换为源命名空间的名称。
  3. 创建一个 ClusterRole CR 实例,其授予基于角色的访问控制(RBAC)权限,以使用引用的共享资源。以下示例显示了示例配置:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: <cluster_role_name> 
    1
    
    rules:
      - apiGroups:
          - sharedresource.openshift.io
        resources:
          - sharedconfigmaps
        resourceNames:
          - share-test-config 
    2
    
        verbs:
          - use
    Copy to Clipboard Toggle word wrap
    1
    <cluster_role_name > 替换为集群角色的名称。
    2
    指定 SharedSecret CR 的名称。

1.2.2. 在 pod 中使用 SharedConfigMap 自定义资源

要从 pod 访问 SharedConfigMap 自定义资源(CR),您必须为关联的服务帐户授予所需的基于角色的访问控制(RBAC)权限,以使用该 SharedConfigMap CR。

先决条件

  • 为您要在集群中的命名空间之间共享的配置映射创建 SharedConfigMap CR 实例。
  • 您必须具有执行以下操作的权限:

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

如果您无法完成最后两个先决条件,集群管理员可以授予 RBAC 权限,使服务帐户能够使用 SharedConfigMap CR。

流程

  1. 创建与角色关联的 RoleBinding 对象,并为服务帐户授予使用共享资源的权限。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: use-shared-config
      namespace: <app_namespace> 
    1
    
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: use-shared-config
    subjects:
      - kind: ServiceAccount
        name: <service_account_name> 
    2
    Copy to Clipboard Toggle word wrap
    1
    <app_namespace > 替换为应用程序的命名空间名称。
    2
    <service_account_name > 替换为应用程序的服务帐户名称。
  2. 将 Shared Resource Container Storage Interface (CSI)驱动程序挂载到 pod 或接受 csi 卷的任何其他资源中。

    apiVersion: v1
    kind: Pod
    metadata:
      name: example-shared-config
      namespace: <app_namespace> 
    1
    
    spec:
      ...
      serviceAccountName: default
      volumes:
        - name: shared-config
          csi:
            readOnly: true
            driver: csi.sharedresource.openshift.io
            volumeAttributes:
              sharedConfigMap: share-test-config 
    2
    Copy to Clipboard Toggle word wrap
    1
    将 <app_namespace> 替换为应用程序的命名空间名称。
    2
    指定 sharedConfigMap 对象的名称。
    重要

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat