第1章 GitOps でのマルチテナントサポート
マルチテナンシーとは、単一のソフトウェアインスタンスが複数の異なるユーザーグループ (テナント) にサービスを提供するソフトウェアアーキテクチャーのことです。マルチテナンシーを使用すると、1 つの Argo CD インスタンスを共有して、ユーザー間の分離を確保しながらリソースをデプロイできます。Argo CD インスタンスのスコープを理解することで、環境に適したモードを選択できます。
OpenShift Container Platform 上の Red Hat OpenShift GitOps Operator を使用すると、クラスター管理者として、アプリケーション配信チーム (テナント) に対してクラスターへのマルチテナントアクセスを付与できます。管理者権限がなくても、テナントがユーザー定義の namespace で専用の Argo CD インスタンスを作成および管理できます。テナントは完全に自律し、他のテナントに干渉することなく、このインスタンスをカスタマイズして、テナントのニーズや要件に対応できます。
マルチテナントクラスターの場合、Argo CD インスタンスを管理する担当者と、クラスターおよびそのユーザーを管理する担当者は異なる場合があります。したがって、クラスター内で Argo CD Application Controller (argocd-application-controller コンポーネント) をスーパーユーザーとして使用できません。
Argo CD アプリケーションコントローラーは、管理対象クラスター内のリソースを調整します。GitOps Operator でマルチテナント機能を使用するには、ユースケースとテナントの要件に基づいて権限を設定してください。Argo CD インスタンス、アプリケーション、およびリモートクラスターの操作を制御するために、明示的に権限を付与、拡張、または制限します。
1.1. Argo CD インスタンススコープ リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift GitOps Operator は、マルチテナントをサポートする以下のモードに分類できるインスタンスを作成します。
- namespace スコープインスタンス (アプリケーション配信インスタンス)
- クラスタースコープインスタンス
- デフォルトのクラスタースコープインスタンス
1.1.1. namespace スコープインスタンス (アプリケーション配信インスタンス) リンクのコピーリンクがクリップボードにコピーされました!
namespace の 1 つに Argo CD カスタムリソース (CR) を作成すると、GitOps Operator はこの namespace で Argo CD を起動し、アプリケーション配信に使用できるようになります。初期状態では、インストールされているのと同じ namespace にのみリソースをデプロイする権限がこのインスタンスにあります。ただし、特定の要件に合わせてインスタンスを設定する必要がある場合があります。
GitOps Operator を使用すると、Argo CD インスタンスの権限を拡張して、Argo CD Application Controller がインストールされている場所とは別の namespace にリソースをデプロイできるようになります。
namespace 内の GitOps Operator が作成するロールのスコープは namespace で、namespace リソースにのみアクセスできます。Operator は、管理する namespace 外ではアクションを実行できません。
この方法はどのように機能しますか。
GitOps Operator を使用すると、OpenShift ユーザーは、自分の名前空間内で argoproj.io/v1alpha1 または argoproj.io/v1beta1 API に Argo CD リソースを作成する権限を持っている場合に限り、自分の名前空間内に Argo CD インスタンスをインスタンス化できます。現在、namespace スコープのインスタンスは、管理する 1 つまたは複数の namespace に対して完全な管理権限があります。つまり、その namespace 内のすべてのリソースに対してすべての動詞を使用できるのと同じです。
Argo CD アプリケーションコントローラーが他の名前空間にリソースをデプロイするには、Kubernetes ロールとロールバインディングを設定する必要があります。これらのロールとバインディングは、名前空間スコープのインスタンスが管理できる名前空間を識別します。GitOps Operator は、この設定を簡素化するために argocd.argoproj.io/managed-by ラベルをサポートしています。このラベルを使用して、インスタンスによって管理される名前空間を示します。GitOps Operator を名前空間スコープモードでデプロイすると、ラベル付けされた各名前空間に必要なロールとロールバインディングが自動的に作成されます。
argocd.argoproj.io/managed-by ラベルは、GitOps Operator と同じクラスター内の namespace に対してのみ機能します。リモートクラスターの場合は、権限を手動で定義する必要があります。
デフォルトでは、managed-by ラベルを使用して名前空間にラベルを付ける場合、GitOps Operator は、ラベル付けされた名前空間に対して、Argo CD Application Controller に Kubernetes のデフォルトの 管理者 クラスターロールと同等の権限を付与します。ただし、Operator の サブスクリプション リソースで CONTROLLER_CLUSTER_ROLE および CONTROLLER_SERVER_ROLE 環境変数を使用することで、コントローラーおよびサーバーコンポーネントに使用される代替のクラスターロールを定義することもできます。これらの変数を指定すると、Operator は名前空間にデフォルトロールを作成するのではなく、対応するクラスターロールの名前空間にロールバインディングのみを作成します。管理者が責任を持って、クラスターロールを作成し、権限を完全に制御するようにしてください。
-
ロールを定義すると、Argo CD はすべてのリソースと対話しようとします。したがって、カスタムクラスターロール内のすべてのリソースの
表示、取得、および監視の権限を付与するか、ロールで定義されているresourceInclusionsまたはresourceExclusionsフィールドを使用して、特定のリソースを含めるか除外するように Argo CD CR を設定する必要があります。 - namespace スコープのインスタンスでは、namespace、カスタムリソース定義 (CRD)、クラスターロールなどのクラスタースコープのリソースを管理できません。