5.3. 공유 리소스 CSI Driver Operator


클러스터 관리자는 OpenShift Container Platform의 공유 리소스 CSI 드라이버를 사용하여 Secret 또는 ConfigMap 오브젝트의 내용이 포함된 인라인 임시 볼륨을 프로비저닝할 수 있습니다. 이렇게 하면 볼륨 마운트를 노출하는 Pod 및 기타 Kubernetes 유형은 물론 OpenShift Container Platform 빌드에서 클러스터의 모든 네임스페이스에서 해당 오브젝트의 콘텐츠를 안전하게 사용할 수 있습니다. 이를 위해 현재 Secret 오브젝트의 SharedSecret 사용자 정의 리소스와 ConfigMap 오브젝트에 대한 SharedConfigMap 사용자 정의 리소스의 두 가지 유형의 공유 리소스가 있습니다.

중요

공유 리소스 CSI 드라이버는 기술 프리뷰 기능 전용입니다. Technology Preview 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

참고

공유 리소스 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(사용자 정의 리소스) 인스턴스에 액세스하려면 해당 SharedSecret CR 인스턴스를 사용할 수 있는 지정된 서비스 계정 RBAC 권한을 부여합니다.

사전 요구 사항

  • 클러스터의 네임스페이스 간에 공유할 시크릿에 대한 SharedSecret CR 인스턴스를 생성했습니다.
  • 다음 작업을 수행할 수 있는 권한이 있어야 합니다.

    • 빌드 구성을 생성하고 빌드를 시작합니다.
    • oc get sharedsecrets 명령을 입력하고 비어 있지 않은 목록을 다시 가져와서 사용할 수 있는 SharedSecret CR 인스턴스를 검색합니다.
    • 네임스페이스에서 사용 가능한 빌더 서비스 계정이 지정된 SharedSecret CR 인스턴스를 사용할 수 있는지 확인합니다. 즉 특정 SharedSecret>의 < identifier>를 사용하여 네임스페이스의 builder 서비스 계정이 나열되는지 확인하는 oc adm policy who-can use <identifier of specific SharedSecret >을 실행할 수 있습니다.
참고

이 목록에 있는 마지막 두 사전 요구 사항이 모두 충족되거나 생성하거나 사용자에게 생성을 요청하면 SharedSecret CR 인스턴스를 검색하고 서비스 계정이 SharedSecret CR 인스턴스를 사용할 수 있도록 필요한 RBAC(역할 기반 액세스 제어)를 제공합니다.

절차

  1. YAML 콘텐츠와 함께 oc apply 를 사용하여 Pod에서 SharedSecret CR 인스턴스를 사용하도록 지정된 서비스 계정 RBAC 권한을 부여합니다.

    참고

    현재 kubectloc사용 동사를 Pod 보안에 중심으로 제한하는 특수 케이스 논리를 하드 코딩했습니다. 따라서 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
  2. oc 명령을 사용하여 역할과 관련된 RoleBinding 을 만듭니다.

    $ oc create rolebinding shared-resource-my-share --role=shared-resource-my-share --serviceaccount=my-namespace:builder
  3. 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의 서비스 계정을 제어합니다.
  • 공유할 보안이 포함된 네임스페이스에 액세스합니다.

절차

  1. 클러스터의 네임스페이스에서 공유할 구성 맵에 대해 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 인스턴스를 검색합니다.
    • 네임스페이스에서 사용 가능한 빌더 서비스 계정이 지정된 SharedSecret CR 인스턴스를 사용할 수 있는지 확인합니다. 즉 특정 SharedSecret>의 < identifier>를 사용하여 네임스페이스의 builder 서비스 계정이 나열되는지 확인하는 oc adm policy who-can use <identifier of specific SharedSecret >을 실행할 수 있습니다.
참고

이 목록에 있는 마지막 두 사전 요구 사항이 모두 충족되거나 생성 또는 생성하도록 사용자에게 필요한 RBAC(역할 기반 액세스 제어)가 없는 경우 SharedConfigMap CR 인스턴스를 검색하고 서비스 계정을 사용하여 SharedConfigMap CR 인스턴스를 사용할 수 있도록 필요한 RBAC(역할 기반 액세스 제어)를 제공합니다.

절차

  1. oc apply with YAML 콘텐츠를 사용하여 Pod에서 SharedConfigMap CR 인스턴스를 사용할 수 있도록 지정된 서비스 계정 RBAC 권한을 부여합니다.

    참고

    현재 kubectloc사용 동사를 Pod 보안에 중심으로 제한하는 특수 케이스 논리를 하드 코딩했습니다. 따라서 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
  2. oc 명령을 사용하여 역할과 관련된 RoleBinding 을 만듭니다.

    oc create rolebinding shared-resource-my-share --role=shared-resource-my-share --serviceaccount=my-namespace:builder
  3. 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를 시작하는 동안 볼륨 프로비저닝에서 드라이버에서 kubelet에 오류를 반환합니다. 이 제한은 업스트림 Kubernetes CSI 드라이버에 제안된 모범 사례를 유지하여 관련 볼륨에 SELinux 레이블을 적용하는 것입니다.
  • 드라이버는 tmpfs 볼륨만 지원하므로 FSType 필드를 무시합니다.
  • 드라이버는 NodePublishSecretRef 필드를 무시합니다. 대신, SubjectAccessReviewsuse 동사와 함께 사용하여 Pod에서 SharedSecret 또는 SharedConfigMap 사용자 정의 리소스(CR) 인스턴스가 포함된 볼륨을 가져올 수 있는지 평가합니다.

5.3.7. 공유 리소스 Pod 볼륨의 VolumeAttributes에 대한 추가 세부 정보

다음 속성은 다양한 방식으로 공유 리소스 Pod 볼륨에 영향을 미칩니다.

  • volumeAttributes 속성의 refreshResource 특성입니다.
  • 공유 리소스 CSI 드라이버 구성의 refreshResources 속성입니다.
  • volumeAttributes 속성의 sharedSecretsharedConfigMap 속성입니다.

5.3.7.1. refreshResource 특성

공유 리소스 CSI Driver는 볼륨의 volumeAttributes 속성에서 refreshResource 특성을 준수합니다. 이 속성은 볼륨을 처음 Pod 시작의 일부로 프로비저닝된 기본 Secret 또는 ConfigMap 오브젝트의 콘텐츠 업데이트를 볼륨에 복사할지 여부를 제어합니다. refreshResource 의 기본값은 true 이며 이는 콘텐츠가 업데이트됨을 의미합니다.

중요

공유 리소스 CSI 드라이버 구성에서 공유 SharedSecretSharedConfigMap CR(사용자 정의 리소스) 인스턴스 새로 고침을 비활성화한 경우 volumeAttribute 속성의 refreshResource 속성이 적용되지 않습니다. 이 속성의 목적은 일반적으로 새로 고침이 허용될 때 특정 볼륨 마운트에 대한 새로 고침을 비활성화하는 것입니다.

5.3.7.2. refreshResources 특성

글로벌 스위치를 사용하여 공유 리소스의 새로 고침을 활성화하거나 비활성화할 수 있습니다. 이 스위치는 공유 리소스 CSI 드라이버의 csi-driver-shared-resource-config 구성 맵의 refreshResources 속성이며 openshift-cluster-csi-drivers 네임스페이스에서 찾을 수 있습니다. 이 refreshResources 속성을 false 로 설정하면 볼륨의 초기 프로비저닝 후 볼륨에 저장된 Secret 또는 ConfigMap 오브젝트 관련 콘텐츠가 업데이트되지 않습니다.

중요

이 공유 리소스 CSI 드라이버 구성을 사용하여 새로 고침을 비활성화하면 해당 볼륨의 volumeAttributes 속성의 refreshResource 속성과 관계없이 공유 리소스 CSI 드라이버를 사용하는 모든 클러스터의 볼륨 마운트에 영향을 미칩니다.

5.3.7.3. Pod의 공유 리소스 볼륨을 프로비저닝하기 전에 volumeAttributes 검증

단일 볼륨의 volumeAttributes 에서 sharedSecret 또는 sharedConfigMap 특성을 SharedSecret 또는 SharedConfigMap CS 인스턴스의 값으로 설정해야 합니다. 그렇지 않으면 Pod 시작 중에 볼륨이 프로비저닝되면 검증에서 해당 볼륨의 volumeAttributes 를 확인하고 다음 조건에서 kubelet에 오류를 반환합니다.

  • sharedSecretsharedConfigMap 특성에 모두 지정된 값이 있습니다.
  • sharedSecret 또는 sharedConfigMap 속성에는 지정된 값이 없습니다.
  • sharedSecret 또는 sharedConfigMap 속성의 값은 클러스터의 SharedSecret 또는 SharedConfigMap CR 인스턴스 이름과 일치하지 않습니다.

5.3.8. 공유 리소스, Insights Operator 및 OpenShift Container Platform 빌드 간 통합

공유 리소스, 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가 제공하는 간단한 콘텐츠 액세스 기능을 참조하여 RHEL 인타이틀먼트(Red Hat 서브스크립션)를 사용할 수 있습니다.

  • 간단한 콘텐츠 액세스 기능은 서브스크립션 인증 정보를 잘 알려진 Secret 오브젝트에 가져옵니다. 다음 "추가 리소스" 섹션의 링크를 참조하십시오.
  • 클러스터 관리자는 해당 Secret 오브젝트에 대해 SharedSecret CR(사용자 정의 리소스) 인스턴스를 생성하고 특정 프로젝트 또는 네임스페이스에 권한을 부여합니다. 특히 클러스터 관리자는 builder 서비스 계정에 SharedSecret CR 인스턴스를 사용할 수 있는 권한을 부여합니다.
  • 해당 프로젝트 또는 네임스페이스 내에서 실행되는 빌드는 SharedSecret CR 인스턴스와 권한이 있는 RHEL 콘텐츠를 참조하는 CSI 볼륨을 마운트할 수 있습니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.