第1章 GitOps でのマルチテナントサポート


マルチテナンシーとは、1 つのソフトウェアインスタンスを使用して複数の異なるユーザーグループまたはテナントにサービスを提供するソフトウェアアーキテクチャーです。マルチテナンシーを使用すると、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 Application Controller は、マネージドクラスター内のリソースを調整します。したがって、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 ユーザーは、自分の namespace で argoproj.io/v1alpha1 または argoproj.io/v1beta1 API に Argo CD リソースを作成する権限を持っている限り、自分の namespace で Argo CD インスタンスをインスタンス化できます。現在、namespace スコープのインスタンスは、管理する 1 つまたは複数の namespace に対して完全な管理権限があります。つまり、その namespace 内のすべてのリソースに対してすべての動詞を使用できるのと同じです。

Argo CD アプリケーションコントローラーがリソースを他の namespace にデプロイするには、namespace スコープのインスタンスで管理するこれらの namespace にラベルを付けて示すための Kubernetes ロールとロールバインディングが必要です。GitOps Operator は、argocd.argoproj.io/managed-by ラベルを使用して、これらのロールとロールバインディングを自動的に作成します。このラベルを使用して値を設定し、管理対象の namespace を指定します。次に、argocd.argoproj.io/managed-by ラベルを使用して、namespace スコープのインスタンスモードで GitOps Operator をデプロイすると、インスタンスが管理するすべての namespace にロールとロールバインディングのセットが作成されます。

重要

argocd.argoproj.io/managed-by ラベルは、GitOps Operator と同じクラスター内の namespace に対してのみ機能します。リモートクラスターの場合は、権限を手動で定義する必要があります。

デフォルトでは、managed-by ラベルを使用して namespace にラベルを付けると、GitOps Operator は、ラベル付けされた namespace の Kubernetes デフォルトの admin クラスターロールと同等の権限を Argo CD Application Controller に付与します。ただし、Operator の Subscription リソースでそれぞれ CONTROLLER_CLUSTER_ROLE および CONTROLLER_SERVER_ROLE 環境変数を使用して、コントローラーおよびサーバーコンポーネントに使用される代替クラスターロールを定義することもできます。これらの変数を指定すると、Operator は namespace にデフォルトのロールを作成せず、対応するクラスターロールの namespace にロールバインディングのみを作成します。管理者が責任を持って、クラスターロールを作成し、権限を完全に制御するようにしてください。

注記
  • ロールを定義すると、Argo CD はすべてのリソースと対話しようとします。したがって、カスタムクラスターロール内のすべてのリソースに viewget および watch 権限を付与するか、ロールで定義された resourceInclusions または resourceExclusions フィールドを通じて特定のリソースを含めたり除外したりするように Argo CD CR を設定する必要があります。
  • namespace スコープのインスタンスでは、namespace、カスタムリソース定義 (CRD)、クラスターロールなどのクラスタースコープのリソースを管理できません。

1.1.2. クラスタースコープインスタンス

クラスタースコープインスタンスは、クラスター全体にリソースをデプロイおよび管理することを目的としています。

注記

任意の namespace のアプリケーション 機能を使用する場合は、Argo CD インスタンススコープのモードをクラスタースコープインスタンスとして選択します。

クラスタースコープのインスタンスはクラスターレベルのリソースにアクセスできるため、通常はクラスター設定に使用されますが、常に使用されるわけではありません。特定の namespace スコープの Argo CD インスタンスをクラスタースコープに昇格させることができます。インスタンスを昇格するには、GitOps Operator の Subscription リソースを変更する必要があります。

重要
  • インスタンスを昇格する場合には、慎重に検討してください。
  • アプリケーションデリバリーチームが自己管理しているインスタンスを昇格しないでください。このようなインスタンスを昇格すると、自己管理インスタンスのユーザーがクラスター管理者になり、権限を完全に制御できるようになるため、クラスターにとって重大なセキュリティーリスクとなります。

Argo CD 内でマルチテナント設定を指定する場合は、細心の注意を払う必要があります。たとえば、クラスター管理者が複数のアプリケーションデリバリーチーム間で共有され、クラスター管理者が管理する Argo CD インスタンスを設定するユースケースでは、カスタムのクラスタースコープインスタンスが必要になる場合があります。

この方法はどのように機能しますか。

ユーザーが cluster-admin 権限で Argo CD インスタンスをデプロイできないようにするには、Subscription リソースの ARGOCD_CLUSTER_CONFIG_NAMESPACES 環境変数を使用して、クラスター権限を持つ namespace を識別する必要があります。

クラスター管理者以外のユーザーは Subscription リソースにアクセスできないため、インスタンスの権限を昇格してクラスターセキュリティーを回避できません。

インスタンスをクラスタースコープとして指定すると、Operator は、その namespace 内の Argo CD Application Controller とサーバーサービスアカウントに対して、一連のクラスターロールとクラスターロールバインディングを自動的に作成します。このデフォルトのロールは、標準の cluster-admin ロールと同等のものではありません。割り当てられる権限のセットがはるかに少なくなります。これらの権限は、必要に応じて追加のクラスターロールまたはクラスターロールバインディングを作成することで拡張できます。

1.1.3. デフォルトのクラスタースコープインスタンス

GitOps Operator をインストールすると、デフォルトでは、openshift-gitops namespace にクラスタースコープのインスタンスが作成されます。このインスタンスは、独自性の高い方法で設定されています。その主な目的は、クラスター管理者が特定のクラスター設定リソースを効率的に管理できるようにすることです。

重要
  • デフォルトのクラスタースコープインスタンスを、アプリケーション配信などの他の用途には使用しないでください。
  • cluster-admin ロールが割り当てられていないユーザーには、デフォルトのクラスタースコープインスタンスにアクセスする権限を付与しないでください。

デフォルトのインスタンスには完全な cluster-admin 権限がありません。クラスター内のすべてのリソースに対する読み取りアクセス権がありますが、デプロイできるのは限られたリソースセットのみです。

注記

クラスター設定には openshift-gitops namespace のデフォルトの Argo CD インスタンスを使用し、他の namespace の 1 つまたは複数の個別のインスタンスには委譲テナントユースケースを使用します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.