第 1 章 共享资源 CSI Driver Operator
传统上,存储供应商已将存储驱动程序作为 Kubernetes 的一部分提供。随着容器存储接口(CSI)的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。CSI Operators 为构建的用户提供存储选项,如卷快照,它们无法通过 in-tree 卷插件实现。
Shared Resource CSI 驱动程序是一个特殊的 CSI 驱动程序,它允许集群管理员使用 csi
卷类型在命名空间间安全地共享 Secret
和 ConfigMap
对象。共享资源 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 驱动程序创建
Role
和RoleBinding
对象。 - 管理集群中命名空间中的角色和角色绑定,以控制用户。
-
管理角色和角色绑定,以便 pod 指定的服务帐户可以使用
SharedSecret
CR 挂载引用Secret
对象的 CSI 卷。 -
访问包含您要共享的
Secret
对象的命名空间。
-
在集群范围的级别上创建
流程
创建
Role
和RoleBinding
对象,为 Shared Resource CSI 驱动程序授予使用以下示例配置访问SharedSecret
对象的权限:Role
对象示例apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: share-etc-pki-entitlement namespace: openshift-config-managed rules: - apiGroups: - "" resources: - secrets resourceNames: - etc-pki-entitlement verbs: - get - list - watch
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 Copied! Toggle word wrap Toggle overflow - 1
Role
CR 的名称。
RoleBinding
对象示例apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: share-etc-pki-entitlement namespace: openshift-config-managed roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: share-etc-pki-entitlement subjects: - kind: ServiceAccount name: csi-driver-shared-resource namespace: openshift-builds
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 Copied! Toggle word wrap Toggle overflow 使用以下示例配置创建
SharedSecret
CR:apiVersion: sharedresource.openshift.io/v1alpha1 kind: SharedSecret metadata: name: shared-test-secret spec: secretRef: name: test-secret namespace: <name_of_the_source_namespace>
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 Copied! Toggle word wrap Toggle overflow - 1
- 将
<name_of_the_source_namespace
> 替换为SharedSecret
CR 的名称。
使用以下示例配置,创建一个
ClusterRole
对象来授予 RBAC 权限以使用引用的共享资源:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: use-shared-test-secret rules: - apiGroups: - sharedresource.openshift.io resources: - sharedsecrets resourceNames: - shared-test-secret verbs: - use
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 Copied! Toggle word wrap Toggle overflow - 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。
流程
在与角色关联的集群中创建
RoleBinding
对象,并为服务帐户授予使用共享资源的权限。请参见以下示例配置:apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: use-shared-secret namespace: app-namespace roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: use-shared-secret subjects: - kind: ServiceAccount name: <service_account_name>
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 Copied! Toggle word wrap Toggle overflow 将共享资源
csi
驱动程序挂载到 pod 或接受csi
卷的任何其他资源中。请参见以下示例配置:apiVersion: v1 kind: Pod metadata: name: example-shared-secret namespace: <app_namespace> spec: ... serviceAccountName: default volumes: - name: shared-secret csi: readOnly: true driver: csi.sharedresource.openshift.io volumeAttributes: sharedSecret: shared-test-secret
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 Copied! Toggle word wrap Toggle overflow 重要如果
sharedSecret
属性的值与SharedSecret
实例的名称不匹配,则 pod 无法启动。