第2章 クラスタースコープのインスタンスのユーザー定義のクラスターロールを作成してパーミッションをカスタマイズする
デフォルトのクラスタースコープのインスタンスの場合、Red Hat OpenShift GitOps Operator は特定のクラスタースコープのリソース管理向けのパーミッションを追加で付与します。したがって、クラスター管理者として、Argo CD をクラスタースコープのインスタンスとしてデプロイすると、Operator は GitOps コントロールプレーンコンポーネントに対して追加のクラスターロールとクラスターロールバインディングを作成します。これらのクラスターロールとクラスターロールバインディングは、Argo CD がクラスターレベルで動作させるのに必要な追加の権限を提供します。
クラスタースコープのインスタンスに Operator によって付与されたすべての権限を付与せず、クラスター全体のリソースへの権限を追加または削除する場合は、まずクラスタースコープのインスタンスのデフォルトのクラスターロールの作成を無効にする必要があります。次に、次のクラスタースコープのインスタンスの権限をカスタマイズできます。
- デフォルトの ArgoCD インスタンス (デフォルトのクラスタースコープインスタンス)
- ユーザー定義のクラスタースコープ Argo CD インスタンス
このガイドでは、ユーザー定義のクラスタースコープ Argo CD インスタンスを作成し、クラスターのカスタム設定を含む定義済みの namespace に Argo CD アプリケーションをデプロイし、クラスタースコープインスタンスのデフォルトのクラスターロールの作成を無効にし、GitOps コントロールプレーンコンポーネントの新しいクラスターロールとクラスターロールバインディングを作成してユーザー定義のクラスタースコープインスタンスの権限をカスタマイズする手順について例を交えて説明します。
開発者として、Argo CD アプリケーションを作成し、クラスター全体のリソースをデプロイする場合は、クラスター管理者がそれらに必要な権限を付与していることを確認してください。
それ以外の場合は、Argo CD の調整後に、アプリケーションの Status
フィールドに次の例のような認証エラーメッセージが表示されます。
認証エラーメッセージの例
persistentvolumes is forbidden: User "system:serviceaccount:gitops-demo:argocd-argocd-application-controller" cannot create resource "persistentvolumes" in API group "" at the cluster scope.
2.1. 前提条件
- OpenShift Container Platform クラスターに Red Hat OpenShift GitOps 1.13.0 以降のバージョンがインストールされている。
-
OpenShift CLI (
oc
) がインストールされている。 -
Red Hat OpenShift GitOps
argocd
CLI がインストールされている。 -
クラスタースコープの Argo CD インスタンス を定義済みの namespace にインストールしている。(例:
spring-petclinic
namespace)。 ユーザー定義のクラスタースコープインスタンスが、次のコンポーネントのクラスターロールとクラスターロールバインディングを使用して設定されていることを検証している。
- Argo CD Application Controller
- Argo CD サーバー
- Argo CD ApplicationSet Controller (ApplicationSet Controller 作成される)
spring-petclinic
namespace のcustomclusterrole
パス を使用してcluster-configs
Argo CD アプリケーション をデプロイし、test-gitops-ns
namespace とtest-gitops-pv
永続ボリュームリソースを作成している。注記cluster-configs
Argo CD アプリケーションは、次のパラメーターが設定されたユーザー定義のクラスタースコープインスタンスによって管理される必要があります。-
selfHeal
フィールドの値がtrue
に設定されている -
syncPolicy
フィールドの値がautomated
に設定されている -
Label フィールドが
app.kubernetes.io/part-of=argocd
の値に設定されている -
定義した namespace 内の Argo CD インスタンスが namespace を管理できるように、Label フィールドが
argocd.argoproj.io/managed-by=<user_defined_namespace>
値に設定されている -
ラベル フィールドが
app.kubernetes.io/name=<user_defined_argocd_instance>
値に設定されている
-