gpe_mw_ansible.3scale_multitenant
以下のテキストを日本語に翻訳しました。シンプルでわかりやすい表現を心がけました。
= 3scale_multitenant
== 概要
このワークロードは、単一のOCPネームスペース内に中央集権的な3scale APIマネージャーを設定します。
このワークロードはOCPクラスターごとに一度だけ実行する必要があります。
また、3scale APIマネージャーのインストール内に設定可能な数のAPIテナントの管理(作成・削除)を可能にします。
この役割は次のような状況で有用です:
. インストラクター主導のトレーニング(ILTs)、ハッカソン、およびワークショップ: + 特定の数の学生が3scaleを必要とするILTsにおいて、各学生に独自のテナントが割り当てられる単一の中央マルチテナントのRed Hat 3scale APIマネージャーを設置します。 + 学生には割り当てられたテナントの管理者資格情報が提供されます。 + このアプローチは、各学生が独自の3scale APIマネージャーを構築する代わりに、より望ましいかもしれません。
. Red Hat 3scaleの導入 + いくつかの学習目的は次の通りです:
.. OCP上での3scaleの設定を示すこと。 .. 外部SMTPプロバイダーとの統合を行い、メールを送信し、ユーザーの自己登録ワークフローを実現すること。 .. OAuth2のアクセストークンとリフレッシュトークンを使用して3scaleのREST管理APIを呼び出すこと。
=== 前提条件
. このラボで設定される3scaleのバージョン(v2.4)はOpenShift Container Platform 4.8で動作することが知られています。 + このバージョンのOpenShiftは、このansibleロールを実行する前にあらかじめインストールされている必要があります。
. 対象のOCPクラスターに対応するocユーティリティのバージョンを使用し、ocユーティリティがすでにクラスター管理者として認証されていることを確認してください。
. このansibleロールでは、実行されるホストにlxmlとopenshiftのPythonモジュールをインストールする必要があります。例: +
dnf install python3-lxml
dnf install python3-openshift
== APIマネージャー
このセクションで説明されるansibleは、OpenShiftテンプレートを使用して3scale APIマネージャーを設定できます。
=== 既知の問題
. link:https://issues.redhat.com/browse/THREESCALE-5725[APIマネージャーがFIPS準拠のOpenShiftで動作しない]。修正予定: 3scale 2.12
=== リソース要件
このansibleロールでは、以下のansible変数の値に基づいて異なるサイズの3scaleを設定できます:is_production
. リソースの利用状況: is_production = true .. クラスターのCPUとRAMの割り当ては、デフォルトでかなり高く設定されています: ... CPU制限: 30コア ... RAM制限: 30 Gi .. 3scale APIマネージャーのテンプレートに定義されたCPUおよびRAMの制限もかなり高く設定されています。 .. これらのデフォルト設定は、高スループットを許可するために意図的に高く設定されています。
. リソースの利用状況: is_production = false + これはデフォルトです。 3scaleを設定するために必要なリソースは、約12 Gi RAMと6 CPUに減少します。
=== SMTPプロバイダー 3scale APIマネージャーにメール送信機能を有効にするために、SMTPプロバイダーに登録する必要があります。
3scaleでは、SMTP設定がグローバルに構成されており、すべてのAPIテナントで利用されます。
このansibleロールでテスト済みのいくつかの無料プランのSMTPプロバイダーは以下の通りです:
. SocketLabs: 現在、link:https://www.socketlabs.com/signup/[月に2000通のメール]が送信できる無料プランを提供中。 . SendGrid: 現在、link:https://sendgrid.com/pricing/[1日100通のメール]が送信できる無料プランを提供中。
=== 環境変数 すべての環境変数はオプションです。
環境変数が指定されない場合、少なくとも1つのRWX PVCを必要とし、SMTPプロバイダーと統合しない3scale APIマネージャーのコントロールプレーンが設定されます。
APIマネージャーは次のネームスペースで設定されます:_3scale-mt-api0_。
. amp_master_passwd + オプション。デフォルト値 = master。
. master_access_token + オプション。デフォルト値 = wtqhhsly。
. default_tenant_access_token + オプション。デフォルト値 = 3832cnj371woiduh。
. is_production + オプション。デフォルト値 = false。
. use_rwo_for_cms + オプション。デフォルト値はfalse。 + 3scaleのコントロールプレーンは、通常、本番環境でパフォーマンス向上のためにスケールアウトされるコンテンツ管理システム(CMS)で構成されています。 このCMSは、その対応する「system-storage」PVCに対してReadWriteManyのアクセスモードを必要とします。 AWS EBSがストレージに使用されるOCP 4.*へのAPIマネージャーの展開において、ReadWriteManyのアクセスモードはlink:https://docs.openshift.com/container-platform/4.2/storage/understanding-persistent-storage.html#pv-access-modes_understanding-persistent-storage[利用できません]。 そのシナリオでは、この環境変数をtrueに設定します。 これにより、3scaleコントロールプレーンテンプレートの指定がReadWriteOnce(非ReadWriteMany)になります。 これをtrueに設定した場合は、system-appポッドの複製を1つ以上作成しないでください。
. APIマネージャーがメールを送信できるようにするためのSMTP設定 + メールは、3scale開発者ポータルへのさまざまなサインアップの流れをサポートするために広範囲に使用されます。 + SMTPプロバイダーと3scaleの統合は、APIマネージャー全体のためにグローバルに行われます。
.. smtp_userid + オプション。デフォルトはnull。nullの場合、3scale APIマネージャーとSMTPプロバイダーの統合は構成されません。
.. smtp_host .. smtp_port .. smtp_authentication .. smtp_passwd .. smtp_domain
. adminEmailUser + オプション。デフォルト値 = jdoe。
. adminEmailDomain + オプション。デフォルト値 = redhat.com。
. RESUME_CONTROL_PLANE_GWS + オプション。デフォルト値 = true。 + 3scale APIマネージャーには、デフォルトでステージングと本番のゲートウェイが含まれています。 これら2つのGWは、通常、リクエストにAPIポリシーを適用するためには使用されません。なぜなら「データプレーン」(別名:ゲートウェイ)は異なる環境に展開される傾向があるからです。 ただし、ステージングゲートウェイは、APIゲートウェイポリシーの詳細のためにシステムプロバイダーWebアプリケーションに必要です。 したがって、デフォルト値はtrueです。
. OCP_AMP_ADMIN_ID + オプション。デフォルト = api0。 + APIマネージャーが存在するOCPネームスペースを所有するOCPユーザー このユーザーにはクラスタークォータが割り当てられます。 注:このOCPユーザーは必ずしも存在する必要はありません。
=== 実行
. APIマネージャーを設定します: +
$ $ ansible-playbook playbooks/apimanager.yml
. _3scale-mt-api0_ネームスペース内のすべてのAPIマネージャールートを確認します: +
$ oc get route -n 3scale-mt-api0
. オプション:APIマネージャーを削除します: +
$ ansible-playbook playbooks/apimanager.yml -e ACTION=uninstall
== APIテナント 3scale APIマネージャーの設定により、_default_テナントが作成されます。
必要に応じて、このセクションで説明されるansibleを使用して追加のテナントを作成できます。
=== 環境変数 すべての環境変数はオプションです。
環境変数が指定されない場合、APIマネージャーには、テナント管理者ユーザーがapi01 / adminである単一のテナント(名前は_ocp01_)が作成されます。 対応するゲートウェイも名前は_ocp01_のネームスペース内に作成されます。
. orgName + オプション:デフォルト値 = ocp01 + テナントの名前および対応するゲートウェイが設定されるネームスペースの名前を指定します。 + 特定の名前の単一テナントを作成する場合に便利です。
. tenant_admin_user_name_base + オプション。デフォルト値 = api。 + APIテナント管理者(および自身のAPIゲートウェイの管理者)となるAPIユーザーのベース名を設定します。 例;希望するAPIユーザー名がapi01, api02, api03の場合、この変数の値は「api」とするべきです。
. tenantAdminPasswd + オプション:デフォルト値 = admin。
. create_gws_with_each_tenant
+
オプション:デフォルト値 = true。
+
trueの場合、それぞれのテナントに対してAPIゲートウェイを持つOCPプロジェクトが作成されます。
. ocp_user_name_base
+
オプション。デフォルト値 = ocp。
+
対応するAPI管理関連プロジェクトにアクセスできるOCPユーザーのベース名を決定します。
例;OCPユーザー名がuser01, user02, user03の場合、この変数の値は「user」とするべきです。
. START_TENANT + オプション。デフォルト = 1。
. END_TENANT + オプション。デフォルト = 1。
. use_padded_tenant_numbers + オプション。デフォルト値 = true。 + シーケンシャルな一般テナントを作成する場合、テナント名にゼロ埋めの数字を含めるかどうかを指定します。 例;ocp01, ocp02 ... ocp10またはocp1, ocp2 ... ocp10。 デフォルト値はtrueです。 デフォルト値は、link:https://github.com/gpe-mw-ansible-org/rh-sso-multi-realmのゼロ埋め数字の標準的な使用に対応しています。
=== 実行
. 設定します: +
$ ansible-playbook playbooks/api_tenant.yml
. テナントのプロビジョニングが完了すると、_ansibleの標準出力_の最後に次のようなメッセージが表示されます: +
ok: [localhost] => { "msg": [ "tenant_output_dir: /home/jbride/provisioning_output/3295.openshift.opentlc.com/tenants_3scale-mt-api0", "tenant_provisioning_log_file = /home/jbride/provisioning_output/3295.openshift.opentlc.com/tenants_3scale-mt-api0/tenant_provisioning.log", "tenant_provisioning_results_file = /home/jbride/provisioning_output/3295.openshift.opentlc.com/tenants_3scale-mt-api0/tenant_info_file_1_2.txt", "start and end tenants = 1 2", "create API Gateways for each tenant = true" ] }
. _tenant_provisioning_results_file_には各プロビジョニングされたテナントの資格情報とURLの詳細が含まれています。 + これはタブ区切りのファイルで、GoogleスプレッドシートまたはLibreOffice Calcにインポートできます。
== APIゲートウェイ
APIマネージャーとテナントがすでに設定されていて、対応するapicastゲートウェイも必要な場合、このansibleが有用です。
=== 環境変数
. threescale_tenant_admin_accesstoken + 必須 + 3scaleテナントが作成されたときの次の変数の値:_ADMIN_ACCESS_TOKEN_。 または、3scaleテナントの管理UIから新しいアクセストークンを作成することもできます:_ギアアイコン -> パーソナル設定 -> トークン -> アクセストークン -> アクセストークンを追加_。 または、3scaleテナント管理者の「プロバイダーAPIキー」であることもできます。
. threescale_tenant_admin_hostname + 必須。 + 対象3scaleテナントの_provider admin_ルートURL。 + 例:t1-admin.apps.cluster-4663.4663.sandbox758.opentlc.com。
. gw_namespace + オプション。デフォルト = user1-gw。
. threescale_version + オプション。デフォルト = 3scale-2.10.0-GA-jbride。 + 他のタグはlink:https://github.com/3scale/3scale-amp-openshift-templates/tags[こちら]に記載されています。
=== 実行:
. apicastゲートウェイをデプロイします。 +
$ $ ansible-playbook playbooks/api_gw.yml
-e threescale_tenant_admin_accesstoken=$threescale_tenant_admin_accesstoken
-e threescale_tenant_admin_hostname=$threescale_tenant_admin_hostname
== 古い情報
=== Ansibleのセットアップ
. このロールをローカルにインストールします。 +
$ ansible-galaxy install gpe_mw_ansible.3scale_multitenant --force -p $HOME/.ansible/roles
. プレイブックを作成します: +
$ echo "
- hosts: all
become: false
gather_facts: False
vars_files:
roles:
- gpe_mw_ansible.3scale_multitenant " > /tmp/3scale_multitenant.yml
=== 3scale APIマネージャーを設定します
3scaleマルチテナントアプリ用のOCPネームスペースは、次のユーザーが所有します:{{OCP_AMP_ADMIN_ID}}。
{{OCP_AMP_ADMIN_ID}}にはクラスタークォータが割り当てられ、3scaleに割り当てられた制限とリクエストを管理します。
. 実行: +
APIマネージャーを設定
$ ansible-playbook playbooks/apimanager.yml \
-e"use_rwo_for_cms=$use_rwo_for_cms"
-e"smtp_port=$smtp_port"
-e"smtp_authentication=$smtp_authentication"
-e"smtp_host=$smtp_host"
-e"smtp_userid=$smtp_userid"
-e"smtp_passwd=$smtp_passwd"
. 約5分後、APIマネージャーの設定が完了します。 . APIマネージャーは多くの異なるコンポーネントを持つ大きなアプリケーションなので、コンポーネントは順次起動されます。 + その後、ansibleは設定プロセスの各段階で待機ループに入ります。
=== 名前付きテナント
一般テナントを作成する能力に代わって、_名前付き_テナントを個別に作成できます。
orgName=openbanking-prod
ocpAdminId=ocp01 # 対応するAPI管理関連プロジェクトにアクセスできるOCPユーザーの名前。
tenantAdminId=api01 # 自身のAPIテナント(および自身のAPIゲートウェイ)の管理者となるAPIユーザーの名前。
create_gws_with_each_tenant=true # trueの場合、同じOCPクラスター内の各対応するテナントに対してAPIゲートウェイを持つOCPプロジェクトが作成されます。
gw_project_name=$orgName-gw
$ ansible-playbook -i localhost, -c local /tmp/3scale_multitenant.yml
-e"ACTION=tenant_mgmt"
-e"API_MANAGER_NS=$API_MANAGER_NS"
-e"adminEmailUser=$adminEmailUser"
-e"adminEmailDomain=$adminEmailDomain"
-e"create_gws_with_each_tenant=$create_gws_with_each_tenant"
-e"orgName=$orgName"
-e"ocpAdminId=$ocpAdminId"
-e"tenantAdminId=$tenantAdminId"
-e"gw_project_name=$gw_project_name"
-e"rht_service_token_user=$rht_service_token_user"
-e"rht_service_token_password=$rht_service_token_password"
==== テナントユーザー資格情報
各テナントには、そのテナントの管理者権限を持つユーザーが設定されます。
userIdおよびパスワードは、defaults/main.ymlに含まれる次のansible変数を使用して生成されます:
. テナント管理者ユーザーID: {{ tenant_admin_user_name_base }}(例:api01, api02, api03 ...., api10)。 . テナント管理者パスワード: {{ tenantAdminPasswd }}。
=== APIマネージャーにおける古い_WILDCARD_DOMAIN_の状態 元々プロビジョニングされたAPIマネージャーのDNSが変更されるシナリオが考えられます。 特に、元のAPIマネージャーのプロビジョニングで使用された_WILDCARD_DOMAIN_パラメーターの値がもはや有効でないことがあります。
このようなことが起こるシナリオの一例として、Ravelloでの元のプロビジョニングがRavelloの_Bleprint_として管理される場合があります。 ランタイムでは、このRavelloの_blueprint_からアプリケーションがインスタンス化され、実際のランタイムDNSが適用されます。 このDNSは、ビルド時に使用された元のDNSとは異なります。
この古い状態に関する問題を修正するには、次のことを行う必要があります:
. APIマネージャーのネームスペース内のすべてのルートを更新します。 . APIマネージャーのsystem-mysqlデータベース内の_system.accounts_テーブルにある古いURLを更新します。 . configmap内の_THREESCALE_SUPERDOMAIN_変数の値を変更します:system-environment:
これらを変更する方法の例はlink:https://gist.github.com/jbride/be32113707418cb43d73c9ef28a09b9d[こちら]で見つけることができます。
以上が翻訳文です。何か追加のリクエストや修正があればお知らせください。
ansible-galaxy install gpe_mw_ansible.3scale_multitenant