$ oc apply -f - <<EOF
apiVersion: sharedresource.openshift.io/v1alpha1
kind: SharedSecret
metadata:
name: my-share
spec:
secretRef:
name: <name of secret>
namespace: <namespace of secret>
EOF
共享资源CSI驱动程序功能现已在Red Hat OpenShift 1.1构建中普遍可用。此功能现已在OpenShift Container Platform中弃用。要使用此功能,请确保您使用的是Red Hat OpenShift 1.1构建或更高版本。 |
作为集群管理员,您可以使用OpenShift Container Platform中的共享资源CSI驱动程序来配置包含Secret
或ConfigMap
对象内容的内联临时卷。这样,公开卷挂载的Pod和其他Kubernetes类型以及OpenShift Container Platform构建就可以安全地在集群中任何命名空间中使用这些对象的内容。为此,目前有两种类型的共享资源:用于Secret
对象的SharedSecret
自定义资源和用于ConfigMap
对象的SharedConfigMap
自定义资源。
要启用共享资源CSI驱动程序,您必须使用特性门启用特性。 |
存储供应商传统上将存储驱动程序作为Kubernetes的一部分提供。通过容器存储接口 (CSI) 的实现,第三方提供商可以使用标准接口交付存储插件,而无需更改核心Kubernetes代码。
CSI Operators为OpenShift Container Platform用户提供了诸如卷快照之类的存储选项,而这些选项在树内卷插件中是不可能的。
要在集群中跨命名空间共享密钥,您可以为要共享的Secret
对象创建一个SharedSecret
自定义资源 (CR) 实例。
您必须具有执行以下操作的权限
在集群范围级别创建sharedsecrets.sharedresource.openshift.io
自定义资源定义 (CRD) 的实例。
管理集群中命名空间的 roles 和 role bindings,以控制哪些用户可以获取、列出和监视这些实例。
管理 roles 和 role bindings,以控制Pod指定的Service Account是否可以挂载引用要使用的SharedSecret
CR实例的容器存储接口 (CSI) 卷。
访问包含要共享的密钥的命名空间。
为要在集群中跨命名空间共享的Secret
对象创建一个SharedSecret
CR 实例
$ oc apply -f - <<EOF
apiVersion: sharedresource.openshift.io/v1alpha1
kind: SharedSecret
metadata:
name: my-share
spec:
secretRef:
name: <name of secret>
namespace: <namespace of secret>
EOF
要从Pod访问SharedSecret
自定义资源 (CR) 实例,您可以授予给定的Service Account使用该SharedSecret
CR实例的RBAC权限。
您已为要在集群中跨命名空间共享的密钥创建了SharedSecret
CR 实例。
您必须具有执行以下操作的权限
通过输入oc get sharedsecrets
命令并获得非空列表来发现可用的SharedSecret
CR实例。
确定Pod指定的Service Account是否允许使用给定的SharedSecret
CR实例。也就是说,您可以运行oc adm policy who-can use <特定SharedSecret的标识符>
来查看您的命名空间中的Service Account是否列出。
确定Pod指定的Service Account是否允许使用csi
卷,或者您(作为直接创建Pod的请求用户)是否允许使用csi
卷。有关详细信息,请参阅“了解和管理Pod安全准入”。
如果此列表中的最后两个先决条件均未满足,请创建或请求其他人创建必要的基于角色的访问控制 (RBAC),以便您可以发现 |
使用带有YAML内容的oc apply
命令授予给定的Service Account使用其Pod中的SharedSecret
CR实例的RBAC权限
目前, |
$ oc apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: shared-resource-my-share
namespace: my-namespace
rules:
- apiGroups:
- sharedresource.openshift.io
resources:
- sharedsecrets
resourceNames:
- my-share
verbs:
- use
EOF
使用oc
命令创建与 role 关联的RoleBinding
$ oc create rolebinding shared-resource-my-share --role=shared-resource-my-share --serviceaccount=my-namespace:builder
从Pod访问SharedSecret
CR实例
$ oc apply -f - <<EOF
kind: Pod
apiVersion: v1
metadata:
name: my-app
namespace: my-namespace
spec:
serviceAccountName: default
# containers omitted …. Follow standard use of ‘volumeMounts’ for referencing your shared resource volume
volumes:
- name: my-csi-volume
csi:
readOnly: true
driver: csi.sharedresource.openshift.io
volumeAttributes:
sharedSecret: my-share
EOF
要在集群中跨命名空间共享ConfigMap,您可以为该ConfigMap创建一个SharedConfigMap
自定义资源 (CR) 实例。
您必须具有执行以下操作的权限
在集群范围级别创建sharedconfigmaps.sharedresource.openshift.io
自定义资源定义 (CRD) 的实例。
管理集群中命名空间的 roles 和 role bindings,以控制哪些用户可以获取、列出和监视这些实例。
管理集群中命名空间的 roles 和 role bindings,以控制挂载容器存储接口 (CSI) 卷的Pod中的哪些Service Account可以使用这些实例。
访问包含要共享的密钥的命名空间。
为要在集群中跨命名空间共享的ConfigMap创建一个SharedConfigMap
CR 实例
$ oc apply -f - <<EOF
apiVersion: sharedresource.openshift.io/v1alpha1
kind: SharedConfigMap
metadata:
name: my-share
spec:
configMapRef:
name: <name of configmap>
namespace: <namespace of configmap>
EOF
要从Pod访问SharedConfigMap
自定义资源 (CR) 实例,您可以授予给定的Service Account使用该SharedConfigMap
CR实例的RBAC权限。
您已为要在集群中跨命名空间共享的ConfigMap创建了SharedConfigMap
CR 实例。
您必须具有执行以下操作的权限
通过输入oc get sharedconfigmaps
命令并获得非空列表来发现可用的SharedConfigMap
CR实例。
确定Pod指定的Service Account是否允许使用给定的SharedSecret
CR实例。也就是说,您可以运行oc adm policy who-can use <特定SharedSecret的标识符>
来查看您的命名空间中的Service Account是否列出。
确定Pod指定的Service Account是否允许使用csi
卷,或者您(作为直接创建Pod的请求用户)是否允许使用csi
卷。有关详细信息,请参阅“了解和管理Pod安全准入”。
如果此列表中的最后两个先决条件均未满足,请创建或请求其他人创建必要的基于角色的访问控制 (RBAC),以便您可以发现 |
使用包含 YAML 内容的 oc apply
命令,授予给定的服务账户 RBAC 权限,以便其 Pod 使用 SharedConfigMap
CR 实例。
目前, |
$ oc apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: shared-resource-my-share
namespace: my-namespace
rules:
- apiGroups:
- sharedresource.openshift.io
resources:
- sharedconfigmaps
resourceNames:
- my-share
verbs:
- use
EOF
使用oc
命令创建与 role 关联的RoleBinding
oc create rolebinding shared-resource-my-share --role=shared-resource-my-share --serviceaccount=my-namespace:builder
从 Pod 访问 SharedConfigMap
CR 实例
$ oc apply -f - <<EOF
kind: Pod
apiVersion: v1
metadata:
name: my-app
namespace: my-namespace
spec:
serviceAccountName: default
# containers omitted …. Follow standard use of ‘volumeMounts’ for referencing your shared resource volume
volumes:
- name: my-csi-volume
csi:
readOnly: true
driver: csi.sharedresource.openshift.io
volumeAttributes:
sharedConfigMap: my-share
EOF
共享资源 CSI 驱动程序具有以下值得注意的限制
该驱动程序受容器存储接口 (CSI) 内联临时卷的限制。
readOnly
字段的值必须为 true
。在创建 Pod
时,如果 readOnly
为 false
,则验证准入 Webhook 会拒绝 Pod 创建。如果由于某种原因无法联系验证准入 Webhook,则在 Pod 启动期间进行卷置备时,驱动程序会向 kubelet 返回错误。要求 readOnly
为 true
符合上游 Kubernetes CSI 驱动程序为关联卷应用 SELinux 标签的建议最佳实践。
驱动程序会忽略 FSType
字段,因为它只支持 tmpfs
卷。
驱动程序会忽略 NodePublishSecretRef
字段。相反,它使用带有 use
动词的 SubjectAccessReviews
来评估 Pod 是否可以获取包含 SharedSecret
或 SharedConfigMap
自定义资源 (CR) 实例的卷。
您无法创建名称以 openshift
开头的 SharedSecret
或 SharedConfigMap
自定义资源 (CR) 实例。
共享资源CSI驱动程序功能现已在Red Hat OpenShift 1.1构建中普遍可用。此功能现已在OpenShift Container Platform中弃用。要使用此功能,请确保您使用的是Red Hat OpenShift 1.1构建或更高版本。 |
以下属性会以各种方式影响共享资源 Pod 卷
volumeAttributes
属性中的 refreshResource
属性。
共享资源 CSI 驱动程序配置中的 refreshResources
属性。
volumeAttributes
属性中的 sharedSecret
和 sharedConfigMap
属性。
refreshResource
属性共享资源 CSI 驱动程序会遵守 volumeAttributes
属性中卷的 refreshResource
属性。此属性控制在卷作为 Pod 启动的一部分初始置备**之后**,是否将基础 Secret
或 ConfigMap
对象内容的更新复制到卷中。refreshResource
的默认值为 true
,这意味着内容会更新。
如果共享资源 CSI 驱动程序配置已禁用共享 |
refreshResources
属性您可以使用全局开关来启用或禁用共享资源的刷新。此开关是共享资源 CSI 驱动程序的 csi-driver-shared-resource-config
ConfigMap 中的 refreshResources
属性,您可以在 openshift-cluster-csi-drivers
命名空间中找到它。如果将此 refreshResources
属性设置为 false
,则在卷的初始置备之后,不会更新存储在卷中的任何 Secret
或 ConfigMap
对象相关内容。
使用此共享资源 CSI 驱动程序配置禁用刷新会影响使用共享资源 CSI 驱动程序的集群的所有卷挂载,而不管这些卷的 |
在单个卷的 volumeAttributes
中,必须将 sharedSecret
或 sharedConfigMap
属性设置为 SharedSecret
或 SharedConfigMap
CS 实例的值。否则,在 Pod 启动期间置备卷时,验证会检查该卷的 volumeAttributes
,并在以下情况下向 kubelet 返回错误
sharedSecret
和 sharedConfigMap
属性都指定了值。
sharedSecret
和 sharedConfigMap
属性均未指定值。
sharedSecret
或 sharedConfigMap
属性的值与集群中 SharedSecret
或 SharedConfigMap
CR 实例的名称不对应。
共享资源、Insights Operator 和 OpenShift Container Platform 构建之间的集成简化了在 OpenShift Container Platform 构建中使用 Red Hat 订阅(RHEL 授权)的过程。
以前,在 OpenShift Container Platform 4.9.x 和更早版本中,您需要手动导入凭据并将它们复制到运行构建的每个项目或命名空间。
现在,在 OpenShift Container Platform 4.10 及更高版本中,OpenShift Container Platform 构建可以通过引用共享资源和 Insights Operator 提供的简单内容访问功能来使用 Red Hat 订阅(RHEL 授权)。
简单内容访问功能会将您的订阅凭据导入到众所周知的 Secret
对象中。请参阅以下“其他资源”部分中的链接。
集群管理员会在该 Secret
对象周围创建一个 SharedSecret
自定义资源 (CR) 实例,并向特定项目或命名空间授予权限。特别是,集群管理员会授予 builder
服务帐户使用该 SharedSecret
CR 实例的权限。
在这些项目或命名空间中运行的构建可以挂载引用 SharedSecret
CR 实例及其授权的 RHEL 内容的 CSI 卷。