1.5. Operator を使用した OpenShift での 3scale API Management のデプロイメント設定オプション


重要

この注記に含まれる外部の Web サイトへのリンクは、お客様の利便性のみを目的として提供しています。Red Hat はリンクの内容を確認しておらず、コンテンツまたは可用性に責任を負わないものとします。外部 Web サイトへのリンクが含まれていても、Red Hat が Web サイトまたはその組織、製品、もしくはサービスを保証することを意味するものではありません。お客様は、外部サイトまたはコンテンツの使用 (または信頼) によって生じる損失または費用について、Red Hat が責任を負わないことに同意するものとします。

このセクションでは、Operator を使用した OpenShift への Red Hat 3scale API Management のデプロイメント設定オプションを説明します。

前提条件

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 Clipboard Toggle word wrap

httpProxy

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 Clipboard Toggle word wrap

httpsProxy

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 Clipboard Toggle word wrap

noProxy

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 Clipboard Toggle word wrap

1.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 がインストールされている。

手順

  1. 注入するカスタム環境を定義する Lua コードを記述します。たとえば、次の env1.lua ファイルは、3scale Operator がすべてのサービスに対してロードするカスタムログポリシーを示しています。

    local 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 },
    }
    Copy to Clipboard Toggle word wrap
  2. カスタム環境を定義する Lua ファイルからシークレットを作成します。以下に例を示します。

    $ oc create secret generic custom-env-1 --from-file=./env1.lua
    Copy to Clipboard Toggle word wrap

    シークレットには複数のカスタム環境を含めることができます。カスタム環境を定義する各ファイルの -from-file オプションを指定します。Operator は各カスタム環境をロードします。

  3. 作成したシークレットを参照する APIManager カスタムリソース (CR) を定義します。以下の例は、カスタム環境を定義するシークレットの参照に関連するコンテンツのみを示しています。

    apiVersion: 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
    Copy to Clipboard Toggle word wrap

    APIManager CR は、カスタム環境を定義する複数のシークレットを参照できます。Operator は各カスタム環境をロードします。

  4. カスタム環境を追加する APIManager CR を作成します。以下に例を示します。

    $ oc apply -f apimanager.yaml
    Copy to Clipboard Toggle word wrap

次のステップ

カスタム環境を定義するシークレットのコンテンツを更新することはできません。カスタム環境を更新する必要がある場合は、以下のいずれかを実行できます。

  • 推奨されるオプションは、別の名前でシークレットを作成し、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.luaapicast-policy.json、および init.lua ファイルなどをすでに作成している。

手順

  1. 1 つのカスタムポリシーを定義するファイルからシークレットを作成します。以下に例を示します。

    $ 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
    Copy to Clipboard Toggle word wrap

    複数のカスタムポリシーがある場合は、カスタムポリシーごとにシークレットを作成します。シークレットには、カスタムポリシーを 1 つだけ含めることができます。

  2. 3scale Operator を使用してシークレットの変更を監視します。apimanager.apps.3scale.net/watched-by=apimanager ラベルを追加して、3scale Operator シークレットの変更の監視を開始します。

    $ oc label secret my-first-custom-policy-secret apimanager.apps.3scale.net/watched-by=apimanager
    Copy to Clipboard Toggle word wrap
    注記

    デフォルトでは、シークレットへの変更は 3scale Operator によって追跡されません。ラベルを設定すると、シークレットに変更を加えるたびに 3scale Operator が APIcast デプロイメントを自動的に更新します。これは、シークレットが使用されているステージング環境と実稼働環境の両方で発生します。3scale Operator は、いかなる形でもシークレットの所有権を取得しません。

  3. カスタムポリシーが含まれる各シークレットを参照する APIManager CR を定義します。APIcast ステージングと APIcast 実稼働環境に同じシークレットを指定できます。次の例は、カスタムポリシーを含む参照シークレットに関連するコンテンツのみを示しています。

    apiVersion: 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
    Copy to Clipboard Toggle word wrap

    APIManager CR は、異なるカスタムポリシーを定義する複数のシークレットを参照できます。Operator は各カスタムポリシーをロードします。

  4. カスタムポリシーが含まれるシークレットを参照する APIManager CR を作成します。以下に例を示します。

    $ oc apply -f apimanager.yaml
    Copy to Clipboard Toggle word wrap

次のステップ

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 がインストールされているか、インストール中である。

手順

  1. stringData.config に OpenTracing 設定の詳細を含めて、シークレットを定義します。これは、OpenTracing 設定の詳細が含まれる属性の唯一有効な値です。その他の仕様では、APIcast が OpenTracing 設定の詳細を受け取れないようにします。以下の例は、有効なシークレット定義を示しています。

    apiVersion: 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
    Copy to Clipboard Toggle word wrap
  2. シークレットを作成します。たとえば、以前のシークレット定義を myjaeger.yaml ファイルに保存した場合は、以下のコマンドを実行します。

    $ oc create -f myjaeger.yaml
    Copy to Clipboard Toggle word wrap
  3. OpenTracing 属性を指定する APIManager カスタムリソース (CR) を定義します。CR 定義で、openTracing.tracingConfigSecretRef.name 属性を OpenTracing 設定の詳細が含まれるシークレットの名前に設定します。以下の例は、OpenTracing の設定に関するコンテンツのみを示しています。

    apiVersion: 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
    Copy to Clipboard Toggle word wrap
  4. OpenTracing を設定する APIManager CR を作成します。たとえば、APIManager CR を apimanager1.yaml ファイルに保存した場合は、以下のコマンドを実行します。

    $ oc apply -f apimanager1.yaml
    Copy to Clipboard Toggle word wrap

次のステップ

OpenTracing のインストール方法に応じて、Jaeger サービスユーザーインターフェイスでトレースが表示されるはずです。

1.5.5. 3scale API Management Operator を使用して Pod レベルで TLS を有効にする

3scale では、実稼働環境用とステージング環境用の 2 つの APIcast インスタンスをデプロイします。TLS は、実稼働用またはステージングのみ、または両方のインスタンスに対して有効にできます。

前提条件

  • TLS を有効にするための有効な証明書がある。

手順

  1. 以下のように、有効な証明書からシークレットを作成します。

    $ oc create secret tls mycertsecret --cert=server.crt --key=server.key
    Copy to Clipboard Toggle word wrap

    この設定により、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 は組み込まれた自己署名証明書を使用します。これは、推奨されません。

  2. Operators > Installed Operators の順にクリックします。
  3. Installed Operators のリストで、3scale Operator をクリックします。
  4. API Manager タブをクリックします。
  5. Create APIManager をクリックします。
  6. 以下の YAML 定義をエディターに追加します。

    1. 実稼働 環境で有効にする場合は、次の YAML 定義を設定します。

      spec:
        apicast:
          productionSpec:
            httpsPort: 8443
            httpsVerifyDepth: 1
            httpsCertificateSecretRef:
              name: mycertsecret
      Copy to Clipboard Toggle word wrap
    2. staging で有効にする場合は、以下の YAML 定義を設定します。

      spec:
        apicast:
          stagingSpec:
            httpsPort: 8443
            httpsVerifyDepth: 1
            httpsCertificateSecretRef:
              name: mycertsecret
      Copy to Clipboard Toggle word wrap
  7. 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 Clipboard Toggle word wrap

関連情報

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 (mysqlpostgresql、または 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 Clipboard Toggle word wrap

シークレット 名は backend-redis にする必要があります。

Expand
表1.1 backend-redis
フィールド説明デフォルト値

REDIS_STORAGE_URL

バックエンド Redis ストレージデータベースの URL。

インスタンスが外部で管理される場合は必須です。それ以外の場合、デフォルト値は redis://backend-redis:6379/0 です。

REDIS_STORAGE_SENTINEL_ROLE

バックエンド Redis Storage Sentinel Role 名 (master または slave)。Redis データベースで Redis Sentinel が設定されている場合にのみ使用します。

""

REDIS_STORAGE_SENTINEL_HOSTS

バックエンド Redis Storage Sentinel Hosts 名。Redis データベースで Redis Sentinel が設定されている場合にのみ使用します。

""

REDIS_QUEUES_URL

バックエンド Redis Queues データベース URL。

インスタンスが外部で管理される場合は必須です。それ以外の場合、デフォルト値は redis://backend-redis:6379/1 です。

REDIS_QUEUES_SENTINEL_ROLE

バックエンド Redis Queues Sentinel Role 名 (master または slave)。Redis データベースで Redis Sentinel が設定されている場合にのみ使用します。

""

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 Clipboard Toggle word wrap

シークレット 名は system-redis にする必要があります。

Expand
表1.2 system-redis
フィールド説明デフォルト値

URL

システム Redis データベース URL。

インスタンスが外部で管理される場合は必須です。それ以外の場合、デフォルト値は redis://system-redis:6379/1 です。

SENTINEL_HOSTS

システム Redis Sentinel ホスト。Redis Sentinel が設定されている場合にのみ使用します。

""

SENTINEL_ROLE

システム Redis Sentinel ロール名 (master または slave)。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 Clipboard Toggle word wrap

重要

3scale 2.15 で MySQL 8.0 を使用する場合は、認証プラグインを mysql_native_password に設定する必要があります。MySQL 設定ファイルに以下を追加します。

[mysqld]
default_authentication_plugin=mysql_native_password
Copy to Clipboard Toggle word wrap

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 Clipboard Toggle word wrap

Oracle システムデータベースシークレット

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 Clipboard Toggle word wrap

注記
  • {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 Clipboard Toggle word wrap

zync データベースは高可用性モードである必要があります。

1.5.7.5. 3scale API Management をデプロイするための APIManager カスタムリソース

注記
  • 外部コンポーネントを有効にする場合は、3scale をデプロイする前に、外部コンポーネント (backend-redissystem-redissystem-databasezync) ごとにシークレットを作成する必要があります。
  • 外部の system-database の場合は、外部化するデータベースのタイプを 1 つだけ選択します。

APIManager カスタムリソース (CR) の設定は、選択したデータベースが 3scale デプロイメントの外部にあるかどうかによって異なります。

backend-redissystem-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 Clipboard Toggle word wrap

1.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 Clipboard Toggle word wrap

次のアフィニティーブロックを 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 Clipboard Toggle word wrap

次の例では、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 Clipboard Toggle word wrap

1.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) の 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-redissystem-redissystem-database、 および zync のデータベース接続文字列を使用してシークレットを手動でデプロイする必要があります。外部データベースモードでのインストール を参照してください。

    • クラスター間で共有されるデータベースは、すべてのクラスターで同じ値を使用する必要があります。
    • 各クラスターに独自のデータベースがある場合は、クラスターごとに異なる値を使用する必要があります。

1.5.9.2. 共有データベースを使用した同じリージョン上のアクティブ/パッシブクラスター

このセットアップでは、同じリージョン内に 2 つ以上のクラスターを配置し、アクティブ/パッシブモードで 3scale をデプロイします。1 つのクラスターがアクティブで、トラフィックを受信しています。他のクラスターはスタンバイモードでトラフィックを受信しないためパッシブですが、アクティブクラスターに障害が発生した場合に備えてアクティブなロールを引き受ける準備ができています。

このインストールオプションでは、単一リージョンのみが使用され、データベースはすべてのクラスター間で共有されます。

1.5.9.3. 共有データベースの設定とインストール

手順

  1. 異なるアベイラビリティーゾーン (AZ) を使用して、同じリージョンに 2 つ以上の OpenShift クラスターを作成します。3 つ以上のゾーンを使用することを推奨します。
  2. Amazon Relational Database Service (RDS) Multi-AZ を有効にして、必要なすべての AWS ElastiCache (EC) インスタンスを作成します。

    1. Backend Redis データベース用の AWS EC を 1 つ
    2. System Redis データベース用の AWS EC を 1 つ
  3. Amazon RDS Multi-AZ を有効にして、必要なすべての AWS RDS インスタンスを作成します。

    1. System データベース用の AWS RDS を 1 つ
    2. Zync データベース用の AWS RDS を 1 つ
  4. システムアセット用の AWS S3 バケットを設定します。
  5. AWS Route53 またはお使いの DNS プロバイダーでカスタムドメインを作成し、アクティブなクラスターの OpenShift ルーターを参照するようにします。これは、APIManager カスタムリソース (CR) の wildcardDomain 属性と一致する必要があります。
  6. 3scale をパッシブクラスターにインストールします。APIManager CR は、前のステップで使用したものと同一である必要があります。すべての Pod が実行されたら、すべての backendsystemzync、および APIcast Pod に 0 個のレプリカをデプロイするように APIManager を変更します。

    1. アクティブなデータベースからのジョブの消費を避けるために、レプリカを 0 に設定します。最初に各レプリカが 0 に設定されていると、Pod の依存関係によりデプロイメントが失敗します。たとえば、Pod は他の Pod が実行されているかどうかを確認します。まず通常どおりにデプロイしてから、APIManager 仕様の例に示すように、レプリカを 0 に設定します。

      spec:
        apicast:
          stagingSpec:
            replicas: 0
          productionSpec:
            replicas: 0
        backend:
          listenerSpec:
            replicas: 0
          workerSpec:
            replicas: 0
          cronSpec:
            replicas: 0
        zync:
          appSpec:
            replicas: 0
          queSpec:
            replicas: 0
        system:
          appSpec:
            replicas: 0
          sidekiqSpec:
            replicas: 0
      Copy to Clipboard Toggle word wrap

1.5.9.4. 共有データベースの手動フェイルオーバー

手順

  1. アクティブクラスターで、backendsystemzync、および APIcast Pod のレプリカを 0 にスケールダウンします。

    1. これは新しいパッシブクラスターになるため、新しいパッシブクラスターがアクティブデータベースからのジョブを消費しないようにします。ここからダウンタイムが始まります。
  2. パッシブクラスターで、APIManager を編集して、0 に設定した backendsystemzync、および APIcast Pod のレプリカをスケールアップし、クラスターをアクティブクラスターにします。
  3. 新しいアクティブクラスターで、zync によって作成された OpenShift ルートを再作成します。

    1. system-app Pod の system-master コンテナーから zync:resync:domains コマンドを実行します。

      bundle exec rake zync:resync:domains
      Copy to Clipboard Toggle word wrap
  4. AWS Route53 で作成したカスタムドメインが、新しいアクティブクラスターの OpenShift ルーターを参照するようにします。

    1. 以前のパッシブクラスターがトラフィックの受信を開始し、新しいアクティブクラスターになります。

1.5.9.5. 同期データベースを使用した異なるリージョン上のアクティブ/パッシブクラスター

このセットアップでは、異なるリージョンに 2 つ以上のクラスターを配置し、アクティブ/パッシブモードで 3scale をデプロイします。1 つのクラスターはアクティブでトラフィックを受信します。他のクラスターはスタンバイモードでトラフィックを受信しないためパッシブですが、アクティブクラスターに障害が発生した際にアクティブロールを引き受けることができるよう準備されています。

適切なデータベースアクセスレイテンシーを実現するために、各クラスターに独自のデータベースインスタンスがあります。アクティブな 3scale インストールのデータベースが 3scale パッシブインストールの読み取りレプリカデータベースにレプリケートされるため、すべてのリージョンでデータが利用可能で最新の状態になり、フェイルオーバーが可能になります。

1.5.9.6. 同期データベースの設定とインストール

手順

  1. 異なるアベイラビリティーゾーンを使用して、異なるリージョンに 2 つ以上の OpenShift クラスターを作成します。3 つ以上のゾーンを使用することを推奨します。
  2. すべてのリージョンで Amazon RDS Multi-AZ を有効にして、必要なすべての AWS ElastiCache インスタンスを作成します。

    1. Backend Redis データベース用の AWS EC を 2 つ: リージョンごとに 1 つ。
    2. System Redis データベース用の AWS EC を 2 つ: リージョンごとに 1 つ。
    3. グローバルデータストア機能を有効にしてクロスリージョンレプリケーションを使用します。これにより、パッシブリージョンのデータベースがアクティブリージョンのマスターデータベースからの読み取りレプリカになります。
  3. すべてのリージョンで Amazon RDS Multi-AZ を有効にして、必要なすべての AWS RDS インスタンスを作成します。

    1. System データベース用の AWS RDS を 2 つ。
    2. Zync データベース用の AWS RDS を 2 つ
    3. クロスリージョンレプリケーションを使用します。これにより、パッシブリージョンのデータベースがアクティブリージョンのマスターデータベースからの読み取りレプリカになります。
  4. クロスリージョンレプリケーションを使用して、各リージョンのシステムアセット用の AWS S3 バケットを設定します。
  5. AWS Route53 またはお使いの DNS プロバイダーでカスタムドメインを作成し、アクティブなクラスターの OpenShift ルーターを参照するようにします。これは、APIManager CR の wildcardDomain 属性と一致する必要があります。
  6. 3scale をパッシブクラスターにインストールします。APIManager CR は、前のステップで使用したものと同一である必要があります。すべての Pod が実行されたら、すべての backendsystemzync、および APIcast Pod に 0 個のレプリカをデプロイするように APIManager を変更します。

    1. アクティブなデータベースからのジョブの消費を避けるために、レプリカを 0 に設定します。最初に各レプリカが 0 に設定されていると、Pod の依存関係によりデプロイメントが失敗します。たとえば、Pod は他の Pod が実行されているかどうかを確認します。まず通常どおりにデプロイしてから、レプリカを 0 に設定します。

1.5.9.7. 同期データベースの手動フェイルオーバー

手順

  1. 共有データベースの手動フェイルオーバー の手順 1、2、および 3 を実行します。

    1. すべてのクラスターに、独自の独立したデータベース、つまりアクティブリージョンのマスターからの読み取りレプリカがあります。
    2. すべてのデータベースでフェイルオーバーを手動で実行して、パッシブリージョンで新しいマスターを選択する必要があります。選択すると、そのマスターがアクティブリージョンになります。
  2. 実行する必要があるデータベースの手動フェイルオーバーは次のとおりです。

    1. AWS RDS: SystemZync
    2. AWS ElastiCaches: BackendSystem
  3. 共有データベースの手動フェイルオーバー の手順 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 バケットの作成

前提条件

手順

  1. システム資産を保存するためのバケットを作成します。
  2. 開発者ポータルのロゴ機能を使用する場合は、S3 のパブリックアクセスブロッカーを無効にします。
  3. 以下の最低限のパーミッションで Identity and Access Management (IAM) ポリシーを作成します。

    {
        "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
    
                ]
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
    1
    <target_bucket_name> を独自の値に置き換えます。
    2
    <target_bucket_name> を独自の値に置き換えます。
  4. 以下のルールで CORS 設定 を作成します。

    [
        {
            "AllowedMethods": [
                "GET"
            ],
            "AllowedOrigins": [
                "http://*"
            ]
        }
    ]
    Copy to Clipboard Toggle word wrap

1.5.10.2. OpenShift シークレットの作成

以下の例は、永続ボリューム要求 (PVC) の代わりに Amazon S3 を使用する 3scale fileStorage を示しています。

注記

AWS S3 互換プロバイダーは、AWS_HOSTNAMEAWS_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 Clipboard Toggle word wrap

最後に、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 Clipboard Toggle word wrap

APIManager SystemS3Spec を確認してください。

次の表は、Identity and Access Management (IAM) および Security Token Service (STS) 設定の fileStorage Amazon S3 認証情報シークレットフィールドの要件を示しています。

  • Secure Token Service (STS) を使用する S3 認証方法は、権限が制限された短期間のセキュリティー認証情報で使用します。
  • S3 Identity and Access Management (IAM) は、長期的な権限セキュリティー認証情報で使用します。
Expand
表1.3 fileStorage S3 認証情報のシークレットフィールド
フィールド説明IAM に必要STS に必要

AWS_ACCESS_KEY_ID

システムの fileStorage の S3 ストレージで使用する AWS アクセスキー ID

はい

いいえ

AWS_SECRET_ACCESS_KEY

システムの fileStorage の S3 ストレージで使用する AWS アクセスキーシークレット

はい

いいえ

AWS_BUCKET

アセット用のシステムの fileStorage として使用される S3 バケット

はい

はい

AWS_REGION

アセット用のシステムの fileStorage として使用される S3 バケットのリージョン

はい

はい

AWS_HOSTNAME

デフォルト: Amazon エンドポイント - AWS S3 互換プロバイダーエンドポイントのホスト名

いいえ

いいえ

AWS_PROTOCOL

デフォルト: HTTPS AWS S3 互換プロバイダーエンドポイントプロトコル

いいえ

いいえ

AWS_PATH_STYLE

デフォルト: falsetrue に設定すると、バケット名は常にリクエスト URI に残り、サブドメインとしてホストに移動されません。

いいえ

いいえ

AWS_ROLE_ARN

AWS STS を使用して認証するためのポリシーがアタッチされているロールの ARN

いいえ

はい

AWS_WEB_IDENTITY_TOKEN_FILE

マウントされたトークンファイルの場所へのパス。例: /var/run/secrets/openshift/serviceaccount/token

いいえ

はい

1.5.10.3. STS を使用した手動モード

APIManager CR から STS 認証モードを有効にする必要があります。オーディエンスを定義できますが、デフォルト値は openshift です。

前提条件

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 Clipboard Toggle word wrap

クラウド認証情報ツールによって生成されたシークレットは、IAM シークレットとは異なるように見えます。AWS_ACCESS_KEY_IDAWS_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 Clipboard Toggle word wrap

STS では、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 Clipboard Toggle word wrap

1.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 Clipboard Toggle word wrap

1.5.12. SMTP 変数の設定 (任意)

3scale は、メールを使用して、通知を送信 し、新しいユーザーを招待 します。この機能を使用する場合は、独自の SMTP サーバーを提供し、system-smtp シークレットで SMTP 変数を設定する必要があります。

手順

  1. まだログインしていない場合は、OpenShift にログインし、oc コマンドを使用して 3scale オンプレミスインスタンスがインストールされているプロジェクトを選択します。

    $ oc login -u <user> <url>
    $ oc project <3scale-project>
    Copy to Clipboard Toggle word wrap
  2. oc patch コマンドを使用して、シークレット system-smtp を更新します。次の JSON でオプション -p を使用します: {"stringData":{"<field>":"<value>"}}。ここで、<field> はシークレットのフィールド、<value> は設定したい値です。利用可能なフィールドの完全なリストは以下の表に記載されています。

    Expand
    表1.4 system-smtp
    フィールド説明シークレットのデフォルト値アプリケーションメーラーのデフォルト値

    address

    リモートメールサーバーのアドレス。

    ""

    nil

    port

    使用するリモートメールサーバーのポート。

    ""

    0

    username

    メールサーバーが認証を必要とし、認証タイプがそれを必要とする場合のユーザー名。

    ""

    nil

    password

    メールサーバーが認証を必要とし、認証タイプがそれを必要とする場合のパスワード。

    ""

    nil

    認証

    メールサーバーで認証が必要な場合に使用します。認証タイプを設定します。plain はパスワードを plain で送信し、login は Base64 エンコードされたパスワードを送信します。cram_md5 は HMAC-MD5 アルゴリズムに基づくチャレンジ/レスポンスメカニズムを組み合わせます。

    ""

    nil

    openssl.verify.mode

    TLS を使用する場合、OpenSSL が証明書をチェックする方法を設定できます。これは、自己署名証明書やワイルドカード証明書を検証する必要がある場合に役立ちます。OpenSSL 検証定数の名前 none または peer を使用できます。

    ""

    nil

    from_address

    無返信メールの from アドレス値。

    ""

    "no-reply@{wildcardDomain}"

    注記
    • メールサーバーの設定に使用される HELO ドメインは {wildcardDomain} の値です。
    • {wildcardDomain} は、APIManager CR の spec.wildcardDomain に設定された値のプレースホルダーです。

    $ oc patch secret system-smtp -p '{"stringData":{"address":"<your_address>"}}'
    $ oc patch secret system-smtp -p '{"stringData":{"port":"587"}}'
    $ oc patch secret system-smtp -p '{"stringData":{"username":"<your_username>"}}'
    $ oc patch secret system-smtp -p '{"stringData":{"password":"<your_password>"}}'
    $ oc patch secret system-smtp -p '{"stringData":{"authentication":"plain"}}'
    $ oc patch secret system-smtp -p '{"stringData":{"openssl.verify.mode":"none"}}'
    Copy to Clipboard Toggle word wrap
  3. secret 変数を設定した後、system-app および system-sidekiq Pod を再デプロイします。

    $ oc rollout restart deployment/system-app
    $ oc rollout restart deployment/system-sidekiq
    Copy to Clipboard Toggle word wrap
  4. ロールアウトのステータスを表示し、読み込みが完了したことを確認します。

    $ oc rollout status deployment/system-app
    $ oc rollout status deployment/system-sidekiq
    Copy to Clipboard Toggle word wrap

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 Clipboard Toggle word wrap

1.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 - ギガバイト
Expand
表1.5 コンピュートリソースのデフォルト値
コンポーネント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 Clipboard Toggle word wrap

1.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 Clipboard Toggle word wrap

1.5.16. 証明書の検証をスキップするようにバックエンドクライアントを設定する

コントローラーがオブジェクトを処理するとき、API 呼び出しを行うための新しいバックエンドクライアントを生成します。デフォルトでは、このクライアントはサーバーの証明書チェーンを確認するためにセットアップされています。ただし、開発およびテスト中に、オブジェクトの処理時にクライアントが証明書の検証をスキップする必要がある場合があります。スキップできるようにするには、以下のオブジェクトにアノテーション "insecure_skip_verify": "true" を追加します。

  • ActiveDoc
  • Application
  • バックエンド
  • 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 Clipboard Toggle word wrap

1.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 Clipboard Toggle word wrap

1.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 Clipboard Toggle word wrap

1.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 Clipboard Toggle word wrap
注記

replica フィールドが設定されていない場合、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 Clipboard Toggle word wrap
注記

replica フィールドが設定されていない場合、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 Clipboard Toggle word wrap
注記

replica フィールドが設定されていない場合、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 Clipboard Toggle word wrap
注記

replica フィールドが設定されていない場合、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
Copy to Clipboard Toggle word wrap

検証

  1. 以下のコマンドを入力してデプロイメントを確認します。

    $ oc get dc/apicast-staging -o yaml
    Copy to Clipboard Toggle word wrap
    $ oc get dc/apicast-production -o yaml
    Copy to Clipboard Toggle word wrap
  2. 環境変数が含まれていることを確認します。

    # apicast-staging
    - name: APICAST_SERVICE_CACHE_SIZE
       value: '10'
    Copy to Clipboard Toggle word wrap
    # apicast-production
    - name: APICAST_SERVICE_CACHE_SIZE
       value: '20'
    Copy to Clipboard Toggle word wrap
注記

APIManager カスタムリソース定義 (CRD) にオプションのフィールドを追加することで、APIcast が内部キャッシュに保存するサービスの数を指定できます。replica フィールドが設定されていない場合、Operator はレプリカを調整しません。これにより、HorizontalPodAutoscaler コントローラーなどのサードパーティーコントローラーがレプリカを管理できるようになります。また、デプロイメントオブジェクト上で手動で更新することもできます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat