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.ioCR を作成する。 -
SharedConfigMapCR のClusterRoleオブジェクトを作成する。 -
Shared Resource Container Storage Interface (CSI) Driver の
RoleおよびRoleBindingオブジェクトを作成する。 - インスタンスを取得、リスト表示、監視できるユーザーを制御するために、クラスター内の namespace 全体のロールとロールバインディングを管理する。
-
Pod によって指定されたサービスアカウントが、
SharedConfigMapCR を使用して、ConfigMapオブジェクトを参照するcsiボリュームをマウントできるように、ロールとロールバインディングを管理する。 -
共有する
ConfigMapオブジェクトが含まれている namespace にアクセスする。
-
クラスタースコープレベルで
手順
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"]- 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クラスター内の namespace 間で共有する
ConfigMapオブジェクト用のSharedConfigMapCR を作成します。次の例はサンプル設定を示しています。apiVersion: sharedresource.openshift.io/v1alpha1 kind: SharedConfigMap metadata: name: share-test-config1 spec: configMapRef: name: shared-config namespace: <name_of_the_source_namespace>2 参照される共有リソースを使用するためのロールベースアクセス制御 (RBAC) 権限を付与する
ClusterRoleCR インスタンスを作成します。次の例はサンプル設定を示しています。apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: <cluster_role_name>1 rules: - apiGroups: - sharedresource.openshift.io resources: - sharedconfigmaps resourceNames: - share-test-config2 verbs: - use
1.2.2. Pod での SharedConfigMap カスタムリソースの使用 リンクのコピーリンクがクリップボードにコピーされました!
Pod から SharedConfigMap カスタムリソース (CR) にアクセスするには、その SharedConfigMap CR を使用するために必要なロールベースアクセス制御 (RBAC) 権限を、関連するサービスアカウントに付与する必要があります。
前提条件
-
クラスター内の namespace 間で共有する config map の
SharedConfigMapCR インスタンスを作成した。 次の操作を実行するための権限がある。
-
oc get sharedconfigmapsコマンドを実行して、SharedConfigMapCR インスタンスのリストを取得します。 -
oc adm policy who-can use <sharedsecret_identifier>コマンドを実行して、サービスアカウントがSharedSecretCR を使用できるかどうか、およびサービスアカウントが namespace にリストされるかどうかを確認する。 -
oc describe clusterrole <roleName>コマンドを実行して、Pod のサービスアカウントがcsiボリュームを使用できることを確認する。ユーザーとして Pod を作成した場合は、ユーザーがcsiボリュームを使用できることを確認する。
-
最後の 2 つの前提条件を満たせない場合は、クラスター管理者に RBAC 権限を付与してもらうことで、サービスアカウントが SharedConfigMap CR を使用できるようになります。
手順
ロールに関連付けられた
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 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-config2 重要sharedConfigMap属性の値がsharedConfigMapインスタンスの名前と一致しない場合、Pod は起動に失敗します。