5.3. 공유 리소스 CSI Driver Operator
이제 Red Hat OpenShift 1.1 빌드 에서 공유 리소스 CSI 드라이버 기능을 사용할 수 있습니다. 이 기능은 OpenShift Container Platform에서 더 이상 사용되지 않습니다. 이 기능을 사용하려면 Red Hat OpenShift 1.1 또는 최신 버전의 빌드를 사용해야 합니다.
클러스터 관리자는 OpenShift Container Platform에서 공유 리소스 CSI 드라이버를 사용하여 Secret
또는 ConfigMap
오브젝트의 콘텐츠가 포함된 인라인 임시 볼륨을 프로비저닝할 수 있습니다. 이렇게 하면 볼륨 마운트를 노출하는 Pod 및 기타 Kubernetes 유형이 OpenShift Container Platform 빌드에서 클러스터의 모든 네임스페이스에서 해당 오브젝트의 콘텐츠를 안전하게 사용할 수 있습니다. 이를 위해 현재 Secret
오브젝트의 SharedSecret
사용자 정의 리소스와 ConfigMap
오브젝트의 SharedConfigMap
사용자 정의 리소스 두 가지 유형의 공유 리소스가 있습니다.
공유 리소스 CSI 드라이버를 활성화하려면 기능 게이트를 사용하여 기능을 활성화해야 합니다.
5.3.1. CSI 정보
스토리지 벤더는 일반적으로 Kubernetes의 일부로 스토리지 드라이버를 제공합니다. CSI(Container Storage Interface) 구현을 통해 타사 공급자는 코어 Kubernetes 코드를 변경하지 않고도 표준 인터페이스를 사용하여 스토리지 플러그인을 제공할 수 있습니다.
CSI Operator는 in-tree 볼륨 플러그인에서 사용할 수 없는 볼륨 스냅샷과 같은 OpenShift Container Platform 사용자 스토리지 옵션을 제공합니다.
5.3.2. 네임스페이스에서 보안 공유
클러스터의 네임스페이스에서 보안을 공유하려면 공유하려는 Secret
오브젝트에 대한 SharedSecret
CR(사용자 정의 리소스) 인스턴스를 생성합니다.
사전 요구 사항
다음 작업을 수행할 수 있는 권한이 있어야 합니다.
-
클러스터 범위 수준에서
sharedsecrets.sharedresource.openshift.io
CRD(사용자 정의 리소스 정의)의 인스턴스를 생성합니다. - 클러스터의 네임스페이스에서 역할 및 역할 바인딩을 관리하여 해당 인스턴스를 가져오고, 나열하고, 조사할 수 있는 사용자를 제어합니다.
-
역할 및 역할 바인딩을 관리하여 Pod에서 지정한 서비스 계정이 사용하려는
SharedSecret
CR 인스턴스를 참조하는 CSI(Container Storage Interface) 볼륨을 마운트할 수 있는지 여부를 제어합니다. - 공유할 보안이 포함된 네임스페이스에 액세스합니다.
프로세스
클러스터의 네임스페이스에서 공유할
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
5.3.3. Pod에서 SharedSecret 인스턴스 사용
Pod에서 SharedSecret
CR(사용자 정의 리소스) 인스턴스에 액세스하려면 지정된 서비스 계정 RBAC 권한을 부여하여 해당 SharedSecret
CR 인스턴스를 사용할 수 있습니다.
사전 요구 사항
-
클러스터의 네임스페이스에서 공유할 보안에 대한
SharedSecret
CR 인스턴스를 생성했습니다. 다음 작업을 수행할 수 있는 권한이 있어야 합니다.
-
oc get sharedsecrets
명령을 입력하고 비어 있지 않은 목록을 다시 가져와서 사용할 수 있는SharedSecret
CR 인스턴스를 검색합니다. -
Pod에서 지정하는 서비스 계정이 지정된
SharedSecret
CR 인스턴스를 사용할 수 있는지 확인합니다. 즉,oc adm policy who-can use <identifier of specific SharedSecret>
를 실행하여 네임스페이스의 서비스 계정이 나열되어 있는지 확인할 수 있습니다. -
Pod에서 지정하는 서비스 계정이
csi
볼륨을 사용할 수 있는지 또는 Pod를 직접 생성한 요청 사용자로csi
볼륨을 사용할 수 있는지 여부를 결정합니다. 자세한 내용은 "Pod 보안 승인 이해 및 관리"를 참조하십시오.
-
이 목록의 마지막 두 사전 요구 사항이 충족되지 않거나 생성하도록 요청하는 경우 SharedSecret
CR 인스턴스를 검색하고 서비스 계정에서 SharedSecret
CR 인스턴스를 사용할 수 있도록 필요한 역할 기반 액세스 제어(RBAC)를 요청합니다.
프로세스
oc apply
with YAML 콘텐츠를 사용하여 Pod에서SharedSecret
CR 인스턴스를 사용하도록 지정된 서비스 계정 RBAC 권한을 부여합니다.참고현재
kubectl
및oc
는 Pod 보안을 중심으로 하는 역할로use
동사를 제한하는 특수 케이스 논리를 하드 코딩했습니다. 따라서oc create role …
을 사용하여SharedSecret
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: - sharedsecrets resourceNames: - my-share verbs: - use EOF
oc
명령을 사용하여 역할과 관련된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
5.3.4. 네임스페이스에서 구성 맵 공유
클러스터의 네임스페이스 간에 구성 맵을 공유하려면 해당 구성 맵에 대한 SharedConfigMap
CR(사용자 정의 리소스) 인스턴스를 생성합니다.
사전 요구 사항
다음 작업을 수행할 수 있는 권한이 있어야 합니다.
-
클러스터 범위 수준에서
sharedconfigmaps.sharedresource.openshift.io
CRD(사용자 정의 리소스 정의)의 인스턴스를 생성합니다. - 클러스터의 네임스페이스에서 역할 및 역할 바인딩을 관리하여 해당 인스턴스를 가져오고, 나열하고, 조사할 수 있는 사용자를 제어합니다.
- 클러스터의 네임스페이스에서 역할 및 역할 바인딩을 관리하여 CSI(Container Storage Interface) 볼륨에서 해당 인스턴스를 사용할 수 있는 Pod의 서비스 계정을 제어합니다.
- 공유할 보안이 포함된 네임스페이스에 액세스합니다.
프로세스
클러스터의 네임스페이스에서 공유할 구성 맵에 대한
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
5.3.5. Pod에서 SharedConfigMap 인스턴스 사용
다음 단계
Pod에서 SharedConfigMap
CR(사용자 정의 리소스) 인스턴스에 액세스하려면 지정된 서비스 계정 RBAC 권한을 부여하여 해당 SharedConfigMap
CR 인스턴스를 사용할 수 있습니다.
사전 요구 사항
-
클러스터의 네임스페이스에서 공유할 구성 맵에 대해
SharedConfigMap
CR 인스턴스를 생성했습니다. 다음 작업을 수행할 수 있는 권한이 있어야 합니다.
-
oc get sharedconfigmaps
명령을 입력하고 비어 있지 않은 목록을 다시 가져와서 사용할 수 있는SharedConfigMap
CR 인스턴스를 검색합니다. -
Pod에서 지정하는 서비스 계정이 지정된
SharedSecret
CR 인스턴스를 사용할 수 있는지 확인합니다. 즉,oc adm policy who-can use <identifier of specific SharedSecret>
를 실행하여 네임스페이스의 서비스 계정이 나열되어 있는지 확인할 수 있습니다. -
Pod에서 지정하는 서비스 계정이
csi
볼륨을 사용할 수 있는지 또는 Pod를 직접 생성한 요청 사용자로csi
볼륨을 사용할 수 있는지 여부를 결정합니다. 자세한 내용은 "Pod 보안 승인 이해 및 관리"를 참조하십시오.
-
이 목록의 마지막 두 사전 요구 사항이 충족되지 않거나 생성하도록 요청하는 경우 SharedConfigMap
CR 인스턴스를 검색하고 서비스 계정에서 SharedConfigMap
CR 인스턴스를 사용할 수 있도록 필요한 역할 기반 액세스 제어(RBAC)를 요청합니다.
프로세스
oc apply
with YAML 콘텐츠를 사용하여 Pod에서SharedConfigMap
CR 인스턴스를 사용하도록 지정된 서비스 계정 RBAC 권한을 부여합니다.참고현재
kubectl
및oc
는 Pod 보안을 중심으로 하는 역할로use
동사를 제한하는 특수 케이스 논리를 하드 코딩했습니다. 따라서oc create role …
을 사용하여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
명령을 사용하여 역할과 관련된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
5.3.6. 공유 리소스 CSI 드라이버에 대한 추가 지원 제한 사항
공유 리소스 CSI 드라이버에는 다음과 같은 중요한 제한 사항이 있습니다.
- 드라이버에는 CSI(Container Storage Interface) 인라인 임시 볼륨의 제한 사항이 적용됩니다.
-
readOnly
필드의 값은true
여야 합니다.Pod
생성 시readOnly
가false
인 경우 검증 승인 Webhook에서 Pod 생성을 거부합니다. 어떤 이유로 Pod를 시작하는 동안 볼륨 프로비저닝에서 검증 승인 Webhook에 연결할 수 없는 경우 드라이버는 kubelet에 오류를 반환합니다.readOnly
요구가true
인 것은 업스트림 Kubernetes CSI 드라이버에서 SELinux 레이블을 관련 볼륨에 적용하기 위한 제안된 모범 사례를 유지하는 것입니다. -
드라이버는
tmpfs
볼륨만 지원하므로FSType
필드를 무시합니다. -
드라이버는
NodePublishSecretRef
필드를 무시합니다. 대신use
동사와 함께SubjectAccessReviews
를 사용하여 Pod가SharedSecret
또는SharedConfigMap
CR(사용자 정의 리소스) 인스턴스가 포함된 볼륨을 가져올 수 있는지 여부를 평가합니다. -
이름이
openshift
로 시작하는SharedSecret
또는SharedConfigMap
CR(사용자 정의 리소스) 인스턴스를 생성할 수 없습니다.
5.3.7. 공유 리소스 Pod 볼륨의 VolumeAttributes에 대한 추가 세부 정보
이제 Red Hat OpenShift 1.1 빌드 에서 공유 리소스 CSI 드라이버 기능을 사용할 수 있습니다. 이 기능은 OpenShift Container Platform에서 더 이상 사용되지 않습니다. 이 기능을 사용하려면 Red Hat OpenShift 1.1 또는 최신 버전의 빌드를 사용해야 합니다.
다음 속성은 다양한 방식으로 공유 리소스 Pod 볼륨에 영향을 미칩니다.
-
volumeAttributes
속성의refreshResource
속성입니다. -
공유 리소스 CSI 드라이버 구성의
refreshResources
속성입니다. -
volumeAttributes
속성의sharedSecret
및sharedConfigMap
속성입니다.
5.3.7.1. refreshResource
특성
공유 리소스 CSI 드라이버는 볼륨의 volumeAttributes
속성의 refreshResource
특성을 준수합니다. 이 속성은 볼륨을 처음에 Pod 시작의 일부로 프로비저닝한 후 기본 Secret
또는 ConfigMap
오브젝트의 콘텐츠 업데이트가 볼륨에 복사되는지 여부를 제어합니다. refreshResource
의 기본값은 true
이며, 이는 콘텐츠가 업데이트됨을 의미합니다.
공유 리소스 CSI 드라이버 구성에서 공유 SharedSecret
및 SharedConfigMap
CR(사용자 정의 리소스) 인스턴스의 새로 고침을 비활성화한 경우 volumeAttribute
속성의 refreshResource
속성이 적용되지 않습니다. 이 속성의 목적은 새로 고침이 일반적으로 허용되는 경우 특정 볼륨 마운트에 대한 새로 고침을 비활성화하는 것입니다.
5.3.7.2. refreshResources
특성
글로벌 스위치를 사용하여 공유 리소스의 새로 고침을 활성화하거나 비활성화할 수 있습니다. 이 스위치는 openshift-cluster-csi-drivers
네임스페이스에서 찾을 수 있는 공유 리소스 CSI 드라이버의 csi-driver-shared-resource-config
구성 맵의 refreshResources
속성입니다. 이 refreshResources
속성을 false
로 설정하면 볼륨에 저장된 Secret
또는 ConfigMap
오브젝트 관련 콘텐츠가 볼륨의 초기 프로비저닝 후 업데이트되지 않습니다.
새로 고침을 비활성화하려면 이 공유 리소스 CSI 드라이버 구성을 사용하면 해당 볼륨의 volumeAttributes
속성의 refreshResource
속성에 관계없이 공유 리소스 CSI 드라이버를 사용하는 모든 클러스터의 볼륨 마운트에 영향을 미칩니다.
5.3.7.3. Pod에 대한 공유 리소스 볼륨을 프로비저닝하기 전에 volumeAttributes 검증
단일 볼륨의 volumeAttributes
에서 sharedSecret
또는 sharedConfigMap
특성을 SharedSecret
또는 SharedConfigMap
CS 인스턴스의 값으로 설정해야 합니다. 그러지 않으면 Pod를 시작하는 동안 볼륨이 프로비저닝되면 검증에서 해당 볼륨의 volumeAttributes
를 확인하고 다음 조건에서 kubelet에 오류를 반환합니다.
-
sharedSecret
및sharedConfigMap
속성에는 모두 지정된 값이 있습니다. -
sharedSecret
또는sharedConfigMap
속성에는 지정된 값이 없습니다. -
sharedSecret
또는sharedConfigMap
속성의 값은 클러스터의SharedSecret
또는SharedConfigMap
CR 인스턴스의 이름과 일치하지 않습니다.
5.3.8. 공유 리소스, Insights Operator 및 OpenShift Container Platform 빌드 간 통합
OpenShift Container Platform 빌드에서 공유 리소스, Insights Operator 및 OpenShift Container Platform 빌드 간의 통합을 통해 RHEL(Red Hat 서브스크립션)을 더 쉽게 사용할 수 있습니다.
이전 버전에서는 OpenShift Container Platform 4.9.x 및 이전 버전에서 수동으로 인증 정보를 가져와 빌드를 실행 중인 각 프로젝트 또는 네임스페이스에 복사했습니다.
이제 OpenShift Container Platform 4.10 이상에서 OpenShift Container Platform 빌드에서 공유 리소스 및 Insights Operator에서 제공하는 간단한 콘텐츠 액세스 기능을 참조하여 RHEL(Red Hat 서브스크립션)을 사용할 수 있습니다.
-
간단한 콘텐츠 액세스 기능은 서브스크립션 인증 정보를 잘 알려진
Secret
오브젝트로 가져옵니다. 다음 "추가 리소스" 섹션의 링크를 참조하십시오. -
클러스터 관리자는
Secret
오브젝트 주위에SharedSecret
CR(사용자 정의 리소스) 인스턴스를 생성하고 특정 프로젝트 또는 네임스페이스에 권한을 부여합니다. 특히 클러스터 관리자는builder
서비스 계정에 해당SharedSecret
CR 인스턴스를 사용할 수 있는 권한을 부여합니다. -
해당 프로젝트 또는 네임스페이스 내에서 실행되는 빌드는
SharedSecret
CR 인스턴스 및 해당 RHEL 콘텐츠를 참조하는 CSI 볼륨을 마운트할 수 있습니다.