1.2. 在命名空间间共享 ConfigMap 对象
ConfigMap 对象存储非敏感配置数据,如应用程序 URL 或功能标记。SharedConfigMap 自定义资源(CR)可让您在没有手动重复的情况下,在集群中的多个命名空间中安全地共享 ConfigMap 对象。通过共享 ConfigMap 对象,您可以建立单个配置数据源并确保集群的一致性。
1.2.1. 创建 SharedConfigMap 自定义资源 复制链接链接已复制到粘贴板!
您可以创建 SharedConfigMap 自定义资源(CR)实例,以在命名空间间共享 ConfigMap 对象。
先决条件
-
您已创建了要在其他命名空间中共享的
ConfigMap对象。要创建ConfigMap对象,请参阅"添加输入 secret 和 configmaps"。 您必须具有执行以下操作的权限:
-
在集群范围的级别上创建
sharedconfigmaps.sharedresource.openshift.ioCR。 -
为
SharedConfigMapCR 创建ClusterRole对象。 -
为 Shared Resource Container Storage Interface (CSI)驱动程序创建
Role和RoleBinding对象。 - 管理集群中命名空间中的角色和角色绑定,以控制哪些用户可以获取、列出和监视实例。
-
管理角色和角色绑定,以便 pod 指定的服务帐户可以使用
SharedConfigMapCR 挂载引用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>1 rules: - apiGroups: [""] resources: ["configmaps"] resourceNames: ["shared-config"] verbs: ["get", "list", "watch"]- 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为您要在集群中的命名空间之间共享的
ConfigMap对象创建SharedConfigMapCR。以下示例显示了示例配置:apiVersion: sharedresource.openshift.io/v1alpha1 kind: SharedConfigMap metadata: name: share-test-config1 spec: configMapRef: name: shared-config namespace: <name_of_the_source_namespace>2 创建一个
ClusterRoleCR 实例,其授予基于角色的访问控制(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-config2 verbs: - use
1.2.2. 在 pod 中使用 SharedConfigMap 自定义资源 复制链接链接已复制到粘贴板!
要从 pod 访问 SharedConfigMap 自定义资源(CR),您必须为关联的服务帐户授予所需的基于角色的访问控制(RBAC)权限,以使用该 SharedConfigMap CR。
先决条件
-
为您要在集群中的命名空间之间共享的配置映射创建
SharedConfigMapCR 实例。 您必须具有执行以下操作的权限:
-
运行
oc get sharedconfigmaps命令,以获取SharedConfigMapCR 实例的列表。 -
运行
oc adm policy who-can use <sharedsecret_identifier> 命令检查服务帐户是否可以使用SharedSecretCR,并且服务帐户列在命名空间中。 -
运行
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>1 roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: use-shared-config subjects: - kind: ServiceAccount name: <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-config2 重要如果
sharedConfigMap属性的值与sharedConfigMap实例的名称不匹配,则 pod 无法启动。