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)驱动程序创建
Role
和RoleBinding
对象。 - 管理集群中命名空间中的角色和角色绑定,以控制哪些用户可以获取、列出和监视实例。
-
管理角色和角色绑定,以便 pod 指定的服务帐户可以使用
SharedConfigMap
CR 挂载引用ConfigMap
对象的csi
卷。 -
访问包含您要共享的
ConfigMap
对象的命名空间。
-
在集群范围的级别上创建
流程
创建
Role
和RoleBinding
对象,为 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> rules: - apiGroups: [""] resources: ["configmaps"] resourceNames: ["shared-config"] verbs: ["get", "list", "watch"]
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 Copied! Toggle word wrap Toggle overflow - 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> roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: shared-test-config subjects: - kind: ServiceAccount name: csi-driver-shared-resource namespace: openshift-builds
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 Copied! Toggle word wrap Toggle overflow 为您要在集群中的命名空间之间共享的
ConfigMap
对象创建SharedConfigMap
CR。以下示例显示了示例配置:apiVersion: sharedresource.openshift.io/v1alpha1 kind: SharedConfigMap metadata: name: share-test-config spec: configMapRef: name: shared-config namespace: <name_of_the_source_namespace>
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 Copied! Toggle word wrap Toggle overflow 创建一个
ClusterRole
CR 实例,其授予基于角色的访问控制(RBAC)权限,以使用引用的共享资源。以下示例显示了示例配置:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: <cluster_role_name> rules: - apiGroups: - sharedresource.openshift.io resources: - sharedconfigmaps resourceNames: - share-test-config verbs: - use
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 Copied! Toggle word wrap Toggle overflow
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。
流程
创建与角色关联的
RoleBinding
对象,并为服务帐户授予使用共享资源的权限。apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: use-shared-config namespace: <app_namespace> roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: use-shared-config subjects: - kind: ServiceAccount name: <service_account_name>
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 Copied! Toggle word wrap Toggle overflow 将 Shared Resource Container Storage Interface (CSI)驱动程序挂载到 pod 或接受
csi
卷的任何其他资源中。apiVersion: v1 kind: Pod metadata: name: example-shared-config namespace: <app_namespace> spec: ... serviceAccountName: default volumes: - name: shared-config csi: readOnly: true driver: csi.sharedresource.openshift.io volumeAttributes: sharedConfigMap: share-test-config
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 Copied! Toggle word wrap Toggle overflow 重要如果
sharedConfigMap
属性的值与sharedConfigMap
实例的名称不匹配,则 pod 无法启动。