4.8.2. Operator インストールのスコープ設定
Operator の Operator Lifecycle Manager (OLM) での Operator のインストールおよびアップグレードに関するスコープ設定ルールを提供するには、サービスアカウントを Operator グループに関連付けます。
この例では、クラスター管理者は一連の Operator を指定された namespace に制限できます。
前提条件
-
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc) がインストールされている。
手順
新規の namespace を作成します。
例4.9
Namespaceオブジェクトを作成するコマンドの例$ cat <<EOF | oc create -f - apiVersion: v1 kind: Namespace metadata: name: scoped EOFOperator に必要な制限が適用されるように権限を割り当てます。これを行うには、新しく作成した指定の namespace に、新しいサービスアカウント、関連するロール、およびロールバインディングを作成する必要があります。
次のコマンドを実行してサービスアカウントを作成します。
例4.10
ServiceAccountオブジェクトを作成するコマンドの例$ cat <<EOF | oc create -f - apiVersion: v1 kind: ServiceAccount metadata: name: scoped namespace: scoped EOF次のコマンドを実行してシークレットを作成します。
例4.11 有効期間の長い API トークンの
Secretオブジェクトを作成するコマンドの例$ cat <<EOF | oc create -f - apiVersion: v1 kind: Secret type: kubernetes.io/service-account-token1 metadata: name: scoped namespace: scoped annotations: kubernetes.io/service-account.name: scoped EOF- 1
- シークレットは、有効期間の長い API トークンである必要があります。これはサービスアカウントによって使用されます。
次のコマンドを実行してロールを作成します。
警告この例では、例示目的でのみ、指定の namespace ですべての操作を実行できる権限を、ロールによってサービスアカウントに付与します。実稼働環境では、よりきめ細かい権限セットを作成する必要があります。詳細は、「粒度の細かいパーミッション」を参照してください。
例4.12
RoleおよびRoleBindingオブジェクトを作成するコマンドの例$ cat <<EOF | oc create -f - apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: scoped namespace: scoped rules: - apiGroups: ["*"] resources: ["*"] verbs: ["*"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: scoped-bindings namespace: scoped roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: scoped subjects: - kind: ServiceAccount name: scoped namespace: scoped EOF
次のコマンドを実行して、指定の namespace に
OperatorGroupオブジェクトを作成します。この Operator グループは指定された namespace をターゲットにし、そのテナンシーがこれに制限されるようにします。さらに、Operator グループはユーザーがサービスアカウントを指定できるようにします。例4.13
OperatorGroupオブジェクトを作成するコマンドの例$ cat <<EOF | oc create -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: scoped namespace: scoped spec: serviceAccountName: scoped1 targetNamespaces: - scoped EOF- 1
- 直前のステップで作成したサービスアカウントを指定します。指定された namespace にインストールされる Operator はこの Operator グループに関連付けられ、指定されるサービスアカウントに関連付けられます。
指定された namespace で
Subscriptionオブジェクトを作成し、Operator をインストールします。例4.14
Subscriptionオブジェクトを作成するコマンドの例$ cat <<EOF | oc create -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: openshift-cert-manager-operator namespace: scoped spec: channel: stable-v1 name: openshift-cert-manager-operator source: <catalog_source_name>1 sourceNamespace: <catalog_source_namespace>2 EOFこの Operator グループに関連付けられる Operator は、指定されたサービスアカウントに付与されるパーミッションに制限されます。Operator がサービスアカウントの範囲外のパーミッションを要求する場合、インストールは関連するエラーを出して失敗します。
4.8.2.1. 粒度の細かいパーミッション リンクのコピーリンクがクリップボードにコピーされました!
Operator Lifecycle Manager (OLM) は Operator グループで指定されたサービスアカウントを使用して、インストールされる Operator に関連する以下のリソースを作成または更新します。
-
ClusterServiceVersion -
Subscription -
Secret -
ServiceAccount -
Service -
ClusterRoleおよびClusterRoleBinding -
RoleおよびRoleBinding
Operator を指定された namespace に制限するため、クラスター管理者は以下のパーミッションをサービスアカウントに付与して起動できます。
以下のロールは一般的なサンプルであり、特定の Operator に基づいて追加のルールが必要になる可能性があります。
kind: Role
rules:
- apiGroups: ["operators.coreos.com"]
resources: ["subscriptions", "clusterserviceversions"]
verbs: ["get", "create", "update", "patch"]
- apiGroups: [""]
resources: ["services", "serviceaccounts"]
verbs: ["get", "create", "update", "patch"]
- apiGroups: ["rbac.authorization.k8s.io"]
resources: ["roles", "rolebindings"]
verbs: ["get", "create", "update", "patch"]
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["list", "watch", "get", "create", "update", "patch", "delete"]
- apiGroups: [""]
resources: ["pods"]
verbs: ["list", "watch", "get", "create", "update", "patch", "delete"]
さらに、Operator がプルシークレットを指定する場合、以下のパーミッションも追加する必要があります。
kind: ClusterRole
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get"]
---
kind: Role
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["create", "update", "patch"]
- 1
- シークレットを OLM namespace から取得するために必要です。