第2章 クラスタースコープのインスタンスのユーザー定義のクラスターロールを作成して権限をカスタマイズする
デフォルトのクラスタースコープのインスタンスの場合、Red Hat OpenShift GitOps Operator は特定のクラスタースコープのリソース管理向けの権限を追加で付与します。したがって、クラスター管理者として Argo CD をクラスタースコープのインスタンスとしてデプロイすると、Operator は GitOps コントロールプレーンコンポーネント用の追加のクラスターロールとクラスターロールバインディングを作成します。これらのクラスターロールとクラスターロールバインディングは、Argo CD がクラスターレベルで動作させるのに必要な追加の権限を提供します。
クラスタースコープのインスタンスに Operator によって付与されたすべての権限を付与せず、クラスター全体のリソースへの権限を追加または削除する場合は、まずクラスタースコープのインスタンスのデフォルトのクラスターロールの作成を無効にする必要があります。次に、次のクラスタースコープのインスタンスの権限をカスタマイズできます。
- デフォルトの Argo CD インスタンス (デフォルトのクラスタースコープインスタンス)
- ユーザー定義のクラスタースコープ Argo CD インスタンス
このガイドでは、ユーザー定義のクラスタースコープの Argo CD インスタンスを作成し、クラスター用のカスタム設定を含む 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
argocdCLI がインストールされている。 -
定義した名前空間 (たとえば、
spring-petclinic名前空間) に、クラスタースコープの Argo CD インスタンスを インストールしました。 ユーザー定義のクラスタースコープインスタンスが、次のコンポーネントのクラスターロールとクラスターロールバインディングを使用して設定されていることを検証している。
- Argo CD Application Controller
- Argo CD サーバー
- Argo CD ApplicationSet Controller (ApplicationSet Controller 作成される)
spring-petclinicnamespace のcustomclusterroleパス を使用してcluster-configsArgo CD アプリケーション をデプロイし、test-gitops-nsnamespace とtest-gitops-pv永続ボリュームリソースを作成している。注記cluster-configsArgo 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>値に設定されている
-