共有リソースの使用


builds for Red Hat OpenShift 1.3

Shared Resources CSI Driver Operator の使用

Red Hat OpenShift Documentation Team

概要

このドキュメントでは、Shared Resources CSI Driver を使用する手順の例を示します。

第1章 Shared Resource CSI Driver Operator

ストレージベンダーはこれまで Kubernetes の一部としてストレージドライバーを提供してきました。Container Storage Interface (CSI) の実装により、サードパーティープロバイダーは、Kubernetes のコアコードを変更することなく、標準インターフェイスを使用してストレージプラグインを提供できます。CSI Operator は、in-tree のボリュームプラグインでは不可能なボリュームスナップショットなどのストレージオプションを Builds ユーザーに提供します。

Shared Resource CSI Driver は特殊なタイプの CSI ドライバーです。これを使用すると、クラスター管理者は csi ボリュームタイプを使用して、namespace 間で Secret オブジェクトと ConfigMap オブジェクトをセキュアに共有できます。Shared Resource CSI Driver は、インラインの一時ボリュームをプロビジョニングし、Pod と OpenShift Container Platform Builds がこれらの共有リソースを使用できるようにします。

Shared Resource CSI Driver は、次の種類のカスタムリソースをサポートしています。

  • Secret オブジェクトを共有するための SharedSecret カスタムリソース
  • ConfigMap オブジェクトを共有するための SharedConfigMap カスタムリソース

1.1. namespace 間での Secret オブジェクトの共有

Secret オブジェクトは、パスワード、OAuth トークン、SSH 鍵などの機密情報を保存および管理するために使用されます。SharedSecret カスタムリソース (CR) を使用すると、Secret オブジェクトを手動で複製することなく、クラスター内の異なる namespace 間でオブジェクトをセキュアに共有できます。Secret オブジェクトを共有すると、機密データの情報源が一元化され、許可された namespace がそのデータに確実にアクセスできるようになります。

1.1.1. SharedSecret カスタムリソースの作成

SharedSecret カスタムリソース (CR) を作成すると、namespace 間で Secret オブジェクトを共有できます。

前提条件

  • 他の namespace で共有する Secret オブジェクトを作成した。Secret オブジェクトを作成するには、「Secret の作成」を参照してください。
  • クラスターにサブスクライブし、Insights Operator を通じてエンタイトルメントキーを同期した。
  • 次の操作を実行するための権限がある。

    • クラスタースコープレベルで sharedsecrets.sharedresource.openshift.io CR を作成する。
    • SharedSecret CR 用の ClusterRole オブジェクトを作成する。
    • Shared Resource CSI Driver の Role および RoleBinding オブジェクトを作成する。
    • ユーザーを制御するために、クラスター内の namespace 全体のロールとロールバインディングを管理する。
    • Pod によって指定されたサービスアカウントが、SharedSecret CR を使用して、Secret オブジェクトを参照する CSI ボリュームをマウントできるように、ロールとロールバインディングを管理する。
    • 共有する Secret オブジェクトが含まれている namespace にアクセスする。

手順

  1. 次の設定例を使用して、Shared Resource CSI Driver に SharedSecret オブジェクトへのアクセス権を付与する Role オブジェクトと RoleBinding オブジェクトを作成します。

    Role オブジェクトの例

    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 Toggle word wrap

    1
    Role CR の名前。

    RoleBinding オブジェクトの例

    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 Toggle word wrap

    1
    RoleBinding CR の名前。
    2
    Role CR の名前。
    3
    ServiceAccount CR の名前。
  2. 次の設定例を使用して、SharedSecret CR を作成します。

    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 Toggle word wrap
    1
    <name_of_the_source_namespace> は、SharedSecret CR の名前に置き換えます。
  3. 次の設定例を使用して、参照される共有リソースを使用するための RBAC 権限を付与する ClusterRole オブジェクトを作成します。

    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 Toggle word wrap
    1
    ClusterRole CR の名前。

1.1.2. Pod での SharedSecret カスタムリソースの使用

Pod から SharedSecret カスタムリソース (CR) にアクセスするには、サービスアカウントにロールベースのアクセス制御 (RBAC) 権限を付与します。

前提条件

  • クラスター内の namespace 間で共有する Secret オブジェクト用の SharedSecret CR インスタンスを作成した。
  • 次の操作を実行するための権限がある。

    • oc adm policy who-can use <sharedsecret_identifier> コマンドを実行して、サービスアカウントが SharedSecret CR を使用できるかどうか、およびサービスアカウントが namespace にリストされるかどうかを確認する。
    • Pod のサービスアカウントが csi ボリュームを使用できることを確認する。ユーザーとして Pod を作成した場合は、ユーザーが csi ボリュームを使用できることを確認する。
注記

最後の 2 つの前提条件を満たせない場合は、クラスター管理者に必要な RBAC 権限を設定してもらうことで、サービスアカウントに SharedSecret CR の使用を許可できるようになります。

手順

  1. ロールに関連付けられた RoleBinding オブジェクトをクラスター内に作成し、共有リソースを使用する権限をサービスアカウントに付与します。次の設定例を参照してください。

    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 Toggle word wrap
    1
    RoleBinding CR の名前。
    2
    <service_account_name> は、アプリケーションのサービスアカウント名に置き換えます。
  2. 共有リソース csi ドライバーを、csi ボリュームを受け入れる Pod またはその他のリソースにマウントします。次の設定例を参照してください。

    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 Toggle word wrap
    1
    <app_namespace> は、アプリケーションの namespace 名に置き換えます。
    2
    sharedSecret 属性の値は、SharedSecret CR の名前と同じである必要があります。
    重要

    sharedSecret 属性の値が SharedSecret インスタンスの名前と一致しない場合、Pod は起動に失敗します。

1.2. namespace 間での ConfigMap オブジェクトの共有

ConfigMap オブジェクトには、アプリケーションの URL や機能のフラグなど、機密情報でない設定データが格納されます。SharedConfigMap カスタムリソース (CR) を使用すると、ConfigMap オブジェクトを手動で複製することなく、クラスター内の複数の namespace 間でオブジェクトをセキュアに共有できます。ConfigMap オブジェクトを共有することで、設定データの情報源が一元化され、クラスター全体の一貫性が確保されます。

1.2.1. SharedConfigMap カスタムリソースの作成

SharedConfigMap カスタムリソース (CR) インスタンスを作成すると、namespace 間で ConfigMap オブジェクトを共有できます。

前提条件

  • 他の namespace で共有する ConfigMap オブジェクトを作成した。ConfigMap オブジェクトを作成するには、「入力シークレットおよび ConfigMap の追加」を参照してください。
  • 次の操作を実行するための権限がある。

    • クラスタースコープレベルで sharedconfigmaps.sharedresource.openshift.io CR を作成する。
    • SharedConfigMap CR の ClusterRole オブジェクトを作成する。
    • Shared Resource Container Storage Interface (CSI) Driver の Role および RoleBinding オブジェクトを作成する。
    • インスタンスを取得、リスト表示、監視できるユーザーを制御するために、クラスター内の namespace 全体のロールとロールバインディングを管理する。
    • Pod によって指定されたサービスアカウントが、SharedConfigMap CR を使用して、ConfigMap オブジェクトを参照する csi ボリュームをマウントできるように、ロールとロールバインディングを管理する。
    • 共有する ConfigMap オブジェクトが含まれている namespace にアクセスする。

手順

  1. Shared Resource CSI Driver に ConfigMap オブジェクトへのアクセス権を付与するための Role および RoleBinding オブジェクトを作成します。次の設定例を参照してください。

    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"]
    Copy to Clipboard Toggle word wrap

    1
    <name_of_the_source_namespace> は、ソース 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
    Copy to Clipboard Toggle word wrap

    1
    <name_of_the_source_namespace> は、ソース namespace の名前に置き換えます。
    2
    Shared Resource CSI Driver DaemonSet 用のサービスアカウントのリストを指定します。builds for Red Hat OpenShift でデプロイされた場合、サービスアカウント名は csi-driver-shared-resource になり、namespace は Builds for Red Hat OpenShift Operator がデプロイされている namespace と同じになります。
  2. クラスター内の namespace 間で共有する ConfigMap オブジェクト用の SharedConfigMap CR を作成します。次の例はサンプル設定を示しています。

    apiVersion: sharedresource.openshift.io/v1alpha1
    kind: SharedConfigMap
    metadata:
      name: share-test-config 
    1
    
    spec:
      configMapRef:
        name: shared-config
        namespace: <name_of_the_source_namespace> 
    2
    Copy to Clipboard Toggle word wrap
    1
    SharedConfigMap CR の名前を指定します。
    2
    <name_of_the_source_namespace> は、ソース namespace の名前に置き換えます。
  3. 参照される共有リソースを使用するためのロールベースアクセス制御 (RBAC) 権限を付与する ClusterRole CR インスタンスを作成します。次の例はサンプル設定を示しています。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: <cluster_role_name> 
    1
    
    rules:
      - apiGroups:
          - sharedresource.openshift.io
        resources:
          - sharedconfigmaps
        resourceNames:
          - share-test-config 
    2
    
        verbs:
          - use
    Copy to Clipboard Toggle word wrap
    1
    <cluster_role_name> は、クラスターロールの名前に置き換えます。
    2
    SharedSecret CR の名前を指定します。

1.2.2. Pod での SharedConfigMap カスタムリソースの使用

Pod から SharedConfigMap カスタムリソース (CR) にアクセスするには、その SharedConfigMap CR を使用するために必要なロールベースアクセス制御 (RBAC) 権限を、関連するサービスアカウントに付与する必要があります。

前提条件

  • クラスター内の namespace 間で共有する config map の SharedConfigMap CR インスタンスを作成した。
  • 次の操作を実行するための権限がある。

    • oc get sharedconfigmaps コマンドを実行して、SharedConfigMap CR インスタンスのリストを取得します。
    • oc adm policy who-can use <sharedsecret_identifier> コマンドを実行して、サービスアカウントが SharedSecret CR を使用できるかどうか、およびサービスアカウントが namespace にリストされるかどうかを確認する。
    • oc describe clusterrole <roleName> コマンドを実行して、Pod のサービスアカウントが csi ボリュームを使用できることを確認する。ユーザーとして Pod を作成した場合は、ユーザーが csi ボリュームを使用できることを確認する。
注記

最後の 2 つの前提条件を満たせない場合は、クラスター管理者に RBAC 権限を付与してもらうことで、サービスアカウントが SharedConfigMap CR を使用できるようになります。

手順

  1. ロールに関連付けられた 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
    Copy to Clipboard Toggle word wrap
    1
    <app_namespace> は、アプリケーションの namespace 名に置き換えます。
    2
    <service_account_name> は、アプリケーションのサービスアカウント名に置き換えます。
  2. Shared Resource Container Storage Interface (CSI) Driver を、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-config 
    2
    Copy to Clipboard Toggle word wrap
    1
    <app_namespace> は、アプリケーションの namespace 名に置き換えます。
    2
    sharedConfigMap オブジェクトの名前を指定します。
    重要

    sharedConfigMap 属性の値が sharedConfigMap インスタンスの名前と一致しない場合、Pod は起動に失敗します。

1.3. RHEL エンタイトルメントを使用したイメージのビルド

Red Hat Enterprise Linux (RHEL) エンタイトルメントをお持ちの場合は、Insights Operator が Simple Content Access (SCA) 機能を使用してエンタイトルメントキーを自動的に管理します。SCA を使用すると、RHEL システムがサブスクリプションコンテンツにアクセスできるため、エンタイトルメントキーの手動管理が不要になります。Insights Operator は、SCA のエンタイトルメントキーをインポートし、openshift-config-managed namespace の etc-pki-entitlement という名前のシークレットに保存します。

以前は、クラスター管理者が etc-pki-entitlement シークレットを必要な namespace に手動でコピーしていました。OpenShift Container Platform 4.10 以降、builds for Red Hat OpenShift は、Shared Resource Container Storage Interface (CSI) Driver Operator を使用して、openshift-config-managed namespace の etc-pki-entitlement シークレットを、他の namespace と共有できます。

1.3.1. namespace 間での RHEL エンタイトルメントの共有

SharedSecret オブジェクトを使用すると、クラスターの RHEL エンタイトルメントキーを、Builds の namespace 間でセキュアに共有および同期できます。

前提条件

  • 次の操作を実行するための権限がある。

    • SharedSecret オブジェクトを作成する。
    • ビルド設定を作成し、ビルドを開始する。
    • oc get sharedsecrets コマンドを実行して、使用可能な SharedSecret カスタムリソース (CR) インスタンスを検出する。
    • oc adm policy who-can use <sharedsecret_identifier> コマンドを実行して、サービスアカウントが SharedSecret CR を使用できるかどうか、およびサービスアカウントが namespace にリストされるかどうかを確認する。
注記

最後の 2 つの前提条件を満たせない場合は、クラスター管理者に必要な RBAC 権限を設定してもらうことで、サービスアカウントに SharedSecret CR の使用を許可できるようになります。

手順

  1. 次のコマンドを実行して、クラスターのエンタイトルメントシークレットを含む SharedSecret オブジェクトインスタンスを作成します。

    $ oc apply -f -<<EOF
    apiVersion: sharedresource.openshift.io/v1alpha1
    kind: SharedSecret
    metadata:
      name: etc-pki-entitlement
    spec:
      secretRef:
        name: etc-pki-entitlement
        namespace: openshift-config-managed
    EOF
    Copy to Clipboard Toggle word wrap
  2. 次の設定例を使用して、SharedSecret オブジェクトにアクセスする権限を付与する ClusterRole オブジェクトを作成します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: use-share-etc-pki-entitlement 
    1
    
    rules:
      - apiGroups:
          - sharedresource.openshift.io
        resources:
          - sharedsecrets
        resourceNames:
          - etc-pki-entitlement
        verbs:
          - use
    Copy to Clipboard Toggle word wrap
    1
    ClusterRole CR の名前。
  3. Shared Resources CSI Driver に SharedSecret オブジェクトにアクセスする権限を付与する Role および RoleBinding オブジェクトを作成します。

    Role オブジェクトの例

    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 Toggle word wrap

    1
    Role CR の名前。

    RoleBinding オブジェクトの例

    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
    subjects:
      - kind: ServiceAccount
        name: csi-driver-shared-resource
        namespace: openshift-builds 
    2
    Copy to Clipboard Toggle word wrap

    1
    RoleBinding CR の名前。
    2
    openshift-builds がインストールされている namespace の名前。
  4. ビルドが実行される namespace に、builder および pipeline サービスアカウントの RoleBinding オブジェクトを作成します。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: use-share-etc-pki-entitlement 
    1
    
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: use-share-etc-pki-entitlement
    subjects:
      - kind: ServiceAccount
        name: pipeline
      - kind: ServiceAccount
        name: builder
    Copy to Clipboard Toggle word wrap
    1
    builder および pipeline サービスアカウントの RoleBinding CR の名前。
    注記

    SharedSecret オブジェクトを使用するサービスアカウントは、OpenShift コントローラーによって作成および管理されます。

  5. buildah ビルドストラテジーを使用して SharedSecret オブジェクトをマウントします。以下の例を参照してください。

    $ oc apply -f -<<EOF
    apiVersion: shipwright.io/v1beta1
    kind: Build
    metadata:
      name: buildah-rhel
    spec:
      source:
        type: Git
          git:
          url: https://github.com/redhat-openshift-builds/samples
        contextDir: buildah-build
      strategy:
        name: buildah
        kind: ClusterBuildStrategy
      paramValues:
      - name: dockerfile
        value: DockerFile
      volumes:
      - csi:
          driver: csi.sharedresource.openshift.io
          readOnly: true 
    1
    
          volumeAttributes:
            sharedSecret: <sharedsecret_object_name> 
    2
    
        name: etc-pki-entitlement
      output:
        image: <output_image_location> 
    3
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    ビルドで共有リソースをマウントするには、readOnlytrue に設定する必要があります。
    2
    <sharedsecret_object_name> は、ビルドに含める SharedSecret オブジェクトの名前に置き換えます。
    3
    <output_image_location> は、ビルドしたイメージをプッシュする場所に置き換えます。

Legal Notice

Copyright © 2025 Red Hat

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat