マルチテナンシー


Red Hat OpenShift GitOps 1.15

GitOps でのマルチテナンシーサポートについて

Red Hat OpenShift Documentation Team

概要

このドキュメントでは、GitOps でのマルチテナンシーのサポートを説明します。また、Argo CD インスタンスのスコープと、特定のモードを選択するタイミングも説明します。

第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 つまたは複数の個別のインスタンスには委譲テナントユースケースを使用します。

1.2. マルチテナントモデルを採用する際の重要な考慮事項

マルチテナントクラスター管理権限を付与すると、テナントは Argo CD によってアプリケーションに付与された権限を使用して権限を昇格できるため、マルチテナントの操作や権限に対する制限を回避して操作が可能になる場合があります。このような状況を防ぐには、Red Hat OpenShift GitOps Operator を通じてインストールされた Argo CD の権限モデルを理解し、それを活用して OpenShift GitOps でアプリケーション配信を成功させる方法を把握する必要があります。

1.2.1. Argo CD ロールベースアクセス制御 (RBAC)

Red Hat OpenShift GitOps のアクセス制御は、次の 2 つの異なるレベルで管理されます。

  • Kubernetes レベルでは、GitOps Argo CD Application Controller は 1 つ以上のクラスターと対話し、クラスターごとに 1 つの Kubernetes サービスアカウントを使用してさまざまなリソースをデプロイします。このサービスアカウントには、Argo CD のこのインスタンスが管理するすべてのテナントおよびユースケースのリソースをデプロイする権限が必要です。
  • Argo CD レベルでは、GitOps Argo CD Application Controller に、Kubernetes から独立した独自の RBAC 権限モデルが含まれています。ユーザーレベルのアクセスを管理するには、基盤となる Kubernetes 権限とは独立してこの RBAC モデルを使用できます。この機能を使用すると、純粋な Kubernetes の観点からはユーザーがアクセスできない Argo CD アプリケーションにアクセスできるようになります。

これら 2 つのアクセス制御とコンポーネント間の相互作用は明確に区別されているため、Argo CD を使用してマルチテナントソリューションを設計するときには、権限の昇格が懸念事項になります。権限の昇格とは、テナントがアプリケーションコントローラーのサービスアカウントの権限昇格を利用して、通常は実行が許可されないアクションを実行することです。Argo CD RBAC または Argo CD の個別のインスタンスを使用することで、Argo CD インスタンスで権限昇格を抑えることができます。

1.2.2. Argo CD プロジェクト

Argo CD プロジェクト (OpenShift Container Platform プロジェクトと混同しないでください) は、アプリケーションをグループ化する方法を提供します。Argo CD プロジェクトを使用すると、デプロイできるリソースと、そのデプロイ先に関するアプリケーションの制限を指定できます。さらに、Argo CD カスタムリソース (CR) のグローバルレベルではなくプロジェクトレベルでより細かく定義することにより、Argo CD のロールベースアクセス制御 (RBAC) ルールと権限を有効にできます。

Operator の Argo CD CR でテナント RBAC をグローバルに定義できますが、AppProject CR では制限とともにテナント RBAC を定義する必要があります。

テナントの数が多い場合は、グローバル RBAC を使用してすべてのテナントを管理しようとすると、繰り返しが多く発生する可能性があります。

テナントのインスタンス数が多い場合は、プロジェクト設定の一部がテナントプロジェクト間で同じに可能性があります。重複を減らし、メンテナンスを最小限に抑えるには、共通の設定にグローバルプロジェクトを使用し、それをテナントプロジェクトに継承します。

注記

常に独自のプロジェクトを定義し、Operator による Argo CD インストールで作成されたデフォルトのプロジェクトは使用しないでください。

1.3. 関連情報

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutube

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.