Red Hat 3scale API Management のインストール
3scale API Management のインストールおよび設定
概要
はじめに
このガイドは、3scale のインストールおよび設定に役立ちます。
Red Hat ドキュメントへのフィードバック (英語のみ)
Red Hat ドキュメントに関するご意見やご感想をお寄せください。
改善を提案するには、Jira 課題を作成し、変更案を説明してください。ご要望に迅速に対応できるよう、できるだけ詳細にご記入ください。
前提条件
- Red Hat カスタマーポータルのアカウントがある。このアカウントを使用すると、Red Hat Jira Software インスタンスにログインできます。アカウントをお持ちでない場合は、アカウントを作成するように求められます。
手順
- Create issue にアクセスします。
- Summary テキストボックスに、問題の簡単な説明を入力します。
Description テキストボックスに、次の情報を入力します。
- 問題が見つかったページの URL。
-
問題の詳細情報。
他のフィールドの情報はデフォルト値のままにすることができます。
- Create をクリックして、Jira 課題をドキュメントチームに送信します。
フィードバックをご提供いただきありがとうございました。
第1章 OpenShift への 3scale API Management のインストール
このセクションでは、OpenShift に Red Hat 3scale API Management 2.14 をデプロイする一連の手順を説明します。
オンプレミスデプロイメントの 3scale ソリューションは、以下の要素で構成されています。
- 2 つのアプリケーションプログラミングインターフェイス (API) ゲートウェイ: Embedded APIcast。
- 永続ストレージが含まれる 3scale 管理ポータルおよび開発者ポータル 1 つ。
- 3scale Istio アダプターはオプションのアダプターとして利用可能で、これを使用すると、Red Hat OpenShift Service Mesh 内で実行中のサービスにラベルを付け、そのサービスを 3scale と統合することができます。詳細は、3scale アダプター に関するドキュメントを参照してください。
前提条件
- 3scale サーバーを UTC (協定世界時) に設定する必要があります。
OpenShift に 3scale をインストールするには、以下のセクションに概略を示す手順を実施します。
- OpenShift に 3scale API Management をインストールするためのシステム要件
- Operator を使用した 3scale API Management のデプロイ
- Operator を使用した 3scale API Management の外部データベース
- Operator を使用した OpenShift での 3scale API Management のデプロイメント設定オプション
- Oracle をシステムデータベースとして使用するオペレーターによる 3scale API Management のインストール
- 3scale API Management のインストールに関する一般的な問題のトラブルシューティング
1.1. OpenShift に 3scale API Management をインストールするためのシステム要件
このセクションでは、OpenShift に Red Hat 3scale API Management をインストールするためのシステム要件を示します。
1.1.1. 環境要件
3scale には、Red Hat 3scale API Management でサポートされる構成 で規定される環境が必要です。
永続ボリュームの要件は、デプロイメントの種類によって異なります。外部データベースを使用してデプロイメントする場合、永続ボリュームは必要ありません。一部のデプロイメントタイプでは、Amazon S3 バケットが永続ボリュームの代わりとして機能します。ローカルファイルシステムストレージを使用する場合は、特定のデプロイメントタイプとそれに関連する永続ボリュームの要件を考慮してください。
永続ボリューム
- Redis、MySQL、System-searchd の永続性のための 4 つの RWO (ReadWriteOnce) 永続ボリューム。
- 開発者ポータルコンテンツおよび System-app Assets 用の 1 つの RWX (ReadWriteMany) 永続ボリューム。
RWX 永続ボリュームは、グループによる書き込みができるように設定します。必要なアクセスモードをサポートする永続ボリュームタイプのリストは、OpenShift のドキュメント を参照してください。
ネットワークファイルシステム (NFS) は、RWX ボリュームのみ 3scale でサポートされます。
IBM Power (ppc64le) および IBM Z (s390x) の場合は、以下のコマンドを使用してローカルストレージをプロビジョニングします。
ストレージ
- NFS
コンテンツ管理システム (CMS) ストレージに Amazon Simple Storage Service (Amazon S3) バケットを使用している場合は、以下を実行します。
永続ボリューム
- Redis および MySQL の永続用の 3 つの RWO (ReadWriteOnce) 永続ボリューム。
ストレージ
- 1 x Amazon S3 バケット
- NFS
1.1.2. ハードウェア要件
ハードウェア要件は、用途のニーズによって異なります。Red Hat は、テストを行い個々の要件を満たすように環境を設定することを推奨します。OpenShift 上に 3scale の環境を設定する場合、以下が推奨されます。
- クラウド環境へのデプロイメントには、コンピュートタスクに最適化したノードを使用する (AWS c4.2xlarge または Azure Standard_F8)。
- メモリーの要件が現在のノードで使用できる RAM よりも大きい場合、非常に大きなインストールでは、Redis に別のノードが必要になることがある (AWS M4 シリーズまたは Azure Av2 シリーズ)。これは、デプロイメントに Redis が組み込まれている場合にのみ該当することに 注意してください。
- ルーティングタスクとコンピュートタスクには別のノードを使用する。
- 3scale 固有のタスクには専用のコンピュートノードを使用する。
関連情報
1.2. OpenShift への 3scale API Management オペレーターのインストール
3scale は、直近 2 つの OpenShift Container Platform (OCP) 一般提供 (GA) リリースをサポートします。詳細は、Red Hat 3scale API Management のサポートされる構成 のアーティクル記事を参照してください。
このセクションでは、以下の項目の実施方法を説明します。
- 新しいプロジェクトを作成する。
- Red Hat 3scale API Management インスタンスをデプロイする。
- Operator をデプロイした後にカスタムリソースをデプロイする。
前提条件
管理者権限を持つアカウントを使用して、サポート対象バージョンの OpenShift Container Platform 4 クラスターにアクセスできる。
- サポート対象設定の情報は、Red Hat 3scale API Management のサポートされる構成 を参照してください。
3scale Operator とカスタムリソース定義 (CRD) は、新たに作成した空の プロジェクト にデプロイしてください。インフラストラクチャーが含まれる既存のプロジェクトにデプロイすると、既存の要素が変更または削除されることがあります。
OpenShift に 3scale Operator をインストールするには、以下のセクションに概略を示す手順を実施します。
1.2.1. 新しい OpenShift プロジェクトの作成
以下の手順で、3scale-project
という新しい OpenShift プロジェクトを作成する方法を説明します。このプロジェクト名を実際のプロジェクト名に置き換えてください。
手順
新しい OpenShift プロジェクトを作成するには、以下の手順を実施します。
英数字とダッシュを使用して、有効な名前を指定します。たとえば、以下のコマンドを実行して
3scale-project
を作成します。$ oc new-project 3scale-project
これにより、operator、APIManager カスタムリソース (CR)、および Capabilities カスタムリソースがインストールされる新しい OpenShift プロジェクト が作成されます。Operator は、そのプロジェクトの OLM を通じてカスタムリソースを管理します。
1.2.2. OLM を使用した 3scale API Management オペレーターのインストールと設定
Operator Lifecycle Manager (OLM) を使用して、OpenShift Container Platform (OCP) 4.12 (以降) クラスターに 3scale Operator をインストールします。この際に、OCP コンソールの OperatorHub を使用します。以下のインストールモードを使用して、3scale Operator をインストールできます。
- クラスター全体。Operator がクラスターのすべての namespace で利用できます。
- クラスター上の特定の namespace。
ネットワークが制限された環境または非接続クラスターで OpenShift Container Platform を使用している場合には、Operator Lifecycle Manager は OperatorHub を使用できなくなります。OLM の設定および使用は、Operator のネットワークが制限された環境での Operator Lifecycle Manager の使用 に記載の手順に従ってください。
前提条件
- 新しい OpenShift プロジェクトの作成 で定義したプロジェクトに 3scale operator をインストールおよびデプロイしている。
手順
- OpenShift Container Platform コンソールにおいて、管理者権限を持つアカウントを使用してログインします。
- Operators > OperatorHub の順にクリックします。
- Filter by keyword ボックスに 3scale Operator と入力して、Red Hat Integration - 3scale を検索します。
- Red Hat Integration - 3scale をクリックします。Operator に関する情報が表示されます。
- Operator に関する情報を確認し、Install をクリックします。Install Operator ページが開きます。
- Install Operator ページで、任意のチャネルを選択して、Update channel セクションを更新します。
Installation mode セクションで、Operator のインストール先を選択します。
- All namespaces on the cluster(default): Operator はクラスターのすべての namespace で利用可能になります。
- A specific namespace on the cluster: Operator は、選択したクラスター上の特定の単一 namespace でしか使用することができません。
- Install をクリックします。
- インストールが完了すると、Operator が使用できる状態になったことを示す確認メッセージが表示されます。
3scale Operator の ClusterServiceVersion (CSV) が正しくインストールされていることを確認します。また、Operator のインストールが成功したことが報告されているかどうかも確認します。
- Operators > Installed Operators の順にクリックします。
- Red Hat Integration - 3scale Operator をクリックします。
- Details タブで、Conditions セクションまで下にスクロールします。Succeeded 条件のReason 列の下に InstallSucceeded と表示されます。
ネットワークが制限された環境で OCP を使用する場合、ここに示す手順に加えて、3scale 開発者ポータルで使用する許可されるドメインのリストを作成します。以下の例を参照してください。
- 開発者ポータルに追加するすべてのリンク
- GitHub などのサードパーティー SSO プロバイダーを使用したシングルサインオン (SSO) インテグレーション
- 請求
- 外部 URL をトリガーする Webhook
1.2.2.1. ネットワーク接続が得られない環境における制約
ネットワーク接続が得られない環境の 3scale 2.14 に対する現在の制約の概要を、以下のリストに示します。
- 開発者ポータルへの GitHub ログインができない
- サポートのリンクが機能しない
- 外部ドキュメントへのリンクが機能しない
- 開発者ポータルの OpenAPI Specification (OAS) 検証ツールが機能しない (これにより、外部サービスへのリンクが影響を受けます)
ActiveDocs の製品 Overview ページにおいて、OAS へのリンクが機能しない
- 新たな ActiveDocs 仕様を作成する場合、オプション Skip swagger validations を選択する必要もあります。
1.2.3. OLM を使用した 3scale API Management オペレーターのアップグレード
Operator ベースのデプロイメントで、1 つの namespace から全 namespace のクラスター全体のインストールに、3scale Operator をアップグレードするには、その namespace から 3scale Operator を削除してから、クラスター上にその Operator を再インストールする必要があります。
クラスター管理者は Web コンソールを使用して、選択した namespace からインストールされた Operator を削除できます。Operator をアンインストールしても、既存の 3scale インスタンスはアンインストールされません。
3scale Operator を namespace からアンインストールしたら、OLM を使用してクラスター全体のモードで Operator をインストールできます。
前提条件
- namespace の削除パーミッションがある 3scale 管理者権限または OpenShift ロール。
手順
- OpenShift Container Platform コンソールにおいて、管理者権限を持つアカウントを使用してログインします。
- Operators > OperatorHub の順にクリックします。インストール済みの Operator ページが表示されます。
- 3scale を Filter by name に入力して Operator を見つけ、クリックします。
- Operator Details ページで、Actions ドロップダウンメニューから Uninstall Operator を選択して、特定の namespace から削除します。
Uninstall Operator? ダイアログボックスが表示され、以下が通知されます。
Removing the operator will not remove any of its custom resource definitions or managed resources. If your operator has deployed applications on the cluster or configured off-cluster resources, these will continue to run and need to be cleaned up manually. This action removes the operator as well as the Operator deployments and pods, if any. Any operands and resources managed by the operator, including CRDs and CRs, are not removed. The web console enables dashboards and navigation items for some operators. To remove these after uninstalling the operator, you might need to manually delete the operator CRDs.
- Uninstall を選択します。この Operator は実行を停止し、更新を受信しなくなります。
- OpenShift Container Platform コンソールで、Operators > OperatorHub をクリックします。
- Filter by keyword ボックスに 3scale Operator と入力して、Red Hat Integration - 3scale を検索します。
- Red Hat Integration - 3scale をクリックします。Operator に関する情報が表示されます。
- Install をクリックします。Install Operator ページが開きます。
- Install Operator ページで、任意のチャネルを選択して、Update channel セクションを更新します。
- Installation mode セクションで、All namespaces on the cluster(default) を選択します。Operator はクラスターのすべての namespace で利用可能になります。
- Subscribe をクリックします。3scale Operator の詳細ページが表示され、Subscription Overview を確認できます。
- サブスクリプションの Upgrade Status が Up to date と表示されていることを確認します。
- 3scale Operator の ClusterServiceVersion (CSV) が表示されることを確認します。
1.2.3.1. マイクロリリースの自動アプリケーションの設定
外部の Oracle データベースを使用している場合は、3scale 更新ストラテジーを Manual に設定します。外部 Oracle データベースでは、データベースおよび .spec.system.image
が手動で更新されます。Automatic 設定は .spec.system.image
を更新しません。3scale の移行 ガイドを参照して、外部の Oracle データベースを使用して operator ベースのインストールを更新します。
自動更新を取得するには、3scale operator の承認ストラテジーが Automatic に設定されている必要があります。これにより、マイクロリリースの更新を自動的に適用できます。ここでは、Automatic と Manual の設定の違いを説明し、もう 1 つから別の設定に変更する手順を説明します。
自動および手動:
- インストール時に、デフォルトで Automatic 設定が選択されたオプションになります。新規更新のインストールは、更新が利用可能になると行われます。これは、インストール時または後にいつでも変更できます。
- インストール時に 手動 オプションを選択するか、その後のいつでも手動オプションを選択すると、更新が利用可能になった時点で受信されます。次に、インストール計画 を承認し、独自に適用する必要があります。
手順
- Operators > Installed Operators の順にクリックします。
- Installed Operator のリストから Red Hat Integration - 3scale をクリックします。
- Subscription タブをクリックします。Subscription Details の見出しの下に、小見出しの Approval が表示されます。
- Approval の下のリンクをクリックします。リンクはデフォルトで Automatic に設定されます。小見出しのモーダル (Change Update Approval Strategy) が表示されます。
- 選択するオプション Automatic (デフォルト) または Manual を選択し、Save をクリックします。
1.3. APIcast Operator の OpenShift へのインストール
このセクションでは、OpenShift Container Platform (OCP) コンソールから APIcast Operator をインストールする手順を説明します。
前提条件
- OCP 4.x 以降およびその管理者権限。
手順
-
Projects > Create Project の順に移動し、新規プロジェクト
operator-test
を作成します。 - Operators > OperatorHub の順にクリックします。
- Filter by keyword ボックスに apicast Operator と入力して Red Hat Integration - 3scale APIcast gateway を検索します。
- Red Hat Integration - 3scale APIcast gateway をクリックします。APIcast Operator に関する情報が表示されます。
- Install をクリックします。Create Operator Subscription ページが表示されます。
Install をクリックして、Create Operator Subscription ページのデフォルトの選択をすべて受け入れます。
注記クラスター全体または namespace 固有のオプションなど、さまざまな Operator のバージョンとインストールモードを選択できます。クラスター全体のインストールは、クラスターごとに 1 つだけ行うことができます。
- サブスクリプションの Upgrade Status として Up to date が表示されます。
-
Operators > Installed Operators の順にクリックし、
operator-test
プロジェクトで APIcast Operator の ClusterServiceVersion (CSV) ステータスが最終的に InstallSucceeded と表示されることを確認します。
1.4. Operator を使用した 3scale API Management のデプロイ
このセクションでは、APIManager カスタムリソース (CR) を使用して、3scale Operator 経由で 3scale ソリューションをインストールおよびデプロイする方法を説明します。
ワイルドカードルートは、3scale 2.6 以降 廃止されています。
- この機能は、バックグラウンドで Zync により処理されます。
- API プロバイダーが作成、更新、または削除されると、これらの変更が自動的にルートに反映されます。
前提条件
- 3scale Operator で自動承認機能を有効にして 3scale のマイクロリリースの自動更新が確実に受信されるようにする。Automatic はデフォルトの承認設定です。これを特定のニーズに合わせて変更するには、マイクロリリースの自動アプリケーションの設定 の手順を使用します。
- Operator を使用して 3scale API Management をデプロイするには、まず OpenShift への 3scale API Management オペレーターのインストール の手順に従う必要があります。
OpenShift Container Platform 4.x
- OpenShift クラスターの管理者権限を持つユーザーアカウント。
- サポート対象設定の情報は、Red Hat 3scale API Management のサポートされる構成 を参照してください。
以下の手順に従って、Operator を使用して 3scale をデプロイします。
1.4.1. APIManager カスタムリソースのデプロイ
Amazon Simple Storage Service (Amazon S3) を使用する場合は、Amazon Simple Storage Service 3scale API Management fileStorage のインストール を参照してください。
Operator は APIManager CR を監視し、APIManager CR で指定されているように、必要な 3scale ソリューションをデプロイします。
手順
Operators > Installed Operators の順にクリックします。
- Installed Operators のリストで、Red Hat Integration - 3scale をクリックします。
- API Manager タブをクリックします。
- Create APIManager をクリックします。
サンプルのコンテンツを消去して以下の YAML 定義をエディターに追加し、続いて Create をクリックします。
3scale 2.8 より前のバージョンでは、
highAvailability
フィールドをtrue
に設定してレプリカの自動追加を設定できるようになりました。3scale 2.8 以降、レプリカの追加は以下の例のように APIManager CR の replicas フィールドによって制御されます。注記wildcardDomain パラメーターの値は、OpenShift Container Platform (OCP) ルーターのアドレスに解決される有効なドメイン名である必要があります。たとえば、
apps.mycluster.example.com
になります。最小要件のある APIManager CR:
Copy to clipboardCopiedapiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager-sample spec: wildcardDomain: example.com
レプリカが設定された APIManager CR:
Copy to clipboardCopiedapiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager-sample spec: system: appSpec: replicas: 1 sidekiqSpec: replicas: 1 zync: appSpec: replicas: 1 queSpec: replicas: 1 backend: cronSpec: replicas: 1 listenerSpec: replicas: 1 workerSpec: replicas: 1 apicast: productionSpec: replicas: 1 stagingSpec: replicas: 1 wildcardDomain: example.com
1.4.2. 管理ポータルの URL の取得
Operator を使用して 3scale をデプロイすると、固定 URL (3scale-admin.${wildcardDomain}
) のデフォルトテナントが作成されます。
3scale の Dashboard には、テナントの新しいポータル URL が表示されます。たとえば、<wildCardDomain> が 3scale-project.example.com
の場合、管理ポータル URL は https://3scale-admin.3scale-project.example.com
となります。
wildcardDomain
は、インストール中に指定した <wildCardDomain> パラメーターです。以下のコマンドを使用し、ブラウザーでこの一意の URL を開きます。
$ xdg-open https://3scale-admin.3scale-project.example.com
オプションとして、マスターポータル URL (master.${wildcardDomain}
) に新しいテナントを作成できます。
1.4.3. APIManager 管理ポータルとマスター管理ポータルの認証情報を取得する
Operator ベースのデプロイ後に 3scale 管理ポータルまたはマスター管理ポータルのいずれかにログインするには、個別のポータルごとに認証情報が必要です。これらの認証情報を取得するには:
次のコマンドを実行して、管理ポータルの認証情報を取得します。
Copy to clipboardCopied$ oc get secret system-seed -o json | jq -r .data.ADMIN_USER | base64 -d $ oc get secret system-seed -o json | jq -r .data.ADMIN_PASSWORD | base64 -d
- Admin Portal 管理者としてログインして、これらの認証情報が機能していることを確認します。
次のコマンドを実行して、マスター管理ポータルの認証情報を取得します。
Copy to clipboardCopied$ oc get secret system-seed -o json | jq -r .data.MASTER_USER | base64 -d $ oc get secret system-seed -o json | jq -r .data.MASTER_PASSWORD | base64 -d
- マスター管理ポータル管理者としてログインして、これらの認証情報が機能していることを確認します。
関連情報
オプションとして、マスターポータル URL (master.${wildcardDomain}
) に新しいテナントを作成できます。
1.4.4. Operator を使用した 3scale API Management の外部データベース
Red Hat 3scale API Management デプロイメントからデータベースを外部化すると、アプリケーションからの分離とデータベースレベルでのサービス中断に対する回復力が提供されることになります。サービス中断に対する復元力は、データベースをホストするインフラストラクチャーまたはプラットフォームプロバイダーが提供するサービスレベルアグリーメント (SLA) によって異なります。これは 3scale では提供されていません。選択したデプロイメントによって提供されるデータベースの外部化の詳細は、関連ドキュメントを参照してください。
Operator を使用して 3scale の外部データベースを使用する場合、その目的は、たとえば 1 つ以上のデータベースに障害が発生した場合でも、中断のない稼働時間を提供することです。
3scale Operator ベースのデプロイメントで外部データベースを使用する場合は、次の点に注意してください。
- 3scale の重要なデータベースを外部に設定し、デプロイします。重要なデータベースには、システムデータベース、システム redis およびバックエンド redis コンポーネントが含まれます。これらのコンポーネントが高可用性となるようにデプロイおよび設定するようにしてください。
3scale をデプロイする前に対応する Kubernetes シークレットを作成して、3scale のこれらのコンポーネントへの接続エンドポイントを指定します。
- 詳細は、外部データベースモードでのインストール を参照してください。
- データベース以外のデプロイメント設定の詳細は、Enabling Pod Disruption Budgets を参照してください。
APIManager
CR で、.spec.externalComponents
属性を設定して、システムデータベース、システム redis およびバックエンド redis が外部であることを指定します。
Copy to clipboardCopiedexternalComponents: backend: redis: true system: database: true redis: true zync: database: true
さらに zync データベースを高可用性にして、再起動時のキュージョブデータを失う可能性をなくす場合は、以下の点に注意してください。
- zync データベースを外部でデプロイおよび設定します。このデータベースを高可用性の設定でデプロイおよび設定するようにしてください。
3scale をデプロイする前に対応する Kubernetes シークレットを作成して、3scale の zync データベースへの接続エンドポイントを指定します。
- Zync データベースシークレット を参照してください。
-
3scale を設定するには、
APIManager
CR の.spec.externalComponents.zync.database
属性をtrue
に設定し、zync データベースが外部データベースであることを指定します。
1.5. Operator を使用した OpenShift での 3scale API Management のデプロイメント設定オプション
この注記に含まれる外部の Web サイトへのリンクは、お客様の利便性のみを目的として提供しています。Red Hat はリンクの内容を確認しておらず、コンテンツまたは可用性に責任を負わないものとします。外部 Web サイトへのリンクが含まれていても、Red Hat が Web サイトまたはその組織、製品、もしくはサービスを保証することを意味するものではありません。お客様は、外部サイトまたはコンテンツの使用 (または信頼) によって生じる損失または費用について、Red Hat が責任を負わないことに同意するものとします。
このセクションでは、Operator を使用した OpenShift への Red Hat 3scale API Management のデプロイメント設定オプションを説明します。
前提条件
- Operator を使用して 3scale API Management をデプロイするには、まず OpenShift への 3scale API Management オペレーターのインストール の手順に従う必要があります。
OpenShift Container Platform 4.x
- OpenShift クラスターの管理者権限を持つユーザーアカウント。
1.5.1. Embedded APIcast のプロキシーパラメーターの設定
3scale の管理者は、Embedded APIcast ステージングおよび実稼働環境用のプロキシーパラメーターを設定することができます。このセクションでは、APIManager カスタムリソース (CR) でプロキシーパラメーターを指定するための参照情報を提供します。つまり、3scale Operator (APIManager CR) を使用して 3scale を OpenShift にデプロイします。
これらのパラメーターは、APIManager CR を初めてデプロイするときに指定できます。または、デプロイされた APIManager CR を更新すると、Operator が更新を調整します。APIManager カスタムリソースのデプロイ を参照してください。
Embedded APIcast には、プロキシー関連の 4 つの設定パラメーターがあります。
-
allProxy
-
httpProxy
-
httpsProxy
-
noProxy
allProxy
allProxy
パラメーターは、要求でプロトコル固有のプロキシーが指定されていない場合にサービスに接続するために使用される HTTP または HTTPS プロキシーを指定します。
プロキシーを設定したら、allProxy
パラメーターをプロキシーのアドレスに設定して APIcast を設定します。プロキシーでは認証機能はサポートされていません。つまり、APIcast では認証された要求はプロキシーには送信されません。
allProxy
パラメーターの値は文字列で、デフォルトはなく、パラメーターは必須ではありません。この形式を使用して、spec.apicast.productionSpec.allProxy
パラメーターまたは spec.apicast.stagingSpec.allProxy
パラメーターを設定します。
<scheme>://<host>:<port>
以下に例を示します。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
apicast:
productionSpec:
allProxy: http://forward-proxy:80
stagingSpec:
allProxy: http://forward-proxy:81
Copy to clipboardCopiedhttpProxy
httpProxy
パラメーターは、HTTP サービスへの接続に使用される HTTP プロキシーを指定します。
プロキシーを設定したら、httpProxy
パラメーターをプロキシーのアドレスに設定して APIcast を設定します。プロキシーでは認証機能はサポートされていません。つまり、APIcast では認証された要求はプロキシーには送信されません。
httpProxy
パラメーターの値は文字列で、デフォルトはなく、パラメーターは必須ではありません。この形式を使用して、spec.apicast.productionSpec.httpProxy
パラメーターまたは spec.apicast.stagingSpec.httpProxy
パラメーターを設定します。
http://<host>:<port>
以下に例を示します。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
apicast:
productionSpec:
httpProxy: http://forward-proxy:80
stagingSpec:
httpProxy: http://forward-proxy:81
Copy to clipboardCopiedhttpsProxy
httpsProxy
パラメーターは、サービスへの接続に使用される HTTPS プロキシーを指定します。
プロキシーを設定したら、httpsProxy
パラメーターをプロキシーのアドレスに設定して APIcast を設定します。プロキシーでは認証機能はサポートされていません。つまり、APIcast では認証された要求はプロキシーには送信されません。
httpsProxy
パラメーターの値は文字列で、デフォルトはなく、パラメーターは必須ではありません。この形式を使用して、spec.apicast.productionSpec.httpsProxy
パラメーターまたは spec.apicast.stagingSpec.httpsProxy
パラメーターを設定します。
https://<host>:<port>
以下に例を示します。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
apicast:
productionSpec:
httpsProxy: https://forward-proxy:80
stagingSpec:
httpsProxy: https://forward-proxy:81
Copy to clipboardCopiednoProxy
noProxy
パラメーターは、ホスト名とドメイン名のコンマ区切りリストを指定します。要求にこれらの名前のいずれかが含まれる場合、APIcast は要求をプロキシーしません。
たとえば、メンテナンス操作中にプロキシーへのアクセスを停止する必要がある場合は、noProxy
パラメーターをアスタリスク (*) に設定します。これは、すべての要求で指定されたすべてのホストに一致し、プロキシーを実質的に無効にします。
noProxy
パラメーターの値は文字列で、デフォルトはなく、パラメーターは必須ではありません。spec.apicast.productionSpec.noProxy
パラメーターまたは spec.apicast.stagingSpec.noProxy
パラメーターを設定するには、コンマ区切りの文字列を指定します。以下に例を示します。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
apicast:
productionSpec:
noProxy: theStore,company.com,big.red.com
stagingSpec:
noProxy: foo,bar.com,.extra.dot.com
Copy to clipboardCopied1.5.2. 3scale API Management Operator を使用したカスタム環境の挿入
Embedded APIcast を使用する 3scale インストールでは、3scale Operator を使用してカスタム環境を注入できます。Embedded APIcast は、Managed APIcast または Hosted APIcast とも呼ばれます。カスタム環境は、ゲートウェイが提供するすべてのアップストリーム API に APIcast が適用する動作を定義します。カスタム環境を作成するには、Lua コードでグローバル設定を定義します。
3scale のインストールの前または後にカスタム環境を注入できます。カスタム環境を注入した後、および 3scale をインストールした後、カスタム環境を削除できます。3scale Operator は変更を調整します。
前提条件
- 3scale Operator がインストールされている。
手順
注入するカスタム環境を定義する Lua コードを記述します。たとえば、次の
env1.lua
ファイルは、3scale Operator がすべてのサービスに対してロードするカスタムログポリシーを示しています。
Copy to clipboardCopiedlocal cjson = require('cjson') local PolicyChain = require('apicast.policy_chain') local policy_chain = context.policy_chain local logging_policy_config = cjson.decode([[ { "enable_access_logs": false, "custom_logging": "\"{{request}}\" to service {{service.id}} and {{service.name}}" } ]]) policy_chain:insert( PolicyChain.load_policy('logging', 'builtin', logging_policy_config), 1) return { policy_chain = policy_chain, port = { metrics = 9421 }, }
カスタム環境を定義する Lua ファイルからシークレットを作成します。以下に例を示します。
Copy to clipboardCopied$ oc create secret generic custom-env-1 --from-file=./env1.lua
シークレットには複数のカスタム環境を含めることができます。カスタム環境を定義する各ファイルの
-from-file
オプションを指定します。Operator は各カスタム環境をロードします。作成したシークレットを参照する APIManager カスタムリソース (CR) を定義します。以下の例は、カスタム環境を定義するシークレットの参照に関連するコンテンツのみを示しています。
Copy to clipboardCopiedapiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager-apicast-custom-environment spec: wildcardDomain: <desired-domain> apicast: productionSpec: customEnvironments: - secretRef: name: custom-env-1 stagingSpec: customEnvironments: - secretRef: name: custom-env-1
APIManager CR は、カスタム環境を定義する複数のシークレットを参照できます。Operator は各カスタム環境をロードします。
カスタム環境を追加する APIManager CR を作成します。以下に例を示します。
Copy to clipboardCopied$ oc apply -f apimanager.yaml
次のステップ
カスタム環境を定義するシークレットのコンテンツを更新することはできません。カスタム環境を更新する必要がある場合は、以下のいずれかを実行できます。
-
推奨されるオプションは、別の名前でシークレットを作成し、APIManager CR フィールドの
customEnvironments[].secretRef.name
を更新することです。Operator はローリング更新をトリガーし、更新されたカスタム環境をロードします。 -
あるいは、
spec.apicast.productionSpec.replicas
またはspec.apicast.stagingSpec.replicas
を 0 に設定して既存のシークレットを更新してから、spec.apicast.productionSpec.replicas
またはspec.apicast.stagingSpec.replicas
を以前の値に設定して APIcast を再デプロイし直します。
1.5.3. 3scale API Management Operator を使用したカスタムポリシーの挿入
Embedded APIcast を使用する 3scale インストールでは、3scale Operator を使用してカスタムポリシーを注入できます。Embedded APIcast は、Managed APIcast または Hosted APIcast とも呼ばれます。カスタムポリシーを注入すると、ポリシーコードが APIcast に追加されます。次に、以下のいずれかを使用して、カスタムポリシーを API 製品のポリシーチェーンに追加できます。
- 3scale API
-
Product
カスタムリソース (CR)
3scale 管理ポータルを使用してカスタムポリシーを製品のポリシーチェーンに追加するには、カスタムポリシーのスキーマを CustomPolicyDefinition
CR に登録する必要もあります。カスタムポリシー登録は、管理ポータルを使用して製品のポリシーチェーンを設定する場合にのみ必要です。
3scale インストールの一部として、またはインストール後にカスタムポリシーを挿入できます。カスタムポリシーを注入し、3scale をインストールした後、APIManager CR から指定内容を削除することにより、カスタムポリシーを削除できます。3scale Operator は変更を調整します。
前提条件
- 3scale Operator をインストールしているか、以前にインストールしている。
-
Write your own policy で説明されているように、カスタムポリシーを定義している。つまり、カスタムポリシーを定義する
my-policy.lua
、apicast-policy.json
、およびinit.lua
ファイルなどをすでに作成している。
手順
1 つのカスタムポリシーを定義するファイルからシークレットを作成します。以下に例を示します。
Copy to clipboardCopied$ oc create secret generic my-first-custom-policy-secret \ --from-file=./apicast-policy.json \ --from-file=./init.lua \ --from-file=./my-first-custom-policy.lua
複数のカスタムポリシーがある場合は、カスタムポリシーごとにシークレットを作成します。シークレットには、カスタムポリシーを 1 つだけ含めることができます。
3scale Operator を使用してシークレットの変更を監視します。
apimanager.apps.3scale.net/watched-by=apimanager
ラベルを追加して、3scale Operator シークレットの変更の監視を開始します。
Copy to clipboardCopied$ oc label secret my-first-custom-policy-secret apimanager.apps.3scale.net/watched-by=apimanager
注記デフォルトでは、シークレットへの変更は 3scale Operator によって追跡されません。ラベルを設定すると、シークレットに変更を加えるたびに 3scale Operator が APIcast デプロイメントを自動的に更新します。これは、シークレットが使用されているステージング環境と実稼働環境の両方で発生します。3scale Operator は、いかなる形でもシークレットの所有権を取得しません。
カスタムポリシーが含まれる各シークレットを参照する APIManager CR を定義します。APIcast ステージングと APIcast 実稼働環境に同じシークレットを指定できます。次の例は、カスタムポリシーを含む参照シークレットに関連するコンテンツのみを示しています。
Copy to clipboardCopiedapiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager-apicast-custom-policy spec: apicast: stagingSpec: customPolicies: - name: my-first-custom-policy version: "0.1" secretRef: name: my-first-custom-policy-secret - name: my-second-custom-policy version: "0.1" secretRef: name: my-second-custom-policy-secret productionSpec: customPolicies: - name: my-first-custom-policy version: "0.1" secretRef: name: my-first-custom-policy-secret - name: my-second-custom-policy version: "0.1" secretRef: name: my-second-custom-policy-secret
APIManager CR は、異なるカスタムポリシーを定義する複数のシークレットを参照できます。Operator は各カスタムポリシーをロードします。
カスタムポリシーが含まれるシークレットを参照する APIManager CR を作成します。以下に例を示します。
Copy to clipboardCopied$ oc apply -f apimanager.yaml
次のステップ
apimanager.apps.3scale.net/watched-by=apimanager
ラベルを適用すると、3scale Operator はシークレットの変更の監視を開始します。これで、シークレット内のカスタムポリシーを変更できるようになり、Operator がローリング更新を開始して、更新されたカスタム環境をロードします。
-
あるいは、
spec.apicast.productionSpec.replicas
またはspec.apicast.stagingSpec.replicas
を 0 に設定して既存のシークレットを更新してから、spec.apicast.productionSpec.replicas
またはspec.apicast.stagingSpec.replicas
を以前の値に設定して APIcast を再デプロイし直します。
1.5.4. 3scale API Management Operator を使用した OpenTracing の設定
Embedded APIcast を使用する 3scale インストールでは、3scale Operator を使用して OpenTracing を設定できます。OpenTracing は、ステージング環境または実稼働環境用または両方の環境で設定することができます。OpenTracing を有効にすると、APIcast インスタンスに関してより多くの洞察を得て、可観測性を向上できます。
前提条件
- 3scale Operator がインストールされているか、インストール中である。
手順
stringData.config
に OpenTracing 設定の詳細を含めて、シークレットを定義します。これは、OpenTracing 設定の詳細が含まれる属性の唯一有効な値です。その他の仕様では、APIcast が OpenTracing 設定の詳細を受け取れないようにします。以下の例は、有効なシークレット定義を示しています。
Copy to clipboardCopiedapiVersion: v1 kind: Secret metadata: name: myjaeger stringData: config: |- { "service_name": "apicast", "disabled": false, "sampler": { "type": "const", "param": 1 }, "reporter": { "queueSize": 100, "bufferFlushInterval": 10, "logSpans": false, "localAgentHostPort": "jaeger-all-in-one-inmemory-agent:6831" }, "headers": { "jaegerDebugHeader": "debug-id", "jaegerBaggageHeader": "baggage", "TraceContextHeaderName": "uber-trace-id", "traceBaggageHeaderPrefix": "testctx-" }, "baggage_restrictions": { "denyBaggageOnInitializationFailure": false, "hostPort": "127.0.0.1:5778", "refreshInterval": 60 } } type: Opaque
シークレットを作成します。たとえば、以前のシークレット定義を
myjaeger.yaml
ファイルに保存した場合は、以下のコマンドを実行します。
Copy to clipboardCopied$ oc create -f myjaeger.yaml
OpenTracing
属性を指定する APIManager カスタムリソース (CR) を定義します。CR 定義で、openTracing.tracingConfigSecretRef.name
属性を OpenTracing 設定の詳細が含まれるシークレットの名前に設定します。以下の例は、OpenTracing の設定に関するコンテンツのみを示しています。
Copy to clipboardCopiedapiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager1 spec: apicast: stagingSpec: ... openTracing: enabled: true tracingLibrary: jaeger tracingConfigSecretRef: name: myjaeger productionSpec: ... openTracing: enabled: true tracingLibrary: jaeger tracingConfigSecretRef: name: myjaeger
OpenTracing を設定する APIManager CR を作成します。たとえば、APIManager CR を
apimanager1.yaml
ファイルに保存した場合は、以下のコマンドを実行します。
Copy to clipboardCopied$ oc apply -f apimanager1.yaml
次のステップ
OpenTracing のインストール方法に応じて、Jaeger サービスユーザーインターフェイスでトレースが表示されるはずです。
1.5.5. 3scale API Management Operator を使用して Pod レベルで TLS を有効にする
3scale では、実稼働環境用とステージング環境用の 2 つの APIcast インスタンスをデプロイします。TLS は、実稼働用またはステージングのみ、または両方のインスタンスに対して有効にできます。
前提条件
- TLS を有効にするための有効な証明書がある。
手順
以下のように、有効な証明書からシークレットを作成します。
Copy to clipboardCopied$ oc create secret tls mycertsecret --cert=server.crt --key=server.key
この設定により、APIManager カスタムリソース (CR) 内のシークレット参照が公開されます。シークレットを作成してから、以下のように APIManager CR でシークレットの名前を参照します。
-
実稼働: APIManager CR は
.spec.apicast.productionSpec.httpsCertificateSecretRef
フィールドの証明書を公開します。 ステージング: APIManager CR は
.spec.apicast.stagingSpec.httpsCertificateSecretRef
フィールドの証明書を公開します。必要に応じて、以下を設定できます。
-
httpsPort
は、APIcast が HTTPS 接続に対してリッスンを開始するポートを示します。これが HTTP ポートと競合する場合には、APIcast はこのポートを HTTPS にのみ使用します。 httpsVerifyDepth
は、クライアント証明書チェーンの最大長を定義します。注記APIManager CR から有効な証明書および参照を指定します。設定で
httpsPort
にアクセスでき、httpsCertificateSecretRef
ではない場合、APIcast は組み込まれた自己署名証明書を使用します。これは、推奨されません。
-
実稼働: APIManager CR は
- Operators > Installed Operators の順にクリックします。
- Installed Operators のリストで、3scale Operator をクリックします。
- API Manager タブをクリックします。
- Create APIManager をクリックします。
以下の YAML 定義をエディターに追加します。
実稼働 環境で有効にする場合は、次の YAML 定義を設定します。
Copy to clipboardCopiedspec: apicast: productionSpec: httpsPort: 8443 httpsVerifyDepth: 1 httpsCertificateSecretRef: name: mycertsecret
staging で有効にする場合は、以下の YAML 定義を設定します。
Copy to clipboardCopiedspec: apicast: stagingSpec: httpsPort: 8443 httpsVerifyDepth: 1 httpsCertificateSecretRef: name: mycertsecret
- Create をクリックします。
1.5.6. 評価用デプロイメントの概念実証
以降のセクションで、3scale の評価用デプロイメントの概念実証に適用される設定オプションを説明します。このデプロイメントでは、デフォルトとして内部データベースが使用されます。
外部データベースの設定は、実稼働環境向けの標準デプロイメントオプションです。
1.5.6.1. デフォルトのデプロイメント設定
コンテナーには、Kubernetes によるリソースの制限およびリクエスト が適用されます。
- これにより、最低限のパフォーマンスレベルが確保されます。
- また、外部サービスおよびソリューションの割り当てを可能にするために、リソースを制限します。
- 内部データベースのデプロイメント
ファイルストレージは、永続ボリューム (PV) がベースになります。
- ボリュームの 1 つには、読み取り、書き込み、実行 (RWX) アクセスモードが必要です。
- OpenShift は、リクエストに応じてこれらを提供するように設定されている必要があります。
- MySQL を内部リレーショナルデータベースとしてデプロイします。
デフォルトの設定オプションは、お客様による概念実証 (PoC) または評価用途に適しています。
デフォルト設定オプションの 1 つ、複数、またはすべてを、APIManager カスタムリソース (CR) の特定のフィールド値でオーバーライドできます。3scale 演算子では、利用可能なすべての組み合わせが可能です。たとえば、3scale Operator を使用すると、評価モードおよび外部データベースモードで 3scale をデプロイすることができます。
1.5.6.2. 評価モードでのインストール
評価モードでのインストールの場合、コンテナーには Kubernetes によるリソースの制限およびリクエスト が適用されません。以下に例を示します。
- メモリーのフットプリントが小さい。
- 起動が高速である。
- ノートパソコンで実行可能である。
- プリセールス/セールスでのデモに適する。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
wildcardDomain: lvh.me
resourceRequirementsEnabled: false
Copy to clipboardCopied関連情報
1.5.7. 外部データベースモードでのインストール
- Red Hat 3scale API Management デプロイメントからデータベースを外部化すると、アプリケーションからの分離とデータベースレベルでのサービス中断に対する回復力が提供されることになります。サービス中断に対する復元力は、データベースをホストするインフラストラクチャーまたはプラットフォームプロバイダーが提供するサービスレベルアグリーメント (SLA) によって異なります。これは 3scale では提供されていません。選択したデプロイメントによって提供されるデータベースの外部化の詳細は、関連ドキュメントを参照してください。
- 免責事項: ここに記載されている外部 Web サイトへのリンクは、お客様の利便性のみを目的として提供されています。Red Hat はリンクの内容を確認しておらず、コンテンツまたは可用性に責任を負わないものとします。外部 Web サイトへのリンクが含まれていても、Red Hat が Web サイトまたはその組織、製品、もしくはサービスを保証することを意味するものではありません。お客様は、外部サイトまたはコンテンツの使用 (または信頼) によって生じる損失または費用について、Red Hat が責任を負わないことに同意するものとします。
外部データベースのインストールは、中断のない稼働時間を提供したい場合、または独自のデータベースを再利用する予定がある運用環境に適しています。
3scale の外部データベースインストールモードを有効にすると、以下のデータベースの 1 つまたな複数を 3scale の外部として設定できます。
-
backend-redis
-
system-redis
-
system-database
(mysql
、postgresql
、またはoracle
) -
zync-database
3scale をデプロイするために APIManager CR を作成する前に、OpenShift シークレットを使用して以下に示す外部データベースの接続設定を提供する必要があります。
1.5.7.1. バックエンド Redis シークレット
3scale バックエンドは、ストレージ用とキュー用の 2 つの Redis データベースを使用します。ストレージデータベースには、API サービス、アプリケーションキー、メトリクス、制限、使用状況データ (現在の使用状況や履歴分析を含む) に関する情報が保存されます。使用率データは Redis ストレージデータベースに固有ですが、システムコンポーネントのデータベースはその他のデータの主なソースであり、必要に応じて再作成できます。
キューデータベースは、API の使用状況をレポートするために、Resque に基づいてバックグラウンドジョブキューを一時的に保存します。バックエンドリスナーがこれらのジョブを作成し、バックエンドワーカーがそれらを処理します。
2 つの外部 Redis インスタンスをデプロイし、以下の例に示すように接続設定を入力します。
apiVersion: v1
kind: Secret
metadata:
name: backend-redis
stringData:
REDIS_STORAGE_URL: "redis://backend-redis-storage"
REDIS_STORAGE_SENTINEL_HOSTS: "redis://sentinel-0.example.com:26379,redis://sentinel-1.example.com:26379, redis://sentinel-2.example.com:26379"
REDIS_STORAGE_SENTINEL_ROLE: "master"
REDIS_QUEUES_URL: "redis://backend-redis-queues"
REDIS_QUEUES_SENTINEL_HOSTS: "redis://sentinel-0.example.com:26379,redis://sentinel-1.example.com:26379, redis://sentinel-2.example.com:26379"
REDIS_QUEUES_SENTINEL_ROLE: "master"
type: Opaque
Copy to clipboardCopied
シークレット 名は backend-redis
にする必要があります。
フィールド | 説明 | デフォルト値 |
---|---|---|
REDIS_STORAGE_URL | バックエンド Redis ストレージデータベースの URL。 |
インスタンスが外部で管理される場合は必須です。それ以外の場合、デフォルト値は |
REDIS_STORAGE_SENTINEL_ROLE |
バックエンド Redis Storage Sentinel Role 名 ( |
|
REDIS_STORAGE_SENTINEL_HOSTS | バックエンド Redis Storage Sentinel Hosts 名。Redis データベースで Redis Sentinel が設定されている場合にのみ使用します。 |
|
REDIS_QUEUES_URL | バックエンド Redis Queues データベース URL。 |
インスタンスが外部で管理される場合は必須です。それ以外の場合、デフォルト値は |
REDIS_QUEUES_SENTINEL_ROLE |
バックエンド Redis Queues Sentinel Role 名 ( |
|
REDIS_QUEUES_SENTINEL_HOSTS | バックエンド Redis Queues Sentinel Hosts 名。Redis データベースで Redis Sentinel が設定されている場合にのみ使用します。 |
|
1.5.7.2. システム Redis シークレット
2 つの外部 Redis インスタンスをデプロイし、以下の例に示すように接続設定を入力します。
apiVersion: v1
kind: Secret
metadata:
name: system-redis
stringData:
URL: "redis://system-redis"
SENTINEL_HOSTS: "redis://sentinel-0.example.com:26379,redis://sentinel-1.example.com:26379, redis://sentinel-2.example.com:26379"
SENTINEL_ROLE: "master"
type: Opaque
Copy to clipboardCopied
シークレット 名は system-redis
にする必要があります。
フィールド | 説明 | デフォルト値 |
---|---|---|
URL | システム Redis データベース URL。 |
インスタンスが外部で管理される場合は必須です。それ以外の場合、デフォルト値は |
SENTINEL_HOSTS | システム Redis Sentinel ホスト。Redis Sentinel が設定されている場合にのみ使用します。 |
|
SENTINEL_ROLE |
システム Redis Sentinel ロール名 ( |
|
1.5.7.3. システムデータベースシークレット
-
シークレット 名は
system-database
にする必要があります。
3scale をデプロイする場合には、システムデータベースに 3 つの代替手段があります。代替手段に関連のシークレットごとに、異なる属性と値を設定します。
- MySQL
- PostgreSQL
- Oracle データベース
MySQL、PostgreSQL、または Oracle Database のシステムデータベースシークレットをデプロイするには、以下の例のように接続設定を入力します。
MySQL システムデータベースシークレット
apiVersion: v1
kind: Secret
metadata:
name: system-database
stringData:
URL: "mysql2://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
type: Opaque
Copy to clipboardCopied
3scale 2.15 で MySQL 8.0 を使用する場合は、認証プラグインを mysql_native_password
に設定する必要があります。MySQL 設定ファイルに以下を追加します。
[mysqld] default_authentication_plugin=mysql_native_password
PostgreSQL システムデータベースシークレット
apiVersion: v1
kind: Secret
metadata:
name: system-database
stringData:
URL: "postgresql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
type: Opaque
Copy to clipboardCopiedOracle システムデータベースシークレット
apiVersion: v1
kind: Secret
metadata:
name: system-database
stringData:
URL: "oracle-enhanced://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
ORACLE_SYSTEM_PASSWORD: "{SYSTEM_PASSWORD}"
type: Opaque
Copy to clipboardCopied-
{DB_USER}
および{DB_PASSWORD}
は、通常の非システムユーザーのユーザー名およびパスワードです。 -
{DB_NAME}
は Oracle Database の サービス名 です。 -
ORACLE_SYSTEM_PASSWORD
はオプションです。データベースユーザーの設定 を参照してください。
1.5.7.4. Zync データベースシークレット
zync データベースの設定では、spec.externalComponents.zync.database
フィールドが true
に設定されている場合、3scale をデプロイする前に zync
という名前のシークレットを作成する必要があります。このシークレットでは、DATABASE_URL
および DATABASE_PASSWORD
フィールドを外部の zync データベースを参照する値に設定します。以下に例を示します。
apiVersion: v1
kind: Secret
metadata:
name: zync
stringData:
DATABASE_URL: postgresql://<zync-db-user>:<zync-db-password>@<zync-db-host>:<zync-db-port>/zync_production
ZYNC_DATABASE_PASSWORD: <zync-db-password>
type: Opaque
Copy to clipboardCopiedzync データベースは高可用性モードである必要があります。
1.5.7.5. 3scale API Management をデプロイするための APIManager カスタムリソース
-
外部コンポーネントを有効にする場合は、3scale をデプロイする前に、外部コンポーネント (
backend-redis
、system-redis
、system-database
、zync
) ごとにシークレットを作成する必要があります。 -
外部の
system-database
の場合は、外部化するデータベースのタイプを 1 つだけ選択します。
APIManager カスタムリソース (CR) の設定は、選択したデータベースが 3scale デプロイメントの外部にあるかどうかによって異なります。
backend-redis
、system-redis
、または system-database
が 3scale の外部にある場合は、次の例に示すように APIManager CR externalComponents
オブジェクトを設定します。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
wildcardDomain: lvh.me
externalComponents:
system:
database: true
Copy to clipboardCopied1.5.8. 3scale API Management Operator での Pod アフィニティーの有効化
すべてのコンポーネントの 3scale Operator で Pod アフィニティーを有効にすることができます。これにより、各 deploymentConfig
からの Pod レプリカがクラスターの異なるノードに確実に分散され、異なるアベイラビリティーゾーン (AZ) 間で均等に分散されるようになります。
1.5.8.1. コンポーネントレベルでのノードのアフィニティーおよび容認のカスタマイズ
APIManager CR 属性を使用して、3scale ソリューションの Kubernetes の アフィニティー と 容認 をカスタマイズします。これを行うと、さまざまな 3scale コンポーネントを Kubernetes ノードにスケジュールするようにカスタマイズできます。
たとえば、backend-listener
のカスタムノードアフィニティーと system-memcached
のカスタム容認を設定するには、次の手順を実行します。
カスタムのアフィニティーと容認
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
backend:
listenerSpec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "kubernetes.io/hostname"
operator: In
values:
- ip-10-96-1-105
- key: "beta.kubernetes.io/arch"
operator: In
values:
- amd64
system:
memcachedTolerations:
- key: key1
value: value1
operator: Equal
effect: NoSchedule
- key: key2
value: value2
operator: Equal
effect: NoSchedule
Copy to clipboardCopied
次のアフィニティーブロックを apicastProductionSpec
またはデータベース以外の deploymentConfig
に追加します。これにより、preferredDuringSchedulingIgnoredDuringExecution
を使用したソフト podAntiAffinity
設定が追加されます。スケジューラーは、この apicast-production
Pod のセットを、異なる AZ の別々のホストで実行しようとします。それが不可能な場合は、別の場所で実行できるようにします。
ソフト podAntiAffinity
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
deploymentConfig: apicast-production
topologyKey: kubernetes.io/hostname
- weight: 99
podAffinityTerm:
labelSelector:
matchLabels:
deploymentConfig: apicast-production
topologyKey: topology.kubernetes.io/zone
Copy to clipboardCopied
次の例では、requiredDuringSchedulingIgnoredDuringExecution
を使用してハード podAntiAffinity
設定を指定します。Pod をノードにスケジュールするには、条件が満たされる必要があります。空きリソースが少ないクラスターでは、新しい Pod をスケジュールできなくなるなどのリスクが存在します。
ハード podAntiAffinity
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
deploymentConfig: apicast-production
topologyKey: kubernetes.io/hostname
- weight: 99
podAffinityTerm:
labelSelector:
matchLabels:
deploymentConfig: apicast-production
topologyKey: topology.kubernetes.io/zone
Copy to clipboardCopied1.5.9. 複数のアベイラビリティーゾーン内の複数のクラスター
障害が発生した場合、パッシブクラスターをアクティブモードにすると、手順が完了するまでサービスのプロビジョニングが中断されます。このサービス中断が生じるため、メンテナンス期間を設けるようにしてください。
このドキュメントでは、Amazon Web Services (AWS) を使用したデプロイメントに焦点を当てています。他のパブリッククラウドベンダーにも、同じ設定オプションが適用されます。このようなプロバイダーのマネージドデータベースサービスでは、複数のアベイラビリティーゾーンや複数のリージョンがサポートされてします。
3scale を複数の OpenShift クラスターおよび高可用性 (HA) ゾーンにインストールする場合は、ここで紹介するオプションを利用できます。
複数クラスターのインストールオプションでは、クラスターはアクティブ/パッシブ設定で動作し、フェイルオーバー手順にいくつかの手動手順が含まれます。
1.5.9.1. 複数クラスターのインストールの前提条件
複数の OpenShift クラスターを使用する 3scale インストールでは、以下を使用します。
-
APIManager カスタムリソース (CR) の
kubernetes.io/hostname
ルールとtopology.kubernetes.io/zone
ルールの両方で Pod アフィニティーを使用します。 - APIManager CR で Pod の Disruption Budget を使用します。
- 複数のクラスターにわたる 3scale インストールでは APIManager CR で、同じ共有の wildcardDomain 属性仕様を使用する必要があります。データベースに保存されている情報が競合するため、このインストールモードではクラスターごとに異なるドメインを使用することはできません。
トークンやパスワードなどの認証情報を含むシークレットを、同じ値を使用してすべてのクラスターに手動でデプロイする必要があります。3scale Operator は、クラスターごとにセキュアなランダム値を使用してシークレットを作成します。この場合、両方のクラスターで同じ認証情報が必要です。シークレットのリストとその設定方法は、3scale Operator のドキュメントに記載されています。以下は、両方のクラスターでミラーリングする必要があるシークレットのリストです。
-
backend-internal-api
-
system-app
-
system-events-hook
-
system-master-apicast
system-seed
backend-redis
、system-redis
、system-database、
およびzync
のデータベース接続文字列を使用してシークレットを手動でデプロイする必要があります。外部データベースモードでのインストール を参照してください。- クラスター間で共有されるデータベースは、すべてのクラスターで同じ値を使用する必要があります。
- 各クラスターに独自のデータベースがある場合は、クラスターごとに異なる値を使用する必要があります。
-
1.5.9.5. 同期データベースを使用した異なるリージョン上のアクティブ/パッシブクラスター
このセットアップでは、異なるリージョンに 2 つ以上のクラスターを配置し、アクティブ/パッシブモードで 3scale をデプロイします。1 つのクラスターはアクティブでトラフィックを受信します。他のクラスターはスタンバイモードでトラフィックを受信しないためパッシブですが、アクティブクラスターに障害が発生した際にアクティブロールを引き受けることができるよう準備されています。
適切なデータベースアクセスレイテンシーを実現するために、各クラスターに独自のデータベースインスタンスがあります。アクティブな 3scale インストールのデータベースが 3scale パッシブインストールの読み取りレプリカデータベースにレプリケートされるため、すべてのリージョンでデータが利用可能で最新の状態になり、フェイルオーバーが可能になります。

1.5.9.6. 同期データベースの設定とインストール
手順
- 異なるアベイラビリティーゾーンを使用して、異なるリージョンに 2 つ以上の OpenShift クラスターを作成します。3 つ以上のゾーンを使用することを推奨します。
すべてのリージョンで Amazon RDS Multi-AZ を有効にして、必要なすべての AWS ElastiCache インスタンスを作成します。
- Backend Redis データベース用の AWS EC を 2 つ: リージョンごとに 1 つ。
- System Redis データベース用の AWS EC を 2 つ: リージョンごとに 1 つ。
- グローバルデータストア機能を有効にしてクロスリージョンレプリケーションを使用します。これにより、パッシブリージョンのデータベースがアクティブリージョンのマスターデータベースからの読み取りレプリカになります。
すべてのリージョンで Amazon RDS Multi-AZ を有効にして、必要なすべての AWS RDS インスタンスを作成します。
- System データベース用の AWS RDS を 2 つ。
- Zync データベース用の AWS RDS を 2 つ
- クロスリージョンレプリケーションを使用します。これにより、パッシブリージョンのデータベースがアクティブリージョンのマスターデータベースからの読み取りレプリカになります。
- クロスリージョンレプリケーションを使用して、各リージョンのシステムアセット用の AWS S3 バケットを設定します。
- AWS Route53 またはお使いの DNS プロバイダーでカスタムドメインを作成し、アクティブなクラスターの OpenShift ルーターを参照するようにします。これは、APIManager CR の wildcardDomain 属性と一致する必要があります。
3scale をパッシブクラスターにインストールします。APIManager CR は、前のステップで使用したものと同一である必要があります。すべての Pod が実行されたら、すべての
backend
、system
、zync
、およびAPIcast
Pod に 0 個のレプリカをデプロイするように APIManager を変更します。- アクティブなデータベースからのジョブの消費を避けるために、レプリカを 0 に設定します。最初に各レプリカが 0 に設定されていると、Pod の依存関係によりデプロイメントが失敗します。たとえば、Pod は他の Pod が実行されているかどうかを確認します。まず通常どおりにデプロイしてから、レプリカを 0 に設定します。
1.5.9.7. 同期データベースの手動フェイルオーバー
手順
共有データベースの手動フェイルオーバー の手順 1、2、および 3 を実行します。
- すべてのクラスターに、独自の独立したデータベース、つまりアクティブリージョンのマスターからの読み取りレプリカがあります。
- すべてのデータベースでフェイルオーバーを手動で実行して、パッシブリージョンで新しいマスターを選択する必要があります。選択すると、そのマスターがアクティブリージョンになります。
実行する必要があるデータベースの手動フェイルオーバーは次のとおりです。
- AWS RDS: System と Zync。
- AWS ElastiCaches: Backend と System。
- 共有データベースの手動フェイルオーバー の手順 4 を実行します。
1.5.10. Amazon Simple Storage Service 3scale API Management fileStorage のインストール
3scale をデプロイするための APIManager カスタムリソース (CR) を作成する前に、OpenShift シークレットを使用して Amazon Simple Storage Service (Amazon S3) サービスの接続設定を提供します。
- ローカルファイルシステムストレージで 3scale をデプロイする場合は、このセクションを飛ばして次に進んでください。
- シークレットに選択する名前は、既存のシークレット名ではなく、APIManager CR で参照される限り、任意の名前にすることができます。
-
S3 互換ストレージに
AWS_REGION
が提供されていない場合は、default
を使用してください。そうしないと、デプロイメントが失敗します。 - 免責事項: ここに記載されている外部 Web サイトへのリンクは、お客様の利便性のみを目的として提供されています。Red Hat はリンクの内容を確認しておらず、コンテンツまたは可用性に責任を負わないものとします。外部 Web サイトへのリンクが含まれていても、Red Hat が Web サイトまたはその組織、製品、もしくはサービスを保証することを意味するものではありません。お客様は、外部サイトまたはコンテンツの使用 (または信頼) によって生じる損失または費用について、Red Hat が責任を負わないことに同意するものとします。
1.5.10.1. Amazon S3 バケットの作成
前提条件
- Amazon Web Services (AWS) アカウントを作成している。
手順
- システム資産を保存するためのバケットを作成します。
- 開発者ポータルのロゴ機能を使用する場合は、S3 のパブリックアクセスブロッカーを無効にします。
以下の最低限のパーミッションで Identity and Access Management (IAM) ポリシーを作成します。
Copy to clipboardCopied{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::<target_bucket_name>", 1 "arn:aws:s3:::<target_bucket_name>/*" 2 ] } ] }
以下のルールで CORS 設定を作成します。
[ { "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "http://*" ] } ]
1.5.10.2. OpenShift シークレットの作成
以下の例は、永続ボリューム要求 (PVC) の代わりに Amazon S3 を使用する 3scale fileStorage を示しています。
AWS S3 互換プロバイダーは、AWS_HOSTNAME
、AWS_PATH_STYLE
、および AWS_PROTOCOL
オプションキーを使用して S3 シークレットで設定できます。詳細は、fileStorage S3 認証情報のシークレットフィールド の表を参照してください。
以下の例では、任意の シークレット 名を指定することができます。シークレット名が APIManager CR で参照されるためです。
apiVersion: v1
kind: Secret
metadata:
creationTimestamp: null
name: aws-auth
stringData:
AWS_ACCESS_KEY_ID: <ID_123456>
AWS_SECRET_ACCESS_KEY: <ID_98765544>
AWS_BUCKET: <mybucket.example.com>
AWS_REGION: eu-west-1
type: Opaque
Copy to clipboardCopied最後に、3scale をデプロイするための APIManager CR を作成します。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: <example_apimanager>
namespace: <3scale_test>
spec:
wildcardDomain: lvh.me
system:
fileStorage:
simpleStorageService:
configurationSecretRef:
name: aws-auth
Copy to clipboardCopiedAPIManager SystemS3Spec を確認してください。
次の表は、Identity and Access Management (IAM) および Security Token Service (STS) 設定の fileStorage
Amazon S3 認証情報シークレットフィールドの要件を示しています。
- Secure Token Service (STS) を使用する S3 認証方法は、権限が制限された短期間のセキュリティー認証情報で使用します。
- S3 Identity and Access Management (IAM) は、長期的な権限セキュリティー認証情報で使用します。
フィールド | 説明 | IAM に必要 | STS に必要 |
---|---|---|---|
AWS_ACCESS_KEY_ID |
システムの | はい | いいえ |
AWS_SECRET_ACCESS_KEY |
システムの | はい | いいえ |
AWS_BUCKET |
アセット用のシステムの | はい | はい |
AWS_REGION |
アセット用のシステムの | はい | はい |
AWS_HOSTNAME | デフォルト: Amazon エンドポイント - AWS S3 互換プロバイダーエンドポイントのホスト名 | いいえ | いいえ |
AWS_PROTOCOL |
デフォルト: | いいえ | いいえ |
AWS_PATH_STYLE |
デフォルト: | いいえ | いいえ |
AWS_ROLE_ARN | AWS STS を使用して認証するためのポリシーがアタッチされているロールの ARN | いいえ | はい |
AWS_WEB_IDENTITY_TOKEN_FILE |
マウントされたトークンファイルの場所へのパス。例: | いいえ | はい |
1.5.10.3. STS を使用した手動モード
APIManager CR から STS 認証モードを有効にする必要があります。オーディエンスを定義できますが、デフォルト値は openshift
です。
前提条件
- AWS Security Token Service (STS) でさまざまなコンポーネントに一時的な認証情報を使用するように OpenShift を設定します。詳細は、Amazon Web Services Secure Token Service での手動モードの使用 を参照してください。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: <apimanager_sample>
namespace: <3scale_test>
spec:
wildcardDomain: lvh.me
system:
fileStorage:
simpleStorageService:
configurationSecretRef:
name: s3-credentials
sts:
enabled: true
audience: openshift
Copy to clipboardCopied
クラウド認証情報ツールによって生成されたシークレットは、IAM シークレットとは異なるように見えます。AWS_ACCESS_KEY_ID
と AWS_SECRET_ACCESS_KEY
の代わりに、AWS_ROLE_ARN
および AWS_WEB_IDENTITY_TOKEN_FILE
の 2 つの新しいフィールドがあります。
STS シークレットの例
kind: Secret
apiVersion: v1
metadata:
name: s3-credentials
namespace: 3scale
data:
AWS_ROLE_ARN: arn:aws:iam::ID:role/ROLE
AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/openshift/serviceaccount/token
AWS_BUCKET: <mybucket.example.com>
AWS_REGION: eu-west-1
type: Opaque
Copy to clipboardCopiedSTS では、3scale Operator は予測されたボリュームを追加してトークンを要求します。次の Pod には、予測されたボリュームがあります。
-
system-app
-
system-app hook pre
-
system-sidekiq
STS の Pod の例
apiVersion: v1
kind: Pod
metadata:
name: system-sidekiq-1-zncrz
namespace: 3scale-test
spec:
containers:
....
volumeMounts:
- mountPath: /var/run/secrets/openshift/serviceaccount
name: s3-credentials
readOnly: true
....
volumes:
- name: s3-credentials
projected:
defaultMode: 420
sources:
- serviceAccountToken:
audience: openshift
expirationSeconds: 3600
path: token
Copy to clipboardCopied1.5.11. PostgreSQL のインストール
MySQL 内部リレーショナルデータベースがデフォルトのデプロイメントです。このデプロイメント設定をオーバーライドして、代わりに PostgreSQL を使用することができます。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
wildcardDomain: lvh.me
system:
database:
postgresql: {}
Copy to clipboardCopied1.5.12. SMTP 変数の設定 (任意)
3scale は、電子メールを使用して、通知を送信 し、新しいユーザーを招待 します。この機能を使用する場合は、独自の SMTP サーバーを提供し、system-smtp
シークレットで SMTP 変数を設定する必要があります。
system-smtp シークレットで SMTP 変数を設定するには、次の手順を実行します。
手順
OpenShift にログインしていない場合はログインします。
Copy to clipboardCopiedoc login
oc patch
コマンドを使用して、system-smtp
がシークレットの名前であるシークレットタイプを指定し、その後に-p
オプションを付けて、次の変数の JSON に新しい値を書き込みます。表1.4 system-smtp フィールド 説明 デフォルト値 address
これは、使用するリモートメールサーバーのアドレス (ホスト名または IP) です。これが
""
以外の値に設定されている場合、システムはメールサーバーを使用して、API 管理ソリューションで発生するイベントに関連するメールを送信します。""
port
これは、使用するリモートメールサーバーのポートです。
""
domain
メールサーバーで HELO ドメインが必要な場合は、
domain
を使用します。""
認証 (authentication)
メールサーバーで認証が必要な場合に使用します。認証タイプを設定します。plain はパスワードを
plain
で送信し、login
は Base64 エンコードされたパスワードを送信します。cram_md5
は HMAC-MD5 アルゴリズムに基づくチャレンジ/レスポンスメカニズムを組み合わせます。""
username
メールサーバーが認証を必要とし、認証タイプがそれを必要とする場合は、
username
を使用します。""
password
メールサーバーが認証を必要とし、認証タイプがそれを必要とする場合は、
password
を使用します。""
openssl.verify.mode
TLS を使用する場合、OpenSSL が証明書をチェックする方法を設定できます。これは、自己署名証明書やワイルドカード証明書を検証する必要がある場合に役立ちます。OpenSSL 検証定数の名前
none
またはpeer
を使用できます。""
from_address
無返信メールの
from
アドレス値。""
例
Copy to clipboardCopied$ oc patch secret system-smtp -p '{"stringData":{"address":"<your_address>"}}' $ oc patch secret system-smtp -p '{"stringData":{"username":"<your_username>"}}' $ oc patch secret system-smtp -p '{"stringData":{"password":"<your_password>"}}'
secret 変数を設定した後、
system-app
およびsystem-sidekiq
Pod を再デプロイします。
Copy to clipboardCopied$ oc rollout latest dc/system-app $ oc rollout latest dc/system-sidekiq
ロールアウトのステータスを表示し、読み込みが完了したことを確認します。
Copy to clipboardCopied$ oc rollout status dc/system-app $ oc rollout status dc/system-sidekiq
1.5.13. コンポーネントレベルでのコンピュートリソース要件のカスタマイズ
APIManager カスタムリソース (CR) 属性を使用して、3scale ソリューションの Kubernetes コンピュートリソース要件 をカスタマイズします。この操作により、特定の APIManager コンポーネントに割り当てられるコンピュートリソース (CPU およびメモリー) の要件をカスタマイズします。
以下の例で、backend-listener
および zync-database
の system-master の system-provider
コンテナーに対するコンピュートリソース要件をカスタマイズする方法の概要を説明します。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
backend:
listenerSpec:
resources:
requests:
memory: "150Mi"
cpu: "300m"
limits:
memory: "500Mi"
cpu: "1000m"
system:
appSpec:
developerContainerResources:
limits:
cpu: 1500m
memory: 1400Mi
requests:
cpu: 150m
memory: 600Mi
masterContainerResources:
limits:
cpu: 1500m
memory: 1400Mi
requests:
cpu: 150m
memory: 600Mi
providerContainerResources:
limits:
cpu: 1500m
memory: 1400Mi
requests:
cpu: 150m
memory: 600Mi
zync:
databaseResources:
requests:
memory: "111Mi"
cpu: "222m"
limits:
memory: "333Mi"
cpu: "444m"
Copy to clipboardCopied1.5.13.1. APIManager コンポーネントのデフォルトコンピュートリソース
APIManager の spec.resourceRequirementsEnabled
属性を true
に設定すると、デフォルトのコンピュートリソースが APIManager コンポーネントに設定されます。
以下の表に、APIManager コンポーネントに設定された特定のコンピュートリソースのデフォルト値をまとめます。
1.5.13.1.1. CPU およびメモリーの単位
コンピュートリソースのデフォルト値の表に使用される単位について、以下のリストにまとめます。CPU およびメモリーの単位の詳細は、Managing Resources for Containers を参照してください。
リソースの単位について
- m - ミリ CPU またはミリコア
- Mi - メビバイト
- Gi - ギビバイト
- G - ギガバイト
コンポーネント | CPU 要求 | CPU 上限 | メモリー要求 | メモリー上限 |
---|---|---|---|---|
system-app の system-master | 50 m | 1000 m | 600 Mi | 800 Mi |
system-app の system-provider | 50 m | 1000 m | 600 Mi | 800 Mi |
system-app の system-developer | 50 m | 1000 m | 600 Mi | 800 Mi |
system-sidekiq | 100 m | 1000 m | 500 Mi | 2 Gi |
system-searchd | 80 m | 1000 m | 250 Mi | 512 Mi |
system-redis | 150 m | 500 m | 256 Mi | 32 Gi |
system-mysql | 250 m | 制限なし | 512 Mi | 2 Gi |
system-postgresql | 250 m | 制限なし | 512 Mi | 2 Gi |
backend-listener | 500 m | 1000 m | 550 Mi | 700 Mi |
backend-worker | 150 m | 1000 m | 50 Mi | 300 Mi |
backend-cron | 100 m | 500 m | 100Mi | 500 Mi |
backend-redis | 1000 m | 2000 m | 1024 Mi | 32 Gi |
apicast-production | 500 m | 1000 m | 64 Mi | 128 Mi |
apicast-staging | 50 m | 100 m | 64 Mi | 128 Mi |
zync | 150 m | 1 | 250 M | 512 Mi |
zync-que | 250 m | 1 | 250 M | 512 Mi |
zync-database | 50 m | 250 m | 250 M | 2 G |
1.5.14. 3scale API Management コンポーネントの Pod の優先順位
3scale 管理者は、APIManager カスタムリソース (CR) を変更することで、3scale がインストールているさまざまなコンポーネントの Pod の優先度 をセットアップできます。以下のコンポーネントで利用可能なオプションの priorityClassName
を使用します。
-
apicast-production
-
apicast-staging
-
backend-cron
-
backend-listener
-
backend-worker
-
backend-redis
-
system-app
-
system-sidekiq
-
system-searchd
-
system-memcache
-
system-mysql
-
system-postgresql
-
system-redis
-
zync
-
zync-database
-
zync-que
以下に例を示します。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
wildcardDomain: api.vmogilev01.0nno.s1.devshift.org
resourceRequirementsEnabled: false
apicast:
stagingSpec:
priorityClassName: openshift-user-critical
productionSpec:
priorityClassName: openshift-user-critical
backend:
listenerSpec:
priorityClassName: openshift-user-critical
cronSpec:
priorityClassName: openshift-user-critical
workerSpec:
priorityClassName: openshift-user-critical
redisPriorityClassName: openshift-user-critical
system:
appSpec:
priorityClassName: openshift-user-critical
sidekiqSpec:
priorityClassName: openshift-user-critical
searchdSpec:
priorityClassName: openshift-user-critical
searchdSpec:
priorityClassName: openshift-user-critical
memcachedPriorityClassName: openshift-user-critical
redisPriorityClassName: openshift-user-critical
database:
postgresql:
priorityClassName: openshift-user-critical
zync:
appSpec:
priorityClassName: openshift-user-critical
queSpec:
priorityClassName: openshift-user-critical
databasePriorityClassName: openshift-user-critical
Copy to clipboardCopied1.5.15. カスタムラベルの設定
それぞれの Pod に適用される各 DeploymentConfig (DC) の APIManager CR labels 属性を使用してラベルをカスタマイズできます。
カスタムリソース (CR) で定義されたラベルを削除しても、関連付けられた DeploymentConfig (DC) からは自動的に削除されません。DC からラベルを手動で削除する必要があります。
apicast-staging
および backend-listener
の例:
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
wildcardDomain: example.com
resourceRequirementsEnabled: false
backend:
listenerSpec:
labels:
backendLabel1: sample-label1
backendLabel2: sample-label2
apicast:
stagingSpec:
labels:
apicastStagingLabel1: sample-label1
apicastStagingLabel2: sample-label2
Copy to clipboardCopied1.5.16. 証明書の検証をスキップするようにバックエンドクライアントを設定する
コントローラーがオブジェクトを処理するとき、API 呼び出しを行うための新しいバックエンドクライアントを生成します。デフォルトでは、このクライアントはサーバーの証明書チェーンを確認するためにセットアップされています。ただし、開発およびテスト中に、オブジェクトの処理時にクライアントが証明書の検証をスキップする必要がある場合があります。スキップできるようにするには、以下のオブジェクトにアノテーション "insecure_skip_verify": "true"
を追加します。
- ActiveDoc
- アプリケーション
- バックエンド
- CustomPolicyDefinition
- DeveloperAccount
- DeveloperUser
- OpenAPI - バックエンドと製品
- Product
- ProxyConfigPromote
- テナント
OpenAPI CR の例:
apiVersion: capabilities.3scale.net/v1beta1
kind: OpenAPI
metadata:
name: ownertest
namespace: threescale
annotations:
"insecure_skip_verify": "true"
spec:
openapiRef:
secretRef:
name: myopenapi
namespace: threescale
productSystemName: testProduct
Copy to clipboardCopied1.5.17. カスタムアノテーションの設定
3scale では、コンポーネントの Pod にアノテーションが付いています。これらは、設定に使用されるキーと値のペアです。APIManager CR を使用して、任意の 3scale コンポーネントのこれらのアノテーションを変更できます。
カスタムリソース (CR) で定義されたアノテーションを削除しても、関連付けられた DeploymentConfig (DC) からは自動的に削除されません。アノテーションは DC から手動で削除する必要があります。
apicast-staging および backend-listener の APIManager アノテーション
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
wildcardDomain: example.com
apicast:
stagingSpec:
annotations:
anno-sample1: anno1
backend:
listenerSpec:
annotations:
anno-sample2: anno2
Copy to clipboardCopied1.5.18. 調整
3scale をインストールしたら、3scale Operator により、カスタムリソース (CR) からの特定パラメーターセットを更新してシステム設定オプションを変更することができます。変更は ホットスワップ により行われます。つまり、システムの停止やシャットダウンは発生しません。
3scale Operator と APIcast Operator で調整イベントが発生した場合、以下の 2 つのシナリオが考えられます。
-
deploymentconfig
がなく、CR にレプリカがある場合、deploymentconfig
の値はそれらのレプリカと一致します。CR にレプリカが含まれていない場合、deploymentconfig
レプリカ値は1
に設定されます。 -
deploymentconfig
があり、CR にレプリカがある場合、deploymentconfig
の値は、0
であってもそれらのレプリカと一致します。CR にレプリカが含まれていない場合、deploymentconfig
の値は同じままになります。
APIManager CR 定義 (CRD) のすべてのパラメーターが調整可能である訳ではありません。
調整可能なパラメーターのリストを以下に示します。
1.5.18.1. リソース
すべての 3scale コンポーネントに対するリソースの制限およびリクエスト
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
resourceRequirementsEnabled: true/false
Copy to clipboardCopied1.5.18.2. Backend レプリカ
バックエンド コンポーネントの Pod 数
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
backend:
listenerSpec:
replicas: X
workerSpec:
replicas: Y
cronSpec:
replicas: Z
Copy to clipboardCopiedreplica フィールドが設定されていない場合、Operator はレプリカを調整しません。これにより、HorizontalPodAutoscaler コントローラーなどのサードパーティーコントローラーがレプリカを管理できるようになります。また、デプロイメントオブジェクト上で手動で更新することもできます。
1.5.18.3. APIcast レプリカ
APIcast ステージングおよび実稼働環境コンポーネントの Pod 数。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
apicast:
productionSpec:
replicas: X
stagingSpec:
replicas: Z
Copy to clipboardCopiedreplica フィールドが設定されていない場合、Operator はレプリカを調整しません。これにより、HorizontalPodAutoscaler コントローラーなどのサードパーティーコントローラーがレプリカを管理できるようになります。また、デプロイメントオブジェクト上で手動で更新することもできます。
1.5.18.4. System レプリカ
システム アプリケーションおよびシステム sidekiq コンポーネントの Pod 数。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
system:
appSpec:
replicas: X
sidekiqSpec:
replicas: Z
Copy to clipboardCopiedreplica フィールドが設定されていない場合、Operator はレプリカを調整しません。これにより、HorizontalPodAutoscaler コントローラーなどのサードパーティーコントローラーがレプリカを管理できるようになります。また、デプロイメントオブジェクト上で手動で更新することもできます。
1.5.18.5. Zync レプリカ
Zync アプリケーションと que コンポーネントの Pod 数。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
name: example-apimanager
spec:
zync:
appSpec:
replicas: X
queSpec:
replicas: Z
Copy to clipboardCopiedreplica フィールドが設定されていない場合、Operator はレプリカを調整しません。これにより、HorizontalPodAutoscaler コントローラーなどのサードパーティーコントローラーがレプリカを管理できるようになります。また、デプロイメントオブジェクト上で手動で更新することもできます。
1.5.19. APICAST_SERVICE_CACHE_SIZE 環境変数の設定
APIManager カスタムリソース定義 (CRD) にオプションのフィールドを追加することで、APIcast が内部キャッシュに保存するサービスの数を指定できます。
前提条件
-
APIcast
Operator がインストールされているか、インストール中である。
手順
-
spec
の production セクションと staging セクションに、serviceCacheSize
オプションフィールドを追加します。
apicast: productionSpec: serviceCacheSize: 20 stagingSpec: serviceCacheSize: 10
検証
以下のコマンドを入力してデプロイメントを確認します。
$ oc get dc/apicast-staging -o yaml
$ oc get dc/apicast-production -o yaml
環境変数が含まれていることを確認します。
# apicast-staging - name: APICAST_SERVICE_CACHE_SIZE value: '10'
# apicast-production - name: APICAST_SERVICE_CACHE_SIZE value: '20'
APIManager カスタムリソース定義 (CRD) にオプションのフィールドを追加することで、APIcast が内部キャッシュに保存するサービスの数を指定できます。replica フィールドが設定されていない場合、Operator はレプリカを調整しません。これにより、HorizontalPodAutoscaler コントローラーなどのサードパーティーコントローラーがレプリカを管理できるようになります。また、デプロイメントオブジェクト上で手動で更新することもできます。
1.6. Oracle をシステムデータベースとして使用するオペレーターによる 3scale API Management のインストール
Red Hat 3scale API Management 管理者は、Oracle Database を使用する 3scale を Operator によりインストールすることができます。デフォルトでは、3scale 2.14 には設定データを MySQL データベースに保管する system
というコンポーネントが含まれています。このデフォルトのデータベースをオーバーライドし、情報を外部の Oracle Database に保管することができます。
- Operator のみで 3scale のインストールを実行する場合には、Oracle Database は OpenShift Container Platform (OCP) のバージョン 4.2 および 4.3 ではサポートされません。詳細は、Red Hat 3scale API Management のサポートされる構成 を参照してください。
-
このドキュメントでは、レジストリー URL の例として
myregistry.example.com
が使用されています。これは、お使いのレジストリー URL に置き換えてください。 - 免責事項: ここに記載されている外部 Web サイトへのリンクは、お客様の利便性のみを目的として提供されています。Red Hat はリンクの内容を確認しておらず、コンテンツまたは可用性に責任を負わないものとします。外部 Web サイトへのリンクが含まれていても、Red Hat が Web サイトまたはその組織、製品、もしくはサービスを保証することを意味するものではありません。お客様は、外部サイトまたはコンテンツの使用 (または信頼) によって生じる損失または費用について、Red Hat が責任を負わないことに同意するものとします。
前提条件
- 3scale がインストールされる OCP クラスターからアクセスすることのできる、コンテナーイメージをプッシュするためのコンテナーレジストリー
- 以下の手順で作成されるため、APIManager CR をインストールしないでください。
- OpenShift クラスターからアクセスできる Oracle Database のサポート対象バージョン
-
インストール手順のための Oracle Database
SYSTEM
ユーザーへのアクセス。
システムデータベースに Oracle を使用する 3scale を Operator によりインストールするには、以下の手順を使用します。
1.6.1. Oracle Database の準備
3scale 管理者は、システムコンポーネントに Oracle Database を使用することを決定した場合、3scale インストール用に Oracle Database を完全に準備する必要があります。
手順
- 新しいデータベースを作成します。
次の設定を適用します。
Copy to clipboardCopiedALTER SYSTEM SET max_string_size=extended SCOPE=SPFILE;
データベースユーザーを設定します。
3scale で Oracle Database インテグレーションをセットアップするには、Oracle
SYSTEM
ユーザーパスワードを指定する場合と指定しない場合の 2 つのオプションがあります。3scale は、通常のユーザーを作成し、それに必要な権限を付与する初期セットアップでのみ
SYSTEM
ユーザーを使用します。次の SQL コマンドは、適切な権限を持つ通常のユーザーをセットアップします。({DB_USER}
と{DB_PASSWORD}
は、実際の値に置き換える必要があるプレースホルダーです)。
Copy to clipboardCopiedCREATE USER {DB_USER} IDENTIFIED BY {DB_PASSWORD}; GRANT unlimited tablespace TO {DB_USER}; GRANT create session TO {DB_USER}; GRANT create table TO {DB_USER}; GRANT create view TO {DB_USER}; GRANT create sequence TO {DB_USER}; GRANT create trigger TO {DB_USER}; GRANT create procedure TO {DB_USER};
SYSTEM
ユーザーの使用:-
system-database
シークレットのORACLE_SYSTEM_PASSWORD
フィールドにSYSTEM
ユーザーのパスワードを指定します。 - インストール前に通常のユーザーが存在する必要はありません。これは 3scale 初期化スクリプトによって作成されます。
-
system-database
シークレットのURL
フィールドの接続文字列 (例:oracle-enhanced://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}
) に、通常のユーザー用の必要なユーザー名とパスワードを入力します。 -
通常の Oracle Database 非システムユーザーのパスワードは一意である必要があり、
SYSTEM
ユーザーのパスワードとは一致しないようにする必要があります。 指定されたユーザー名を持つユーザーがすでに存在する場合、3scale 初期化スクリプトは次のコマンドを使用して、パスワードの更新を試みます。
Copy to clipboardCopiedALTER USER {DB_USER} IDENTIFIED BY {DB_PASSWORD}
パラメーター
PASSWORD_REUSE_TIME
およびPASSWORD_REUSE_MAX
が同じパスワードの再利用を制限するように設定されている場合、データベース設定によっては、このコマンドが正常に完了しない場合があります。
-
通常のデータベースユーザーの手動セットアップ:
-
system-database
シークレットにORACLE_SYSTEM_PASSWORD
を指定する必要はありません。 -
system-database
シークレットのURL
フィールドの接続文字列で指定された通常のデータベースユーザー (SYSTEM
以外) は、3scale のインストール前に存在している必要があります。 - インストールに使用する通常のユーザーは、上記のすべての権限を持っている必要があります。
-
関連情報
- 新しいデータベースの作成は、Oracle Database 19c ドキュメントを参照してください。
1.6.2. カスタムシステムコンテナーイメージの作成
手順
GitHub リポジトリーから 3scale OpenShift テンプレートをダウンロードし、アーカイブをデプロイメントします。
Copy to clipboardCopiedtar -xzf 3scale-2.14.0-GA.tar.gz
Instant Client Downloads ページから、以下をダウンロードします。
- クライアント: basic-lite または basic のいずれか
- ODBC ドライバー
Oracle Database 19c の SDK
- 3scale の場合は、Instant Client Downloads for Linux x86-64(64-bit) を使用します。
- ppc64le および 3scale の場合は、Power Little Endian (64 ビット) 上の Linux の Oracle Instant Client Downloads for Linux を使用します。
次の Oracle ソフトウェアコンポーネントのバージョンについては、表を確認してください。
- Oracle Instant Client パッケージ: Basic または Basic Light
- Oracle Instant Client パッケージ: SDK
Oracle Instant Client パッケージ: ODBC
表1.6 3scale 向けの Oracle 19c パッケージの例 Oracle 19c パッケージ名 圧縮ファイル名 Basic
instantclient-basic-linux.x64-19.8.0.0.0dbru.zip
Basic Light
instantclient-basiclite-linux.x64-19.8.0.0.0dbru.zip
SDK
instantclient-sdk-linux.x64-19.8.0.0.0dbru.zip
ODBC
instantclient-odbc-linux.x64-19.8.0.0.0dbru.zip
表1.7 ppc64le および 3scale 用 Oracle 19c パッケージの例 Oracle 19c パッケージ名 圧縮ファイル名 Basic
instantclient-basic-linux.leppc64.c64-19.3.0.0.0dbru.zip
Basic Light
instantclient-basiclite-linux.leppc64.c64-19.3.0.0.0dbru.zip
SDK
instantclient-sdk-linux.leppc64.c64-19.3.0.0.0dbru.zip
ODBC
instantclient-odbc-linux.leppc64.c64-19.3.0.0.0dbru.zip
注記ローカルにダウンロードされて保存されたクライアントパッケージバージョンが、3scale が想定するバージョンと一致しない場合には、以下の手順で 3scale は適切なバージョンを自動的にダウンロードして使用します。
-
Oracle Database Instant Client Package ファイルを
system-oracle-3scale-2.13.0-GA/oracle-client-files
ディレクトリーに配置します。 システムの Oracle ベースのカスタムイメージをビルドします。以下の例に示すように、固定のイメージタグを設定する必要があります。
$ docker build . --tag myregistry.example.com/system-oracle:2.14.0-1
システムの Oracle ベースのイメージを、OCP クラスターからアクセス可能なコンテナーレジストリーにプッシュします。このコンテナーレジストリーに、この後 3scale ソリューションがインストールされます。
$ docker push myregistry.example.com/system-oracle:2.14.0-1
1.6.3. Operator を使用した Oracle での 3scale API Management のインストール
手順
-
該当するフィールドを使用して
system-database
シークレットを作成し、Oracle Database URL の接続文字列および Oracle Database のシステムパスワードを設定します。Oracle Database については、外部データベースモードでのインストール を参照してください。 APIManager CR を作成して、3scale ソリューションをインストールします。Operator を使用した 3scale API Management のデプロイ の手順に従います。
APIManager CR は、以前にビルドしたシステムの Oracle ベースのイメージに設定された
.spec.system.image
フィールドを指定する必要があります。apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: example-apimanager spec: imagePullSecrets: - name: threescale-registry-auth - name: custom-registry-auth system: image: "myregistry.example.com/system-oracle:2.14.0-1" externalComponents: system: database: true
1.7. 3scale API Management のインストールに関する一般的な問題のトラブルシューティング
このセクションでは、典型的なインストールの問題と、その問題を解決するためのアドバイスを説明します。
1.7.1. 以前のデプロイメントがダーティーな永続ボリューム要求を残す
問題
以前のデプロイメントがダーティーな永続ボリューム要求 (PVC) を残そうとするため、MySQL コンテナーの起動に失敗する。
原因
OpenShift のプロジェクトを削除しても、それに関連する PVC は消去されない。
解決方法
手順
oc get pvc
コマンドを使用してエラーのある MySQL データが含まれる PVC を探します。
Copy to clipboardCopied# oc get pvc NAME STATUS VOLUME CAPACITY ACCESSMODES AGE backend-redis-storage Bound vol003 100Gi RWO,RWX 4d mysql-storage Bound vol006 100Gi RWO,RWX 4d system-redis-storage Bound vol008 100Gi RWO,RWX 4d system-storage Bound vol004 100Gi RWO,RWX 4d
-
OpenShift Container Platform (OCP) コンソールの cancel deployment をクリックして、
system-mysql
Pod のデプロイメントを停止します。 - MySQL パス以下にあるものすべてを削除し、ボリュームをクリーンアップします。
-
新たに
system-mysql
のデプロイメントを開始します。
1.7.2. 誤って Docker レジストリーからプルされる
問題
インストール中に以下のエラーが発生する。
svc/system-redis - 1EX.AMP.LE.IP:6379
dc/system-redis deploys docker.io/rhscl/redis-32-rhel7:3.2-5.3
deployment #1 failed 13 minutes ago: config change
Copy to clipboardCopied原因
OpenShift は docker
コマンドを実行し、コンテナーイメージを検索およびプルします。このコマンドは、registry.redhat.io
Red Hat Ecosystem Catalog ではなく、docker.io
Docker レジストリーを参照します。
これは、システムに予期せぬバージョンの Docker コンテナー環境が含まれる場合に発生します。
解決方法
手順
適切なバージョン の Docker コンテナー環境を使用します。
1.7.3. 永続ボリュームがローカルでマウントされている場合の MySQL の権限の問題
問題
system-msql Pod がクラッシュし、デプロイされないため、それに依存する他のシステムのデプロイメントに失敗する。Pod ログに以下のエラーが記録される。
[ERROR] Cannot start server : on unix socket: Permission denied
[ERROR] Do you already have another mysqld server running on socket: /var/lib/mysql/mysql.sock ?
[ERROR] Aborting
Copy to clipboardCopied原因
MySQL プロセスが不適切なユーザー権限で起動されている。
解決方法
手順
永続ボリュームに使用されるディレクトリーには、root グループの書き込み権限が必要です。MySQL サービスは root グループの別のユーザーとして実行されるため、root ユーザーの読み取り/書き込み権限では不十分です。root ユーザーとして以下のコマンドを実行します。
$ chmod -R g+w /path/for/pvs
以下のコマンドを実行して、SELinux がアクセスをブロックしないようにします。
$ chcon -Rt svirt_sandbox_file_t /path/for/pvs
1.7.4. ロゴまたはイメージをアップロードできない
問題
ロゴをアップロードできず、system-app
ログに以下のエラーが表示される。
Errno::EACCES (Permission denied @ dir_s_mkdir - /opt/system/public//system/provider-name/2
原因
OpenShift が永続ボリュームに書き込みを行うことができない。
解決方法
手順
OpenShift が永続ボリュームに書き込みを行えるようにします。永続ボリュームのグループ所有者を root グループにし、またグループによる書き込みを可能にしなければなりません。
1.7.5. OpenShift でテストコールが動作しない
問題
OpenShift で新しいサービスとルートを作成した後に、テストコールが動作しない。curl 経由のダイレクトコールも失敗し、service not available
が出力される。
原因
3scale はデフォルトで HTTPS ルートが必要で、OpenShift ルートはセキュアではない。
解決方法
手順
OpenShift のルーター設定で secure route チェックボックスが選択されていることを確認します。
1.7.6. 3scale API Management とは別のプロジェクトでの APIcast のデプロイに失敗する
問題
APIcast のデプロイに失敗する (Pod が青にならない)。以下のエラーがログに表示される。
update acceptor rejected apicast-3: pods for deployment "apicast-3" took longer than 600 seconds to become ready
以下のエラーが Pod に表示される。
Error synching pod, skipping: failed to "StartContainer" for "apicast" with RunContainerError: "GenerateRunContainerOptions: secrets \"apicast-configuration-url-secret\" not found"
原因
シークレットが適切に設定されていない。
解決方法
手順
APIcast v3 でシークレットを作成する時に apicast-configuration-url-secret
を指定します。
$ oc create secret generic apicast-configuration-url-secret --from-literal=password=https://<ACCESS_TOKEN>@<TENANT_NAME>-admin.<WILDCARD_DOMAIN>
1.8. 関連情報
第2章 APIcast のインストール
APIcast は、内部および外部の API サービスを Red Hat 3scale API Management Platform と統合するのに使用される NGINX ベースの API ゲートウェイです。APIcast は、ラウンドロビン形式で負荷分散を行います。
この章では、デプロイメントオプション、提供される環境、および使用を開始する方法を説明します。
前提条件
APIcast がスタンドアロンの API ゲートウェイではない。また、3scale API Manager への接続が必要である。
- 稼働中の オンプレミス型 3scale インスタンス
APIcast をインストールするには、以下のセクションに概略を示す手順を実施します。
2.1. APIcast デプロイメントのオプション
Hosted APIcast (ホスト型 APIcast) または Self-managed APIcast (自己管理型 APIcast) を使用できます。どちらの場合にも、APIcast は残りの 3scale API Management プラットフォームに接続している必要があります。
- Embedded APIcast: 3scale API Management インストールには、ステージングと実稼働の 2 つのデフォルト APIcast ゲートウェイが含まれています。これらのゲートウェイは事前設定された状態で提供され、すぐに使用できます。
Self-managed APIcast (自己管理型 APIcast): APIcast をどこにでもデプロイすることができます。APIcast をデプロイするための推奨オプションの 1 つを次に示します。
- Red Hat OpenShift 上で APIcast を実行する: APIcast を サポート対象バージョン の OpenShift で実行します。Self-managed APIcast は、オンプレミス型 3scale インストール環境またはホスト型 3scale (SaaS) アカウントに接続できます。このために、operator を使用して APIcast ゲートウェイのセルフマネージドソリューションをデプロイ します。
2.2. APIcast の環境
デフォルトでは、3scale アカウントを作成すると、2 つの異なる環境の Embedded APIcast が提供されます。
- ステージング: API インテグレーションの設定中またはテスト中にのみ使用することが目的です。設定が想定どおりに動作していることが確認されたら、実稼働環境にデプロイすることができます。
-
実稼働: 実稼働向けの環境です。
APICAST_CONFIGURATION_LOADER: boot
およびAPICAST_CONFIGURATION_CACHE: 300
パラメーターは、OpenShift テンプレートの実稼働 APIcast のために設定されています。そのため、APIcast の開始時に設定が完全に読み込まれ、300 秒 (5 分) 間キャッシュに保存されます。設定は 5 分後に再読み込みされます。これにより、設定を実稼働環境にプロモートすると、APIcast の新しいデプロイメントを実行しない限り、設定の適用に 5 分程度かかる場合があります。
2.3. インテグレーション設定
3scale 管理者は、3scale を実行する必要のある環境のインテグレーション設定を行います。
前提条件
管理者権限が設定された 3scale アカウント
手順
- [Your_product_name] > Integration > Settings の順に移動します。
Deployment セクションでは、デフォルトのオプションは以下のとおりです。
- Deployment Option: APIcast 3scale managed
- 認証モード: API キー
- 希望するオプションに変更します。
- 変更を保存するには、Update Product をクリックします。
2.4. 製品の設定
Private Base URL フィールドに API バックエンドのエンドポイントホストを指定して、API バックエンドを宣言する必要があります。すべての認証、承認、流量制御、および統計が処理された後、APIcast はすべてのトラフィックを API バックエンドにリダイレクトします。
このセクションでは、製品の設定について各手順を説明します。
2.4.1. API バックエンドの宣言
通常、API のプライベートベース URL は、管理するドメイン (yourdomain.com
) 上で https://api-backend.yourdomain.com:443
のようになります。たとえば、Twitter API と統合する場合、プライベートベース URL は https://api.twitter.com/
になります。
この例では、3scale がホストする Echo API を使用します。これは、任意のパスを受け入れ、リクエストに関する情報 (パス、リクエストパラメーター、ヘッダーなど) を返すシンプルな API です。このプライベートベース URL は https://echo-api.3scale.net:443
になります。
手順
プライベート (アンマネージド) API が動作することをテストします。たとえば、Echo API の場合には
curl
コマンドを使用して以下の呼び出しを行うことができます。$ curl "https://echo-api.3scale.net:443"
以下のレスポンスが返されます。
{ "method": "GET", "path": "/", "args": "", "body": "", "headers": { "HTTP_VERSION": "HTTP/1.1", "HTTP_HOST": "echo-api.3scale.net", "HTTP_ACCEPT": "*/*", "HTTP_USER_AGENT": "curl/7.51.0", "HTTP_X_FORWARDED_FOR": "2.139.235.79, 10.0.103.58", "HTTP_X_FORWARDED_HOST": "echo-api.3scale.net", "HTTP_X_FORWARDED_PORT": "443", "HTTP_X_FORWARDED_PROTO": "https", "HTTP_FORWARDED": "for=10.0.103.58;host=echo-api.3scale.net;proto=https" }, "uuid": "ee626b70-e928-4cb1-a1a4-348b8e361733" }
2.4.2. 認証の設定
API の認証設定は [Your_product_name] > Integration > Settings の AUTHENTICATION セクションで行うことができます。
フィールド | 説明 |
---|---|
Auth user key | Credentials location に関連付けられたキーを設定します。 |
Credentials location | クレデンシャルが HTTP ヘッダー、クエリーパラメーター、または HTTP Basic 認証として渡されるかどうかを定義します。 |
Host Header | カスタムの Host リクエストヘッダーを定義します。これは、API バックエンドが特定のホストからのトラフィックのみを許可する場合に必要です。 |
Secret Token | API バックエンドに直接送られる開発者リクエストをブロックするために使用します。ここにヘッダーの値を設定し、バックエンドがこのシークレットヘッダーを持つ呼び出しのみを許可するようにします。 |
さらに [Your_product_name] > Integration > Settings の順に移動し、GATEWAY RESPONSE エラーコードを設定できます。エラー発生時 (認証失敗、認証パラメーターがない、および一致するルールがない) のResponse Code、Content-type、およびResponse Bodyを定義します。
レスポンスコード | レスポンスのボディー |
---|---|
403 | Authentication failed |
403 | Authentication parameters missing |
404 | No Mapping Rule matched |
429 | Usage limit exceeded |
2.4.3. API テストコールの設定
API の設定では、リクエストコールを元にテストを行うために、プロダクトを含めたバックエンドのテストを行い、APIcast の設定をステージング環境および実稼働環境にプロモートする必要があります。
それぞれのプロダクトについて、リクエストはパスに従って対応するバックエンドにリダイレクトされます。このパスは、バックエンドをプロダクトに追加する際に設定されます。たとえば、プロダクトに 2 つのバックエンドを追加している場合、それぞれのバックエンドは固有のパスを持ちます。
前提条件
- プロダクトに追加された 1 つまたは複数の バックエンド
- プロダクトに追加された各バックエンドの マッピングルール
- アクセスポリシーを定義するための アプリケーションプラン
- アプリケーションプランを参照する アプリケーション
手順
- [Your_product_name] > Integration > Configuration の順に移動して、APIcast 設定をステージング環境にプロモートします。
APIcast Configuration セクションに、プロダクトに追加された各バックエンドのマッピングルールが表示されます。Promote v.[n] to Staging APIcast をクリックします。
- v.[n] は、プロモート先のバージョン番号を表します。
ステージング環境にプロモートしたら、実稼働環境にプロモートすることができます。Staging APIcast セクションで、Promote v.[n] to Production APIcast をクリックします。
- v.[n] は、プロモート先のバージョン番号を表します。
コマンドラインで API へのリクエストをテストするには、Example curl for testing で提供されるコマンドを使用します。
- curl コマンドの例は、プロダクトの最初のマッピングルールに基づいています。
API へのリクエストをテストする際に、メソッドおよびメトリックを追加して マッピングルールを変更することができます。
設定を変更したら、API への呼び出しを行う前に、必ずステージング環境および実稼働環境にプロモートするようにしてください。ステージング環境にプロモートする保留中の変更がある場合には、管理ポータルの Integration メニュー項目の横に感嘆符が表示されます。
3scale Hosted APIcast ゲートウェイはクレデンシャルを検証し、API のアプリケーションプランで定義した流量制御を適用します。クレデンシャルがない、あるいは無効なクレデンシャルで呼び出しを行うと、エラーメッセージAuthentication failed
が表示されます。
2.4.4. Podman への APIcast のデプロイ
ここでは、Pod Manager (Podman) コンテナー環境に Red Hat 3scale API Management API ゲートウェイとして使用される APIcast をデプロイする方法を、手順を追って説明します。
Podman コンテナー環境に APIcast をデプロイする場合、サポートされる Red Hat Enterprise Linux (RHEL) および Podman のバージョンは以下のとおりです。
- RHEL 8.x/9.x
- Podman 4.2.0/4.1.1
前提条件
- APIcast のインストール に従って、3scale 管理ポータルで APIcast を設定する必要があります。
Podman コンテナー環境に APIcast をデプロイするには、以下のセクションに概略を示す手順を実施します。
2.4.4.1. Podman コンテナー環境のインストール
このセクションでは、RHEL 8 に Podman コンテナー環境を設定する手順を説明します。Docker は RHEL 8 に含まれていないため、コンテナーの操作には Podman を使用します。
Podman と RHEL 8 の使用については、コンテナーのコマンドに関するリファレンスドキュメント を参照してください。
手順
Podman コンテナー環境パッケージをインストールします。
$ sudo dnf install podman
関連情報
他のオペレーティングシステムをお使いの場合は、以下の Podman のドキュメントを参照してください。
2.4.4.2. Podman 環境の実行
Podman コンテナー環境を実行するには、以下の手順に従います。
手順
Red Hat レジストリーから、そのまま使用できる Podman コンテナーのイメージをダウンロードします。
$ podman pull registry.redhat.io/3scale-amp2/apicast-gateway-rhel8:3scale2.14
Podman で APIcast を実行します。
$ podman run --name apicast --rm -p 8080:8080 -e THREESCALE_PORTAL_ENDPOINT=https://<access_token>@<domain>-admin.3scale.net registry.redhat.io/3scale-amp2/apicast-gateway-rhel8:3scale2.14
ここで、
<access_token>
は 3scale Account Management API のアクセストークンに置き換えます。アクセストークンの代わりにプロバイダーキーを使用することもできます。<domain>-admin.3scale.net
は 3scale 管理ポータルの URL です。
このコマンドは、"apicast"という Podman コンテナーエンジンをポート 8080
で実行し、3scale 管理ポータルから JSON 設定ファイルを取得します。その他の設定オプションについては、APIcast のインストール を参照してください。
2.4.4.2.1. Podman による APIcast のテスト
以下の手順は、Podman コンテナーエンジンが独自の設定ファイルと、3scale レジストリーからの Podman コンテナーイメージで実行されるようにします。呼び出しは APIcast を介してポート 8080
でテストでき、3scale アカウントから取得できる正しい認証クレデンシャルを提供できます。
テストコールは、APIcast が適切に実行されていることを確認するだけでなく、認証とレポートが正常に処理されたことも確認します。
呼び出しに使用するホストが Integration ページの Public Base URL フィールドに設定されたホストと同じであるようにしてください。
2.4.4.3. podman
コマンドのオプション
podman
コマンドでは、以下に例を示すオプションを使用することができます。
-
-d
: デタッチモード でコンテナーを実行し、コンテナー ID を出力します。このオプションを指定しないと、コンテナーはフォアグラウンドモードで実行され、CTRL+c
を使用して停止することができます。デタッチモードで起動された場合、podman attach
コマンド (例:podman attach apicast
) を使用するとコンテナーに再アタッチすることができます。 -
ps
および-a
: Podmanps
を使用して、作成中および実行中のコンテナーをリスト表示します。ps
コマンドに-a
を追加すると (例:podman ps -a
)、すべてのコンテナー (実行中および停止中の両方) が表示されます。 -
inspect
および-l
: 実行中のコンテナーを調べます。たとえば、inspect
を使用して、コンテナーに割り当てられた ID を表示します。-l
を使用すると、最新のコンテナーの詳細を取得できます (たとえばpodman inspect -l | grep Id\":
)。
2.4.4.4. 関連情報
2.5. Operator を使用した Self-managed APIcast ゲートウェイソリューションのデプロイ
このセクションでは、Openshift Container Platform コンソールから APIcast Operator を使用して Self-managed APIcast ゲートウェイソリューションをデプロイする手順を説明します。
デフォルト設定は、APIcast をデプロイするときの実稼働環境用です。これらの設定は、ステージング環境をデプロイするためにいつでも調整できます。たとえば、次の oc
コマンドを使用します。
$ oc patch apicast/{apicast_name} --type=merge -p '{"spec":{"deploymentEnvironment":"staging","configurationLoadMode":"lazy"}}'
詳細は、APIcast カスタムリソース リファレンスを参照してください。
前提条件
- OpenShift Container Platform (OCP) 4 以降およびその管理者権限
- OpenShift への APIcast Operator のインストール の手順に従っている。
手順
- 管理者権限を持つアカウントを使用して OCP コンソールにログインします。
- Operators > Installed Operators の順にクリックします。
- Installed Operators のリストで APIcast Operator をクリックします。
- APIcast > Create APIcast の順にクリックします。
2.5.1. APIcast のデプロイメントおよび設定オプション
Self-managed APIcast ゲートウェイソリューションは、以下に示す 2 通りの方法を使用してデプロイおよび設定できます。
以下も参照してください。
2.5.1.1. 3scale API Management システムエンドポイントの提供
手順
3scale システム管理ポータルのエンドポイント情報が含まれる OpenShift シークレットを作成します。
Copy to clipboardCopied$ oc create secret generic ${SOME_SECRET_NAME} --from-literal=AdminPortalURL=${MY_3SCALE_URL}
-
${SOME_SECRET_NAME}
はシークレットの名前で、既存のシークレットと競合しない限り、任意の名前を付けることができます。 ${MY_3SCALE_URL}
は、3scale アクセストークンおよび 3scale システム管理ポータルのエンドポイントが含まれる URI です。詳細は、THREESCALE_PORTAL_ENDPOINT
を参照してください。例
Copy to clipboardCopied$ oc create secret generic 3scaleportal --from-literal=AdminPortalURL=https://access-token@account-admin.3scale.net
シークレットの内容の詳細は、Admin portal configuration secret リファレンスを参照してください。
-
APIcast の OpenShift オブジェクトを作成します。
Copy to clipboardCopiedapiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: example-apicast spec: adminPortalCredentialsRef: name: SOME_SECRET_NAME
spec.adminPortalCredentialsRef.name
は、3scale システム管理ポータルのエンドポイント情報が含まれる既存の OpenShift シークレットの名前でなければなりません。APIcast オブジェクトに関連付けられた OpenShift デプロイメントの
readyReplicas
フィールドが 1 であることを確認し、APIcast Pod が動作状態にあり準備が整っていることを確認します。そうでなければ、以下のコマンドを使用してフィールドが設定されるまで待ちます。
Copy to clipboardCopied$ echo $(oc get deployment apicast-example-apicast -o jsonpath='{.status.readyReplicas}') 1
2.5.1.1.1. APIcast ゲートウェイが動作中で利用可能であることの確認
手順
ローカルマシンから OpenShift Service APIcast にアクセス可能であることを確認し、テストリクエストを実行します。そのために、APIcast OpenShift Service を
localhost:8080
にポート転送します。
Copy to clipboardCopied$ oc port-forward svc/apicast-example-apicast 8080
設定済みの 3scale サービスにリクエストを送信して、HTTP レスポンスが成功したことを確認します。サービスの
Staging Public Base URL
またはProduction Public Base URL
設定で指定したドメイン名を使用します。以下に例を示します。
Copy to clipboardCopied$ curl 127.0.0.1:8080/test -H "Host: localhost" { "method": "GET", "path": "/test", "args": "", "body": "", "headers": { "HTTP_VERSION": "HTTP/1.1", "HTTP_HOST": "echo-api.3scale.net", "HTTP_ACCEPT": "*/*", "HTTP_USER_AGENT": "curl/7.65.3", "HTTP_X_REAL_IP": "127.0.0.1", "HTTP_X_FORWARDED_FOR": ... "HTTP_X_FORWARDED_HOST": "echo-api.3scale.net", "HTTP_X_FORWARDED_PORT": "80", "HTTP_X_FORWARDED_PROTO": "http", "HTTP_FORWARDED": "for=10.0.101.216;host=echo-api.3scale.net;proto=http" }, "uuid": "603ba118-8f2e-4991-98c0-a9edd061f0f0"
2.5.1.1.2. Kubernetes Ingress 経由での APIcast の外部公開
Kubernetes Ingress 経由で APIcast を外部に公開するには、exposedHost
セクションを設定します。exposedHost
セクションの host
フィールドを設定すると、Kubernetes Ingress オブジェクトが作成されます。事前にインストールした既存の Kubernetes Ingress Controller はこの Kubernetes Ingress オブジェクトを使用し、APIcast を外部からアクセス可能にします。
APIcast を外部からアクセス可能にするのに使用できる Ingress Controllers およびその設定方法の詳細は、Kubernetes Ingress Controllers のドキュメント を参照してください。
ホスト名 myhostname.com
で APIcast を公開する例を以下に示します。
apiVersion: apps.3scale.net/v1alpha1
kind: APIcast
metadata:
name: example-apicast
spec:
...
exposedHost:
host: "myhostname.com"
...
Copy to clipboardCopiedこの例では、HTTP 用ポート 80 に Kubernetes Ingress オブジェクトを作成します。APIcast デプロイメントが OpenShift 環境にある場合、OpenShift のデフォルト Ingress Controller は APIcast が作成する Ingress オブジェクト使用して Route オブジェクトを作成し、APIcast インストールへの外部アクセスが可能になります。
exposedHost
セクションに TLS を設定することもできます。利用可能なフィールドの詳細を以下の表に示します。
json/yaml フィールド | タイプ | 必須 | デフォルト値 | 説明 |
---|---|---|---|---|
| string | はい | 該当なし | ゲートウェイにルーティングされているドメイン名 |
| []networkv1.IngressTLS | いいえ | 該当なし | 受信 TLS オブジェクトの配列。詳細は、TLS を参照してください。 |
2.5.1.2. 設定シークレットの指定
手順
設定ファイルを使用してシークレットを作成します。
Copy to clipboardCopied$ curl https://raw.githubusercontent.com/3scale/APIcast/master/examples/configuration/echo.json -o $PWD/config.json $ oc create secret generic apicast-echo-api-conf-secret --from-file=$PWD/config.json
設定ファイルは
config.json
という名前にする必要があります。これは APIcast CRD の要件です。シークレットの内容の詳細は、Admin portal configuration secret リファレンスを参照してください。
APIcast カスタムリソース を作成します。
Copy to clipboardCopied$ cat my-echo-apicast.yaml apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: my-echo-apicast spec: exposedHost: host: YOUR DOMAIN embeddedConfigurationSecretRef: name: apicast-echo-api-conf-secret $ oc apply -f my-echo-apicast.yaml
埋め込み設定シークレットの例を以下に示します。
Copy to clipboardCopiedapiVersion: v1 kind: Secret metadata: name: SOME_SECRET_NAME type: Opaque stringData: config.json: | { "services": [ { "proxy": { "policy_chain": [ { "name": "apicast.policy.upstream", "configuration": { "rules": [{ "regex": "/", "url": "http://echo-api.3scale.net" }] } } ] } } ] }
APIcast オブジェクトの作成時に以下の内容を設定します。
Copy to clipboardCopiedapiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: example-apicast spec: embeddedConfigurationSecretRef: name: SOME_SECRET_NAME
spec.embeddedConfigurationSecretRef.name
は、ゲートウェイの設定が含まれる既存の OpenShift シークレットの名前でなければなりません。APIcast オブジェクトに関連付けられた OpenShift デプロイメントの
readyReplicas
フィールドが 1 であることを確認し、APIcast Pod が動作状態にあり準備が整っていることを確認します。そうでなければ、以下のコマンドを使用してフィールドが設定されるまで待ちます。
Copy to clipboardCopied$ echo $(oc get deployment apicast-example-apicast -o jsonpath='{.status.readyReplicas}') 1
2.5.1.2.1. APIcast ゲートウェイが動作中で利用可能であることの確認
手順
ローカルマシンから OpenShift Service APIcast にアクセス可能であることを確認し、テストリクエストを実行します。そのために、APIcast OpenShift Service を
localhost:8080
にポート転送します。
Copy to clipboardCopied$ oc port-forward svc/apicast-example-apicast 8080
2.5.1.3. APIcast Operator を使用したカスタム環境の注入
Self-managed APIcast を使用する 3scale インストールでは、3scale
Operator を使用してカスタム環境を注入できます。カスタム環境は、ゲートウェイが提供するすべてのアップストリーム API に APIcast が適用する動作を定義します。カスタム環境を作成するには、Lua コードでグローバル設定を定義します。
APIcast のインストールの一部として、またはインストール後にカスタム環境を注入できます。カスタム環境を注入した後、その環境を削除すると、APIcast
Operator が変更を調整します。
前提条件
- APIcast Operator がインストールされている。
手順
注入するカスタム環境を定義する Lua コードを記述します。たとえば、次の
env1.lua
ファイルは、APIcast
Operator がすべてのサービスに対してロードするカスタムログポリシーを示しています。
Copy to clipboardCopiedlocal cjson = require('cjson') local PolicyChain = require('apicast.policy_chain') local policy_chain = context.policy_chain local logging_policy_config = cjson.decode([[ { "enable_access_logs": false, "custom_logging": "\"{{request}}\" to service {{service.id}} and {{service.name}}" } ]]) policy_chain:insert( PolicyChain.load_policy('logging', 'builtin', logging_policy_config), 1) return { policy_chain = policy_chain, port = { metrics = 9421 }, }
カスタム環境を定義する Lua ファイルからシークレットを作成します。以下に例を示します。
Copy to clipboardCopied$ oc create secret generic custom-env-1 --from-file=./env1.lua
シークレットには複数のカスタム環境を含めることができます。カスタム環境を定義する各ファイルの
-from-file
オプションを指定します。Operator は各カスタム環境をロードします。作成したシークレットを参照する
APIcast
カスタムリソースを定義します。以下の例は、カスタム環境を定義するシークレットの参照に関連するコンテンツのみを示しています。
Copy to clipboardCopiedapiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: apicast1 spec: customEnvironments: - secretRef: name: custom-env-1
APIcast
カスタムリソースは、カスタム環境を定義する複数のシークレットを参照できます。Operator は各カスタム環境をロードします。カスタム環境を追加する
APIcast
カスタムリソースを作成します。たとえば、APIcast
カスタムリソースをapicast.yaml
ファイルに保存した場合は、以下のコマンドを実行します。
Copy to clipboardCopied$ oc apply -f apicast.yaml
次のステップ
カスタム環境を更新する場合は、シークレットに更新が含まれるように、必ずそのシークレットを再作成します。APIcast
Operator は更新の有無を監視し、更新を発見すると自動的に再デプロイします。
2.5.1.4. APIcast Operator を使用したカスタムポリシーの注入
Self-managed APIcast を使用する 3scale インストールでは、APIcast
Operator を使用してカスタムポリシーを注入できます。カスタムポリシーを注入すると、ポリシーコードが APIcast に追加されます。次に、以下のいずれかを使用して、カスタムポリシーを API 製品のポリシーチェーンに追加できます。
- 3scale API
-
Product
カスタムリソース
3scale 管理ポータルを使用してカスタムポリシーを製品のポリシーチェーンに追加するには、カスタムポリシーのスキーマを CustomPolicyDefinition
カスタムリソースに登録する必要もあります。カスタムポリシー登録は、管理ポータルを使用して製品のポリシーチェーンを設定する場合にのみ必要です。
APIcast のインストールの一部として、またはインストール後にカスタムポリシーを注入できます。カスタムポリシーを注入した後、それを削除すると、APIcast
Operator が変更を調整します。
前提条件
- APIcast Operator がインストールされているか、インストール中である。
-
Write your own policy で説明されているように、カスタムポリシーを定義している。つまり、たとえば、カスタムポリシーを定義する
my-first-custom-policy.lua
、apicast-policy.json
、およびinit.lua
ファイルをすでに作成している。
手順
1 つのカスタムポリシーを定義するファイルからシークレットを作成します。以下に例を示します。
Copy to clipboardCopied$ oc create secret generic my-first-custom-policy-secret \ --from-file=./apicast-policy.json \ --from-file=./init.lua \ --from-file=./my-first-custom-policy.lua
複数のカスタムポリシーがある場合は、カスタムポリシーごとにシークレットを作成します。シークレットには、カスタムポリシーを 1 つだけ含めることができます。
作成したシークレットを参照する
APIcast
カスタムリソースを定義します。以下の例は、カスタムポリシーを定義するシークレットの参照に関連するコンテンツのみを示しています。
Copy to clipboardCopiedapiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: apicast1 spec: customPolicies: - name: my-first-custom-policy version: "0.1" secretRef: name: my-first-custom-policy-secret
APIcast
カスタムリソースは、カスタムポリシーを定義する複数のシークレットを参照できます。Operator は各カスタムポリシーをロードします。カスタムポリシーを追加する
APIcast
カスタムリソースを作成します。たとえば、APIcast
カスタムリソースをapicast.yaml
ファイルに保存した場合は、以下のコマンドを実行します。
Copy to clipboardCopied$ oc apply -f apicast.yaml
次のステップ
カスタムポリシーを更新する場合は、シークレットに更新が含まれるように、必ずそのシークレットを再作成します。APIcast
Operator は更新の有無を監視し、更新を発見すると自動的に再デプロイします。
2.5.1.5. APIcast Operator を使用した OpenTracing の設定
Self-managed APIcast を使用する 3scale のインストールでは、APIcast
Operator を使用して OpenTracing を設定できます。OpenTracing を有効にすると、APIcast インスタンスに関してより多くの洞察を得て、可観測性を向上できます。
前提条件
- APIcast Operator がインストールされているか、インストール中である。
手順
stringData.config
に OpenTracing 設定の詳細を含めて、シークレットを定義します。これは、OpenTracing 設定の詳細が含まれる属性の唯一有効な値です。その他の仕様では、APIcast が OpenTracing 設定の詳細を受け取れないようにします。以下の例は、有効なシークレット定義を示しています。
Copy to clipboardCopiedapiVersion: v1 kind: Secret metadata: name: myjaeger stringData: config: |- { "service_name": "apicast", "disabled": false, "sampler": { "type": "const", "param": 1 }, "reporter": { "queueSize": 100, "bufferFlushInterval": 10, "logSpans": false, "localAgentHostPort": "jaeger-all-in-one-inmemory-agent:6831" }, "headers": { "jaegerDebugHeader": "debug-id", "jaegerBaggageHeader": "baggage", "TraceContextHeaderName": "uber-trace-id", "traceBaggageHeaderPrefix": "testctx-" }, "baggage_restrictions": { "denyBaggageOnInitializationFailure": false, "hostPort": "127.0.0.1:5778", "refreshInterval": 60 } } type: Opaque
シークレットを作成します。たとえば、以前のシークレット定義を
myjaeger.yaml
ファイルに保存した場合は、以下のコマンドを実行します。
Copy to clipboardCopied$ oc create -f myjaeger.yaml
OpenTracing
属性を指定するAPIcast
カスタムリソースを定義します。CR 定義で、spec.tracingConfigSecretRef.name
属性を OpenTracing 設定の詳細が含まれるシークレットの名前に設定します。以下の例は、OpenTracing の設定に関するコンテンツのみを示しています。
Copy to clipboardCopiedapiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: apicast1 spec: ... openTracing: enabled: true tracingConfigSecretRef: name: myjaeger tracingLibrary: jaeger ...
OpenTracing を設定する
APIcast
カスタムリソースを作成します。たとえば、APIcast
カスタムリソースをapicast1.yaml
ファイルに保存した場合は、以下のコマンドを実行するはずです。
Copy to clipboardCopied$ oc apply -f apicast1.yaml
次のステップ
OpenTracing のインストール方法に応じて、Jaeger サービスユーザーインターフェイスでトレースが表示されるはずです。
2.5.1.6. APICAST_SERVICE_CACHE_SIZE 環境変数の設定
APIcast カスタムリソース (CR) にオプションのフィールドを追加することで、APIcast が内部キャッシュに保存するサービスの数を指定できます。
前提条件
- APIcast Operator がインストールされている、またはインストール中である。
手順
-
spec
にserviceCacheSize
オプションフィールドを追加します。
spec: // ... serviceCacheSize: 42
検証
以下のコマンドを入力してデプロイメントを確認します。
$ oc get deployment/apicast-example-apicast -o yaml
環境変数が含まれていることを確認します。
# ... - name: APICAST_SERVICE_CACHE_SIZE value: '42' # ...
2.6. 3scale API Management APIcast API ゲートウェイの高度な操作の紹介
3scale APIcast の高度な操作の概要は、アプリケーションプログラミングインターフェイス (API) へのアクセスの設定を調整するのに役立ちます。
2.6.1. 3scale API への呼び出しの公開ベース URL
公開ベース URL は API 利用者がご自分の API プロダクトにリクエストを行うのに使用する URL で、3scale により公開されます。これは、ご自分の APIcast インスタンスの URL になります。
Self-managed デプロイメントオプションのいずれかを使用している場合 には、それぞれの環境 (ステージングおよび実稼働環境) について、ご自分の管理するドメインに属する専用の公開ベース URL を選択することができます。この URL はご自分の API バックエンドの URL とは別で、たとえば https://api.yourdomain.com:443
のようになります。ここで、yourdomain.com
はご自分のドメインです。公開ベース URL を設定したら必ず変更を保存し、必要に応じてステージング環境の変更を実稼働環境にプロモートしてください。
指定する公開ベース URL は、OpenShift クラスターで利用可能なポートを使用する必要があります。デフォルトでは、OpenShift のルーターは標準の HTTP および HTTPS ポート (80 および 443) の接続しかリッスンしません。ユーザーに他のポート経由で API に接続してもらう場合は、OpenShift の管理者と連携してそのポートを有効にします。
APIcast は公開ベース URL で指定したホスト名に対する呼び出ししか受け付けません。たとえば、公開ベース URL を https://echo-api.3scale.net:443
と指定した場合には、正しい呼び出しは以下のようになります。
curl "https://echo-api.3scale.net:443/hello?user_key=you_user_key"
Copy to clipboardCopiedAPI に公開ドメインがない場合には、リクエストに APIcast の IP アドレスを使用することができます。ただし、実際のドメインではなくても良いので、Public Base URL フィールドには値を指定する必要があります。その場合には、Host ヘッダーでホストを指定するようにしてください。以下に例を示します。
curl "http://192.0.2.12:80/hello?user_key=your_user_key" -H "Host: echo-api.3scale.net"
Copy to clipboardCopied
ローカルマシンにデプロイしている場合には、ドメインを "localhost" と指定することができます。この場合には公開ベース URL は http://localhost:80
のようになり、以下のようにリクエストを行うことができます。
curl "http://localhost:80/hello?user_key=your_user_key"
Copy to clipboardCopiedAPI プロダクトが複数ある場合には、それぞれのプロダクトに公開ベース URL を適切に設定します。APIcast はホスト名に基づきリクエストをルーティングします。
2.6.2. 3scale API Management API の使用状況を把握するために APIcast がマッピングルールをどのように適用するか
API に対するリクエストに基づいて、マッピングルールにより API の使用状況を把握するメトリックまたはメソッドを定義、指定します。マッピングルールの例を以下に示します。

このルールは、/
で始まるすべての GET
リクエストがメトリック hits
のカウントを 1 つ増やす、という意味です。このルールは API に対するすべてのリクエストにマッチします。これは有効なマッピングルールですが、一般的すぎるので、より具体的なルールが追加された時に、2 倍にカウントされることになります。
より具体的なルールの例として、Echo API マッピングルールを以下に示します。

マッピングルールは、API プロダクトレベルおよび API バックエンドレベルで機能します。
プロダクトレベルでのマッピングルール
- このマッピングルールは、バックエンドレベルのマッピングルールに優先します。つまり、プロダクトレベルのマッピングルールが先に評価されます。
- どのバックエンドがリダイレクトされたトラフィックを受信するかにかかわらず、このマッピングルールは常に評価されます。
バックエンドレベルでのマッピングルール
- バックエンドにマッピングルールを追加すると、それらのマッピングルールはそのバックエンドと結び付くすべてのプロダクトに追加されます。
- このマッピングルールは、プロダクトレベルで定義されたマッピングルールの後に評価されます。
- このマッピングルールは、マッピングルールが設定されたバックエンドにトラフィックがリダイレクトされた場合にのみ評価されます。
- プロダクトに結び付けられるバックエンドのパスが、バックエンドの各マッピングルールの前に自動的に追加されます。
プロダクトレベルおよびバックエンドレベルのマッピングルールの例
1 つのバックエンドが設定されたプロダクトのマッピングルールの例を以下に示します。
Echo API バックエンド:
-
プライベートエンドポイント:
https://echo-api.3scale.net
以下のパターンの 2 つのマッピングルールが含まれる
/hello /bye
-
プライベートエンドポイント:
Cool API プロダクト:
-
公開エンドポイント:
https://cool.api
-
ルーティングパス
/echo
により Echo API バックエンドを使用する
-
公開エンドポイント:
Cool API プロダクトには、自動的に以下のパターンのマッピングルールが含まれます。
/echo/hello /echo/bye
-
これは、公開 URL
https://cool.api/echo/hello
に送信されたリクエストが、https://echo-api.3scale.net/hello
にリダイレクトされることを意味します。 -
同様に、
https://cool.api/echo/bye
に送信されたリクエストは、https://echo-api.3scale.net/bye
にリダイレクトされます。
-
これは、公開 URL
ここで、同じ Echo API バックエンドを使用する Tools For Devs というプロダクトを追加することを考えてみます。
Tools For Devs プロダクト:
-
公開エンドポイント:
https://dev-tools.api
-
ルーティングパス
/tellmeback
により Echo API バックエンドを使用する
-
公開エンドポイント:
Tools For Devs プロダクトには、自動的に以下のパターンのマッピングルールが含まれます。
/tellmeback/hello /tellmeback/bye
-
したがって、公開 URL
https://dev-tools.api/tellmeback/hello
に送信されたリクエストは、https://echo-api.3scale.net/hello
にリダイレクトされます。 -
同様に、
https://dev-tools.api/tellmeback/bye
に送信されたリクエストは、https://echo-api.3scale.net/bye
にリダイレクトされます。
-
したがって、公開 URL
パターン
/ping
のマッピングルールを Echo API バックエンドに追加すると、Cool API プロダクトおよび Tools For Devs プロダクトの両方に変更が加えられます。-
Cool API には、
/echo/ping
というパターンのマッピングルールが含まれます。 -
Tools For Devs には、
/tellmeback/ping
というパターンのマッピングルールが含まれます。
-
Cool API には、
マッピングルールの照合
3scale では、前方一致に基づきマッピングルールを適用します。表記法は OpenAPI および ActiveDocs の仕様に準じます。
-
マッピングルールは、スラッシュ (
/
) で始める必要があります。 URL の文字列 (例:
/hello
) を使用してパスの照合を行います。- マッピングルールを保存すると、設定した URL 文字列にリクエストが送付され、それぞれのマッピングルールで定義したメトリクスまたはメソッドが呼び出されます。
-
マッピングルールでは、
/{word}?value={value}
のように、クエリー文字列またはボディーにパラメーターを含めることができます。 APIcast は以下のようにパラメーターを取得します。
-
GET
メソッド: クエリー文字列から。 -
POST
、DELETE
、またはPUT
メソッド: ボディーから。
-
-
マッピングルールには、
/{word}
のように名前付きワイルドカードを含めることができます。このルールは、プレースホルダー{word}
で定義する任意の文字にマッチします。たとえば、/morning
のようなリクエストがマッピングルールにマッチします。ワイルドカードは、スラッシュとスラッシュの間またはスラッシュとピリオドの間に使用することができます。パラメーターにもワイルドカードを含めることができます。 -
デフォルトでは、指定したソート順に従ってすべてのマッピングルールが上から評価されます。ルール
/v1
を追加した場合には、パスが/v1
で始まるリクエストにマッチします (例:/v1/word
または/v1/sentence
)。 -
パターンの最後にドル記号 (
$
) を追加して、完全一致を指定することができます。たとえば、/v1/word
は、/v1/word
のリクエストにだけマッチし、/v1/word/hello
のリクエストにはマッチしません。完全一致を指定する場合には、すべてにマッチするデフォルトのマッピングルール (/
) を必ず無効にする必要があります。 - 複数のマッピングルールがリクエストのパスにマッチする場合がありますが、マッチするルールがなければ、リクエストは無視され HTTP 404 ステータスコードが返されます。
マッピングルールのワークフロー
マッピングルールに関するワークフローを以下に示します。
- いつでも新たなマッピングルールを定義することができます。マッピングルールの定義 を参照してください。
- 誤って変更されないように、次回のリロード時にマッピングルールはグレーアウト表示されます。
- 既存のマッピングルールを編集するには、右側にある鉛筆アイコンをクリックして、まずそのルールを有効にする必要があります。
- ルールを削除するには、ゴミ箱アイコンをクリックします。
- Integration > Configuration で変更をプロモートすると、すべての変更および削除が保存されます。
他のマッピングルールの停止
新しいマッピングルールの作成時、特に 1 つ以上のマッピングルールを処理した後、それ以降のマッピングルールの処理を停止するには、Last? オプションを選択します。たとえば、API Integration Settings で、さまざまなメトリクスに関連付けられた複数のマッピングルールを定義した場合などです。
(get) /path/to/example/search (get) /path/to/example/{id}
ルール /path/to/example/search
には Last? とマークできます。次に、(get)/path/to/example/search
を呼び出すと、このルールでの照合を行った後、APIcast は処理を停止して、残りのルールでの照合は行われません。また、ルールのメトリクス (get)/path/to/example/{id}
はインクリメントされません。
2.6.3. 特殊な要求を持つ API を APIcast がどのように処理するか
API 利用者が API を適切に呼び出すことができるように、カスタム APIcast 設定が必要となる特殊なケースがあります。
Host ヘッダー
このオプションは、Host
ヘッダーが指定した値にマッチしない限りトラフィックを拒否する API プロダクトにのみ必要です。このような場合には、Host
がゲートウェイの 1 つなので、ゲートウェイが API プロダクトの前にあることで問題が生じます (例: xxx-yyy.staging.apicast.io
)。
この問題を回避するには、[Your_product_name] > Integration > Settings に移動し、AUTHENTICATION SETTINGS の Host Header フィールドで、API プロダクトが想定するホストを定義します。
これにより、Hosted APIcast インスタンスはリクエストの呼び出しのホストに関する定義を書き換えます。

API バックエンドの保護
APIcast が実稼動環境で動作するようになった後、API プロダクトへの直接アクセスを、指定したシークレットトークンを持つ呼び出しだけに制限することが望まれる場合があります。そのためには、APIcast の シークレットトークン を設定します。シークレットトークンの設定方法は、高度な APIcast 設定 を参照してください。
プライベート API を扱う APIcast の使用
APIcast を使用して、インターネット上に公開されていない API を保護することができます。そのための条件は以下のとおりです。
- デプロイメントオプションとして、Self-managed APIcast を使用している。
- 一般のインターネットから APIcast へのアクセスが可能で、APIcast が 3scale Service Management API に発信の呼び出しを行うことができる。
APIcast が API プロダクトにアクセスすることができる。
この場合には、Private Base URL フィールドに API の内部ドメイン名または IP アドレスを設定し、他の手順は通常どおりに実施することができます。ただし、この設定により、ステージング環境のメリットを活用することができなくなります。ステージング用 APIcast インスタンスは 3scale がホストしていて、プライベート API バックエンドにはアクセスすることができないため、テストコールは成功しません。APIcast を実稼働環境にデプロイして正しく設定すれば、APIcast は想定どおりに機能します。
2.7. 関連情報
APIcast の最新リリースとサポート対象バージョンは、以下のアーティクル記事を参照してください。
第3章 3scale API Management での高可用性サポートのための外部 Redis データベース設定
Red Hat は外部 Redis データベースを使用する 3scale の設定をサポートしています。ただし、Red Hat は、ゼロダウンタイムのための Redis のセットアップ、3scale のバックエンドコンポーネントの設定、または Redis データベースのレプリケーションおよびシャーディングを正式にはサポートしていません。この章に記載の内容は、参照用途としてのみ提供されています。また、3scale では、cluster mode
の Redis はサポートされません。
高可用性 (HA) は、OpenShift Container Platform (OCP) によりほとんどのコンポーネントで提供されます。
Red Hat 3scale API Management デプロイメントからデータベースを外部化すると、アプリケーションからの分離とデータベースレベルでのサービス中断に対する回復力が提供されることになります。サービス中断に対する復元力は、データベースをホストするインフラストラクチャーまたはプラットフォームプロバイダーが提供するサービスレベルアグリーメント (SLA) によって異なります。これは 3scale では提供されていません。選択したデプロイメントによって提供されるデータベースの外部化の詳細は、関連ドキュメントを参照してください。
Red Hat 3scale API Management の HA 用データベースコンポーネントは、以下のとおりです。
-
backend-redis
: 統計ストレージおよび一時ジョブストレージに使用されます。 -
system-redis
: 3scale のバックグラウンドジョブの一時ストレージを提供し、system-app
Pod の Ruby プロセスのメッセージバスとしても使用されます。
backend-redis
と system-redis
は、どちらもサポートされる Redis Sentinel および Redis Enterprise 用 Redis 高可用性バリアントと共に動作します。
Redis Pod が停止した場合や、OpenShift Container Platform によって停止された場合には、新しい Pod が自動作成されます。データは永続ストレージから復元されるので、Pod は動作し続けます。このような場合、新しい Pod が起動するまでの間、短いダウンタイムが発生します。これは、Redis がマルチマスター設定をサポートしないという制限によるものです。Redis をデプロイしたすべてのノードに Redis イメージを事前にインストールすることで、ダウンタイムを削減することができます。これにより、Pod の再起動にかかる時間が短縮されます。
ゼロダウンタイムとなるよう Redis をセットアップし、3scale のバックエンドコンポーネントを設定します。
前提条件
- 管理者ロールが設定された 3scale アカウント
3.1. ゼロダウンタイムのための Redis 設定
ゼロダウンタイムが必要な場合、3scale 管理者は OCP 外部に Redis を設定します。3scale Pod の設定オプションを使用してこの設定を行うには、いくつかの方法があります。
- 独自の自己管理型 Redis を設定する
- Redis Sentinel を使用する (Redis Sentinel Documentation を参照)
サービスとして提供される Redis:
例:
- Amazon ElastiCache
- Redis Labs
Red Hat は上記のサービスにサポートを提供しません。このようなサービスの言及は、Red Hat による製品やサービスの推奨を意味するものではありません。Red Hat は、Red Hat 外部のコンテンツを使用 (または依存) して発生した損失や費用の責任を負いません。
3.2. 3scale API Management のバックエンドコンポーネントの設定
3scale 管理者は、backend-cron
、backend-listener
、および backend-worker
のデプロイメント設定で、back-end
コンポーネントの環境変数に Redis HA (フェイルオーバー) を設定します。3scale の Redis HA には、これらの設定が必要です。
Redis と Sentinel を使用するには、backend-redis
または system-redis
、もしくはその両方のシークレットに Sentinel 設定を指定する必要があります。
3.2.1. backend-redis
と system-redis
シークレットの作成
以下の手順に従い、適宜 backend-redis
および system-redis
シークレットを作成します。
3.2.2. 3scale API Management for HA の新規インストールのデプロイ
手順
以下のフィールドを指定して、
backend-redis
およびsystem-redis
シークレットを作成します。backend-redis
REDIS_QUEUES_SENTINEL_HOSTS REDIS_QUEUES_SENTINEL_ROLE REDIS_QUEUES_URL REDIS_STORAGE_SENTINEL_HOSTS REDIS_STORAGE_SENTINEL_ROLE REDIS_STORAGE_URL
system-redis
NAMESPACE SENTINEL_HOSTS SENTINEL_ROLE URL
Redis と Sentinel を設定する場合、
backend-redis
およびsystem-redis
の該当するURL
フィールドには、redis://[:redis-password@]redis-group[/db]
のフォーマットで Redis グループを指定します。ここで、[x] はオプションの要素 x を意味し、redis-password
、redis-group
、およびdb
変数は適切な値に置き換えてください。例
redis://:redispwd@mymaster/5
SENTINEL_HOSTS
フィールドは、以下のフォーマットの Sentinel 接続文字列のコンマ区切りリストです。redis://:sentinel-password@sentinel-hostname-or-ip:port
リスト内の各要素に関して、[x] はオプションの要素 x を意味し、
sentinel-password
、sentinel-hostname-or-ip
、およびport
変数は適切な値に置き換えてください。例
:sentinelpwd@123.45.67.009:2711,:sentinelpwd@other-sentinel:2722
-
SENTINEL_ROLE
フィールドの値は、master
またはslave
のどちらかです。
Operator を使用した 3scale API Management のデプロイ に示されているように 3scale をデプロイします。
-
backend-redis
およびsystem-redis
がすでに存在するために表示されるエラーは無視します。
-
3.2.3. 3scale API Management の非 HA デプロイメントを HA に移行する
-
HA 用の 3scale API Management の新規インストールのデプロイ に記載のとおり、すべてのフィールドを指定して
backend-redis
およびsystem-redis
シークレットを編集します。 以下の
backend-redis
環境変数がバックエンド Pod に対して定義されていることを確認してください。name: BACKEND_REDIS_SENTINEL_HOSTS valueFrom: secretKeyRef: key: REDIS_STORAGE_SENTINEL_HOSTS name: backend-redis name: BACKEND_REDIS_SENTINEL_ROLE valueFrom: secretKeyRef: key: REDIS_STORAGE_SENTINEL_ROLE name: backend-redis
以下の
system-redis
の環境変数がsystem-(app|sidekiq)
Pod に対して定義されていることを確認してください。name: REDIS_SENTINEL_HOSTS valueFrom: secretKeyRef: key: SENTINEL_HOSTS name: system-redis name: REDIS_SENTINEL_ROLE valueFrom: secretKeyRef: key: SENTINEL_ROLE name: system-redis
- 指示に従って、テンプレートを使用した 3scale のアップグレード を続行します。
3.2.3.1. Redis Enterprise の使用
3 つの異なる
redis-enterprise
インスタンスで、OpenShift にデプロイされた Redis Enterprise を使用します。system-redis
シークレットを編集します。-
system-redis
のシステム redis データベースをURL
に設定します。
-
-
backend-redis
のバックエンドデータベースをREDIS_QUEUES_URL
に設定します。 -
backend-redis
の 3 番目のデータベースをREDIS_STORAGE_URL
に設定します。
3.2.3.2. Redis Sentinel の使用
オプションで、Redis Sentinel をデータベースのいずれかに適用できます。ただし、Red Hat は、HA 用に Redis Sentinel をすべてに適用することを推奨します。
統計のバックエンド redis:
backend-redis
シークレットを更新し、以下の値を指定します。-
REDIS_STORAGE_URL
-
REDIS_STORAGE_SENTINEL_ROLE
REDIS_STORAGE_SENTINEL_HOSTS
REDIS_STORAGE_SENTINEL_ROLE
を Sentinels ホストおよびポートのコンマ区切りリストに設定します (例::sentinelpwd@123.45.67.009:2711,:sentinelpwd@other-sentinel:2722
)。
-
キューのバックエンド redis:
backend-redis
シークレットを更新し、以下の値を指定します。-
REDIS_QUEUES_URL
-
REDIS_QUEUES_SENTINEL_ROLE
REDIS_QUEUES_SENTINEL_HOSTS
REDIS_QUEUES_SENTINEL_ROLE
を Sentinels ホストおよびポートのコンマ区切りリストに設定します (例::sentinelpwd@123.45.67.009:2711,:sentinelpwd@other-sentinel:2722
)。
-
- これらの Redis データベースと共に Redis Sentinel を使用します。
データ用のシステム redis:
system-redis
シークレットを更新し、以下の値を指定します。注記system-redis
シークレットを編集します:URL
-
SENTINEL_ROLE
-
NAMESPACE
-
URL
SENTINEL_HOSTS
SENTINEL_HOSTS
を Sentinels ホストおよびポートのコンマ区切りリストに設定します (例::sentinelpwd@123.45.67.009:2711,:sentinelpwd@other-sentinel:2722
)。
-
注記
system-app および system-sidekiq コンポーネントは、統計を取得するために
back-end
Redis に直接接続します。-
3scale 2.7 の時点で、これらのシステムコンポーネントは Sentinel を使用する際にも
back-end
Redis (ストレージ) に接続することができます。
-
3scale 2.7 の時点で、これらのシステムコンポーネントは Sentinel を使用する際にも
system-app および system-sidekiq コンポーネントは、
backend-redis
ストレージ しか使用しません (backend-redis
キューは使用しません)。-
システムコンポーネントに加えた変更は、
backend-redis
ストレージと Sentinel の組み合わせをサポートします。
-
システムコンポーネントに加えた変更は、
3.3. 補足情報
- 3scale と Redis データベースのサポートについては、Red Hat 3scale API Management のサポート対象設定 を参照してください。
- Redis 向け Amazon ElastiCache の詳細は、公式のAmazon ElastiCache Documentation を参照してください。
- Redis Enterprise の詳細は、最新の ドキュメント を参照してください。
第4章 外部 MySQL データベースの設定
Red Hat 3scale API Management デプロイメントからデータベースを外部化すると、アプリケーションからの分離とデータベースレベルでのサービス中断に対する回復力が提供されることになります。サービス中断に対する復元力は、データベースをホストするインフラストラクチャーまたはプラットフォームプロバイダーが提供するサービスレベルアグリーメント (SLA) によって異なります。これは 3scale では提供されていません。選択したデプロイメントによって提供されるデータベースの外部化の詳細は、関連ドキュメントを参照してください。
Red Hat は外部 MySQL データベースを使用する 3scale の設定をサポートしています。ただし、データベース自体はサポートの範囲外です。
この章では、MySQL データベースを外部化する方法を説明します。これは、デフォルトの system-mysql
Pod を使用するとネットワークやファイルシステムなど複数のインフラストラクチャーの問題が生じる場合に役立ちます。
前提条件
- 管理者権限を持つアカウントを使用して OpenShift Container Platform 4.x クラスターにアクセスできる。
- OpenShift クラスター上にインストールされた 3scale インスタンス。OpenShift への 3scale API Management のインストール を参照してください。
外部 MySQL データベースを設定するには、次のセクションで説明する手順を実行します。
4.1. 外部 MySQL データベースに関する制約
MySQL データベースを外部化するプロセスの制約は以下のとおりです。
オンプレミス型 3scale のバージョン
オンプレミス型 3scale のバージョン 2.5 および 2.6 のみテストおよび検証済みです。
MySQL データベースユーザー
URL は以下の形式でなければなりません。
<database_scheme>://<admin_user>:<admin_password>@<database_host>/<database_name>
<admin_user>
は、<database_name>
論理データベースの完全なパーミッションを持つ外部データベースの既存ユーザーである必要があります。<database_name>
は、外部データベースの既存の論理データベースである必要があります。
MySQL ホスト
ホスト名 ではなく外部 MySQL データベースの IP アドレス を使用します。そうでない場合は、解決されません。たとえば、mysql.mydomain.com ではなく 1.1.1.1 を使用します。
4.2. MySQL データベースの外部化
MySQL データベースを完全に外部化するには、以下の手順を使用します。
この操作により、プロセスの進行中に環境でダウンタイムが発生します。
手順
オンプレミス型 3scale インスタンスをホストする OpenShift ノードにログインし、そのプロジェクトに切り替えます。
$ oc login -u <user> <url> $ oc project <3scale-project>
<user>
、<url>
、および<3scale-project>
を、実際のクレデンシャルとプロジェクト名に置き換えます。以下に示す順序で手順実施し、すべての Pod をスケールダウンします。これにより、データの喪失が回避されます。
オンプレミス型 3scale の停止
OpenShift Web コンソールまたはコマンドラインインターフェイス (CLI) から、すべてのデプロイメント設定を以下の順序でゼロレプリカにスケールダウンします。
-
3scale 2.6 より前のバージョンの場合は
apicast-wildcard-router
とzync
、3scale 2.6 以降の場合はzync-que
とzync
-
apicast-staging
とapicast-production
system-sidekiq
、backend-cron
、およびsystem-searchd
-
3scale 2.3 の場合には
system-resque
を対象に含めます。
-
3scale 2.3 の場合には
-
system-app
-
backend-listener
とbackend-worker
backend-redis
、system-memcache
、system-mysql
、system-redis
、およびzync-database
以下の例は、
apicast-wildcard-router
とzync
について、CLI でこの操作を実施する方法を示しています。$ oc scale dc/apicast-wildcard-router --replicas=0 $ oc scale dc/zync --replicas=0
注記各ステップのデプロイメント設定は同時にスケールダウンできます。たとえば、
apicast-wildcard-router
とzync
を一緒にスケールダウンできます。ただし、各ステップの Pod が終了するのを待ってから、次の Pod をスケールダウンすることを推奨します。3scale インスタンスは、完全に再起動されるまで一切アクセスできなくなります。
-
3scale 2.6 より前のバージョンの場合は
3scale プロジェクトで実行中の Pod がないことを確認するには、以下のコマンドを使用します。
$ oc get pods -n <3scale_namespace>
このコマンドは、No resources found を返すはずです。
以下のコマンドを使用して、データベースレベルの Pod を再度スケールアップします。
$ oc scale dc/{backend-redis,system-memcache,system-mysql,system-redis,zync-database} --replicas=1
次のステップに進む前に、
system-mysql
Pod を通じて外部 MySQL データベースにログインできることを確認してください。$ oc rsh system-mysql-<system_mysql_pod_id> mysql -u root -p -h <host>
- <system_mysql_pod_id>: system-mysql Pod の識別子
ユーザーは必ず root でなければなりません。詳細は、外部 MySQL データベースに関する制約 を参照してください。
-
CLI に
mysql>
が表示されるようになります。exit と入力してから return キーを押します。次のプロンプトで再度 exit と入力して、OpenShift ノードのコンソールに戻ります。
-
CLI に
以下のコマンドを使用して、MySQL のフルダンプを実行します。
$ oc rsh system-mysql-<system_mysql_pod_id> /bin/bash -c "mysqldump -u root --single-transaction --routines --triggers --all-databases" > system-mysql-dump.sql
-
<system_mysql_pod_id> を一意の
system-mysql
Pod ID に置き換えます。 次の例のように、ファイル
system-mysql-dump.sql
に有効な MySQL レベルのダンプが含まれていることを確認します。$ head -n 10 system-mysql-dump.sql -- MySQL dump 10.13 Distrib 8.0, for Linux (x86_64) -- -- Host: localhost Database: -- ------------------------------------------------------ -- Server version 8.0 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */;
-
<system_mysql_pod_id> を一意の
system-mysql
Pod をスケールダウンし、レプリカが 0 (ゼロ) のままにします。$ oc scale dc/system-mysql --replicas=0
<password> と <host> を適宜置き換え、URL
mysql2://root:<password>@<host>/system
の base64 変換値を取得します。$ echo "mysql2://root:<password>@<host>/system" | base64
リモート MySQL データベースのデフォルトの 'user'@'%' を作成します。これには SELECT 権限しか付与する必要はありません。また、その base64 変換値を取得します。
$ echo "user" | base64 $ echo "<password>" | base64
- <password> を 'user'@'%' のパスワードに置き換えます。
バックアップを実行し、OpenShift シークレット
system-database
を編集します。$ oc get secret system-database -o yaml > system-database-orig.bkp.yml $ oc edit secret system-database
- URL: これを [step-8] で取得した値に置き換えます。
- DB_USER および DB_PASSWORD: 共に前のステップの値を使用します。
-
system-mysql-dump.sql
をリモートデータベースサーバーに送信し、ダンプをインポートします。インポートには、以下のコマンドを使用します。 以下のコマンドを使用して
system-mysql-dump.sql
をリモートデータベースサーバーに送信し、ダンプをサーバーにインポートします。mysql -u root -p < system-mysql-dump.sql
system という新しいデータベースが作成されたことを確認します。
mysql -u root -p -se "SHOW DATABASES"
以下の手順を使用して、オンプレミス型 3scale を起動します。これにより、すべての Pod が正しい順序でスケールアップされます。
オンプレミス型 3scale の起動
-
backend-redis
、system-memcache
、system-mysql
、system-redis
、およびzync-database
-
backend-listener
とbackend-worker
-
system-app
system-sidekiq
、backend-cron
、およびsystem-searchd
-
3scale 2.3 の場合には
system-resque
を対象に含めます。
-
3scale 2.3 の場合には
-
apicast-staging
とapicast-production
3scale 2.6 より前のバージョンの場合は
apicast-wildcard-router
とzync
、3scale 2.6 以降の場合はzync-que
とzync
以下の例は、
backend-redis
、system-memcache
、system-mysql
、system-redis
、およびzync-database
について、CLI でこの操作を実行する方法を示しています。$ oc scale dc/backend-redis --replicas=1 $ oc scale dc/system-memcache --replicas=1 $ oc scale dc/system-mysql --replicas=1 $ oc scale dc/system-redis --replicas=1 $ oc scale dc/zync-database --replicas=1
system-app
Pod が問題なく起動し、実行されるはずです。
-
- 確認後、上記の順序 で他の Pod をスケールアップして元の状態に戻します。
-
system-mysql
DeploymentConfig オブジェクトのバックアップを作成します。数日後、すべて正常に動作していることが確認できたら、削除してかまいません。system-mysql
DeploymentConfig を削除することで、この手順を今後再び実行する場合の混乱を防ぐことができます。
4.3. ロールバック
ステップ 14 を実施した後、system-app
Pod が完全には動作状態に戻らず、その根本的な原因が判断できない、または対処できない場合、ロールバックの手順を実施します。
system-database-orig.bkp.yml
の元の値を使用して、シークレットsystem-database
を編集します。[step-10] を参照してください。
Copy to clipboardCopied$ oc edit secret system-database
URL、DB_USER、および DB_PASSWORD を元の値に置き換えます。
system-mysql
を含め、すべての Pod をスケールダウンしてから、再度スケールアップして元の状態に戻します。system-app
Pod およびその後に起動されるその他の Pod が、再び起動して実行されるはずです。以下のコマンドを実行して、すべての Pod が元どおりに起動、実行されていることを確認します。
Copy to clipboardCopied$ oc get pods -n <3scale-project>
4.4. 関連情報
- 3scale と MySQL データベースのサポートについては、Red Hat 3scale API Management のサポート対象設定 を参照してください。