第30章 マルチテナントへの対応

Red Hat 3scale API Management では、複数の独立した 3scale アカウントのインスタンスが単一のオンプレミスデプロイメントに存在する構成が可能です。アカウントは互いに独立に機能し、情報を共有することはできません。

30.1. マスター管理ポータル

マスター管理者は、マスター管理ポータルおよび API エンドポイントを通じて 3scale アカウントを監視および管理します。標準の 管理ポータル と同様に、マスター管理ポータルにはデプロイメント内のすべてのアカウントに関する情報が含まれ、固有のアカウントページでアカウントおよびユーザーを管理することできます。

アカウント管理者の操作に関する詳細は、「アカウント設定」を参照してください。

30.1.1. マスター管理ポータルへのアクセス

マスター管理ポータルにアクセスするには、オンプレミスへのインストール プロセス中に特別にマスター管理ポータル用として定義したクレデンシャルおよび URL を使用する必要があります。

マスター管理ポータルの URL は、MASTER_NAME (テンプレートのデフォルトでは master) および WILDCARD_DOMAIN で構成されます。

<MASTER_NAME>.<WILDCARD_DOMAIN>

マスター管理ポータルは、Master フラグで識別することができます。

Master Admin Portal flag

30.1.2. マスター管理ポータルからのアカウント追加

マスター管理ポータルからアカウントを追加するには、以下の手順に従います。

  1. マスター管理ポータル にログインします。
  2. Accounts に移動します。
  3. Create をクリックします。
  4. 必須のユーザー情報を指定します。

    1. ユーザー名
    2. メールアドレス
    3. パスワード
    4. パスワードの確認
  5. 必須の組織情報を指定します。

    1. 組織/グループ名
  6. Create をクリックします。

上記の手順を完了すると、Red Hat 3scale は Organization/Group Name フィールドの情報を元にご自分のアカウントのアカウントサブドメインを作成します。また、作成したアカウントの情報が含まれるページが表示されます。

30.1.3. マスター管理ポータルを使用した単一のゲートウェイの作成

マスター管理ポータルを使用して、すべてのテナント用に単一のゲートウェイを作成することができます。そのためには、THREESCALE_PORTAL_ENDPOINT 環境変数を設定します。このゲートウェイは、ホスト型 3scale (SaaS) の Hosted APIcast に類似しています (OpenShift テンプレートを使用してデプロイされたデフォルトの apicast-staging および apicast-production ゲートウェイは、このようにして設定されます)。

マスター管理ポータルを使用して単一のゲートウェイを作成するには、以下の手順に従います。

  1. ご自分の 3scale プロジェクトの system-master-apicast シークレットから、ACCESS_TOKEN の値を取得します。あるいは、マスター管理ポータルで 新規アクセストークンを作成する ことができます。
  2. APIcast のデプロイ時に、以下のコマンドを使用します。

     THREESCALE_PORTAL_ENDPOINT="https://<ACCESS_TOKEN>@<public url to master admin portal>/master/api/proxy/configs"
    • URL の最後は、/master/api/proxy/configs のようになります。これは、マスター の場合には、デフォルトの /admin/api/services.json とは異なるエンドポイントに configs が保管されるためです。

30.2. アカウントの管理

マスター管理ポータルから、または API コールを使用して、アカウントを管理することができます。

30.2.1. マスター管理ポータルからのアカウントの管理

マスター管理ポータルからアカウントを管理するには、以下の手順を実施する必要があります。

  1. マスター管理ポータル にログインします。
  2. Accounts のページに移動します。
  3. 管理するグループまたは組織を選択します。

Accounts のページから、管理操作を実施することができます (特定組織の 3scale アカウントの管理者として活動する、アカウントを一時中断する等)。以下のアカウント属性を管理することもできます。

  • アプリケーション
  • ユーザー
  • 招待状
  • グループメンバー
  • 組織/グループ名

30.2.2. API コールを使用したアカウントの管理

マスター管理 API コールを使用して、アカウントを管理することができます。この呼び出しの詳細については、マスター管理ポータルの右上隅にある疑問符 (?) アイコンをクリックして 3scale API Docs を選択し、Master API セクションを参照してください。

Master API section

30.3. マルチテナント対応サブドメインについて

同じ OpenShift クラスタードメインに複数のアカウントが存在することから、サブドメインとして、個々のアカウントの名前には OpenShift クラスターのドメイン名が付加されます。たとえば、ドメインが example.com のクラスター上の user という名前のアカウントのルートは、以下のようになります。

user.example.com

標準的なマルチテナントのデプロイメントには、以下の要素が含まれます。

  • マスター管理ユーザー
  • MASTER_NAME パラメーターにより定義される、マスター管理ポータルのルート

    <MASTER_NAME>.<WILDCARD_DOMAIN>
  • アカウント管理ユーザー
  • TENANT_NAME パラメーターにより定義される、アカウント管理ポータルのルート

    <TENANT_NAME>-admin.<WILDCARD_DOMAIN>
  • アカウントのデベロッパーポータルのルート

    <TENANT_NAME>.<WILDCARD_DOMAIN>
  • 実稼働およびステージング用 Embedded APIcast ゲートウェイのルート

    <API_NAME>-<TENANT_NAME>-apicast-staging.<WILDCARD_DOMAIN>
    <API_NAME>-<TENANT_NAME>-apicast-production.<WILDCARD_DOMAIN>
    This example illustrates the output users and routes of a standard multitenant deployment of 3scale:
    ----
    --> Deploying template "3scale-project/3scale-api-management" for "amp.yml" to project project
    3scale API Management
    ---------
    3scale API Management main system
         Login on https://user-admin.3scale-project.example.com as admin/xXxXyz123
         ...
         * With parameters:
          * ADMIN_PASSWORD=xXxXyz123 # generated
          * ADMIN_USERNAME=admin
          * TENANT_NAME=user
          ...
          * MASTER_NAME=master
          * MASTER_USER=master
          * MASTER_PASSWORD=xXxXyz123 # generated
          ...
    --> Success
        Access your application via route 'user-admin.3scale-project.example.com'
        Access your application via route 'master-admin.3scale-project.example.com'
        Access your application via route 'backend-user.3scale-project.example.com'
        Access your application via route 'user.3scale-project.example.com'
        Access your application via route 'api-user-apicast-staging.3scale-project.example.com'
        Access your application via route 'api-user-apicast-production.3scale-project.example.com'
        Access your application via route 'apicast-wildcard.3scale-project.example.com'
        ...
    ----

マスター管理ポータルから追加した 追加アカウントには、その名前に応じたサブドメインが割り当てられます。

30.4. テナントアカウントの削除

30.4.1. 管理ポータルを使用したアカウントの削除

以下の手順によりアカウントの削除がスケジュールされ、15 日後に削除されます。削除がスケジュールされている間、アカウントの取り扱いは以下のようになります。

  • ユーザーはアカウントにログインすることができない。
  • アカウントを編集することはできない。ただし、マスター管理ユーザーはアカウントを approved の状態に戻すことができます。

また、実際に削除された場合と同様に、テナントのドメイン (管理ドメインおよびデベロッパーポータル) を利用することはできません。

前提条件:

手順

  1. Accounts に移動し、アカウントのリストを表示します。
  2. 削除するアカウントをクリックします。
  3. アカウント名の横にある Edit をクリックします。
  4. アカウントの詳細ページで、Delete アイコンをクリックします。
  5. 削除を確認します。

30.4.2. コンソールを使用したテナントの削除

アカウントを直ちに削除する場合には、コンソールからその操作を行うことができます。

  1. 以下のコマンドを使用して、コンソールを開きます。

    oc rsh -c system-master "$(oc get pods --selector deploymentconfig=system-app -o name)"
    bundle exec rails console
  2. 以下の行により、直ちに削除を行います。

    tenant = Account.find(PROVIDER_ID)
    tenant.schedule_for_deletion!
    DeleteAccountHierarchyWorker.perform_later(tenant)

    各行の処理内容を以下に示します。

    • 1 行目: アカウントを探し、それを変数 tenant に保存します。
    • 2 行目: アカウントの削除をスケジュールします。これは、管理ポータルから削除をスケジュールしていない場合にのみ必要です。
    • 3 行目: アカウントの削除をスケジュールしているか、アカウントが一時中断のステータスの場合にのみ、バックグラウンドプロセスのテナントを削除します。アカウントが approved のステータスの場合には、削除は行われません。

30.5. テナントアカウントの復帰

テナントアカウントを復帰させると、削除をスケジュールしたアカウントが元の状態に戻ります。アカウントの削除をスケジュールしてから 15 日間は、テナントアカウントを復帰させることができます。

アカウントの復帰後は、以下のような状態になります。

  • 以前のすべてのアプリケーションが存在する。
  • すべての履歴統計値が維持される。
  • 有効であるべきすべてのトークンが再び有効になる。
  • アプリケーションが再び承認を開始する。

前提条件:

  • マスター管理アカウントにログインしている。

手順

  1. Accounts に移動し、アカウントのリストを表示します。
  2. 復帰させるアカウントをクリックします。
  3. アカウントの詳細ページで、Resume をクリックします。
  4. Ok をクリックして、アカウントの復帰を確認します。