2.7. operator を使用した OpenShift への 3scale のデプロイメント設定オプション

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

前提条件

2.7.1. Embedded APIcast のプロキシーパラメーターの設定

3scale の管理者は、Embedded APIcast ステージングおよび実稼働環境用のプロキシーパラメーターを設定することができます。本セクションでは、APIManager カスタムリソースでプロキシーパラメーターを指定するための参照情報を提供します。つまり、3scale Operator (APIManager カスタムリソース) を使用して OpenShift に 3scale をデプロイします。

これらのパラメーターは、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

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

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

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

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

    oc create secret generic custom-env-1 --from-file=./env1.lua

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

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

    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

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

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

    oc apply -f apimanager.yaml

次のステップ

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

  • 推奨されるオプションは、別の名前でシークレットを作成し、APIManager カスタムリソースフィールド customEnvironments[].secretRef.name を更新することです。Operator はローリング更新をトリガーし、更新されたカスタム環境をロードします。
  • あるいは、spec.apicast.productionSpec.replicas または spec.apicast.stagingSpec.replicas を 0 に設定して既存のシークレットを更新してから、spec.apicast.productionSpec.replicas または spec.apicast.stagingSpec.replicas を以前の値に設定して APIcast をも再デプロイし直します。

2.7.3. 3scale operator によるカスタムポリシーの注入

Embedded APIcast を使用する 3scale インストールでは、3scale operator を使用してカスタムポリシーを注入できます。Embedded APIcast は、Managed APIcast または Hosted APIcast とも呼ばれます。カスタムポリシーを注入すると、ポリシーコードが APIcast に追加されます。次に、以下のいずれかを使用して、カスタムポリシーを API 製品のポリシーチェーンに追加できます。

  • 3scale API
  • Product カスタムリソース

3scale 管理ポータルを使用してカスタムポリシーを製品のポリシーチェーンに追加するには、カスタムポリシーのスキーマを CustomPolicyDefinition カスタムリソースに登録する必要もあります。カスタムポリシー登録は、管理ポータルを使用して製品のポリシーチェーンを設定する場合にのみ必要です。

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

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

  2. カスタムポリシーを含む各シークレットを参照する APIManager カスタムリソースを定義します。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

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

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

    oc apply -f apimanager.yaml

次のステップ

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

  • 推奨されるオプションは、別の名前でシークレットを作成し、APIManager カスタムリソース customPolicies セクションを更新して新しいシークレットを参照することです。Operator はローリング更新をトリガーし、更新されたカスタムポリシーをロードします。
  • あるいは、spec.apicast.productionSpec.replicas または spec.apicast.stagingSpec.replicas を 0 に設定して既存のシークレットを更新してから、spec.apicast.productionSpec.replicas または spec.apicast.stagingSpec.replicas を以前の値に設定して APIcast をも再デプロイし直します。

2.7.4. 3scale operator を使用した OpenTracing の設定

Embedded APIcast を使用する 3scale インストールでは、3scale operator を使用して OpenTracing を設定できます。OpenTracing は、ステージング環境または実稼働環境用または両方の環境で設定することができます。OpenTracing を有効にすると、APIcast インスタンスに関してより多くの洞察を得て、可観測性を向上できます。

前提条件

手順

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

    oc create secret generic myjaeger --from-file myjaeger.yaml
  3. OpenTracing 属性を指定する APIManager カスタムリソースを定義します。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
  4. OpenTracing を設定する APIManager カスタムリソースを作成します。たとえば、APIManager カスタムリソースを apimanager1.yaml ファイルに保存した場合は、以下のコマンドを実行します。

    oc apply -f apimanager1.yaml

次のステップ

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

2.7.5. 3scale operator を使用した Pod レベルでの TLS の有効化

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

前提条件

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

手順

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

    oc create secret tls mycertsecret --cert=server.crt --key=server.key

    この設定は、APIManager CRD のシークレット参照を公開します。シークレットを作成してから、以下のように APIManager カスタムリソースでシークレットの名前を参照します。

    • 実稼働: APIManager CR は .spec.apicast.productionSpec.httpsCertificateSecretRef フィールドの証明書を公開します。
    • ステー個m技: 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. production で有効にする場合は、以下の YAML 定義を設定します。

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

      spec:
        apicast:
          stagingSpec:
            httpsPort: 8443
            httpsVerifyDepth: 1
            httpsCertificateSecretRef:
              name: mycertsecret
  7. Create をクリックします。

2.7.6. 評価用デプロイメントの概念実証

以降のセクションで、3scale の評価用デプロイメントの概念実証に適用される設定オプションを説明します。このデプロイメントでは、デフォルトとして内部データベースが使用されます。

重要

外部データベースの設定は、実稼働環境向けの標準デプロイメントオプションです。

2.7.6.1. デフォルトのデプロイメント設定

  • コンテナーには、Kubernetes によるリソースの制限およびリクエスト が適用されます。

    • これにより、最低限のパフォーマンスレベルが確保されます。
    • また、外部サービスおよびソリューションの割り当てを可能にするために、リソースを制限します。
  • 内部データベースのデプロイメント
  • ファイルストレージは、永続ボリューム (PV) がベースになります。

    • ボリュームの 1 つには、読み取り、書き込み、実行 (RWX) アクセスモードが必要です。
    • OpenShift は、リクエストに応じてこれらを提供するように設定されている必要があります。
  • MySQL を内部リレーショナルデータベースとしてデプロイします。

デフォルトの設定オプションは、お客様による概念実証 (PoC) または評価用途に適しています。

1 つ、複数、またはすべてのデフォルト設定オプションを、APIManager カスタムリソースの特定フィールドの値で上書きすることができます。3scale operator では可能なすべての組み合わせが許可されますが、テンプレートでは固定のデプロイメントプロファイルが許可されます。たとえば、3scale operator を使用すると、評価モードおよび外部データベースモードで 3scale をデプロイすることができます。テンプレートでは、この特定のデプロイメント設定は許可されません。テンプレートは、最も一般的な設定オプションでしか利用することができません。

2.7.6.2. 評価モードでのインストール

評価モードでのインストールの場合、コンテナーには Kubernetes によるリソースの制限およびリクエスト が適用されません。以下に例を示します。

  • メモリーのフットプリントが小さい。
  • 起動が高速である。
  • ノートパソコンで実行可能である。
  • プリセールス/セールスでのデモに適する。
apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  wildcardDomain: lvh.me
  resourceRequirementsEnabled: false

関連情報

  • 詳細は、APIManager カスタムリソースを参照してください。

2.7.7. 外部データベースモードでのインストール

外部データベースモードでのインストールは、高可用性 (HA) が必須な場合や専用のデータベースを再利用する場合の実稼働環境での使用に適しています。

重要

3scale の外部データベースインストールモードを有効にすると、以下のデータベースがすべて外部化されます。

  • backend-redis
  • system-redis
  • system-database (mysqlpostgresql、または oracle)

3scale 2.8 以降は、以下のデータベースバージョンとの組み合わせでテストを行いサポートが提供されます。

データベースバージョン

Redis

5.0

MySQL

5.7

PostgreSQL

10.6

3scale をデプロイするために APIManager カスタムリソース を作成する前に、OpenShift シークレットを使用して以下に示す外部データベースの接続設定を提供する必要があります。

2.7.7.1. バックエンド Redis シークレット

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

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

2.7.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"
  NAMESPACE: ""
  MESSAGE_BUS_URL: "redis://system-redis-messagebus"
  MESSAGE_BUS_SENTINEL_HOSTS: "redis://sentinel-0.example.com:26379,redis://sentinel-1.example.com:26379, redis://sentinel-2.example.com:26379"
  MESSAGE_BUS_SENTINEL_ROLE: "master"
  MESSAGE_BUS_NAMESPACE: ""
type: Opaque

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

2.7.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

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

apiVersion: v1
kind: Secret
metadata:
  name: system-database
stringData:
  URL: "postgresql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
type: Opaque

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

注記
  • Oracle system ユーザーは、システム権限でコマンドを実行します。一部は、こちらの GitHub リポジトリー に詳細があります。テーブルがデータベースで初期化されると、Oracle Database のイニシャライザー で最新のものを実行できます。これらのリンクにリストされていない他のコマンドが存在する可能性があります。
  • スキーマ移行がある場合に、アップグレードするには system ユーザーが必要であるため、直前のリンクに含まれていない他のコマンドを実行することもできます。
  • 免責事項: この注記に含まれる外部の Web サイトへのリンクは、お客様の利便性のみを目的として提供しています。Red Hat はリンクの内容を確認しておらず、コンテンツまたは可用性について責任を負わないものとします。外部の Web サイトへのリンクを含めることは、Web サイトまたはそれらの法的主体、製品またはサービスについて Red Hat が承認したことを意味するものではありません。お客様は、外部サイトまたはコンテンツの使用 (または信頼) によって生じる損失または費用について、Red Hat が責任を負わないことに同意するものとします。

2.7.7.4. Zync データベースシークレット

zync データベースの設定において、HighAvailability が有効で、externalZyncDatabaseEnabled フィールドも有効になっている場合、ユーザーは 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

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

注記
  • highAvailability を有効化する場合、backend-redissystem-redis、および system-database シークレットを事前に作成する必要があります。
  • highAvailabilityexternalZyncDatabaseEnabled フィールドを一緒に有効にする場合は、zync データベースシークレットを事前に作成する必要があります。

    • system-database の場合、外部化するデータベースのタイプを 1 つのみ選択します。

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

バックエンド Redis、システム Redis、およびシステムデータベースが 3scale の外部になる場合、APIManager カスタムリソースでは highAvailabilitytrue に設定する必要があります。以下の例を参照してください。

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  wildcardDomain: lvh.me
  highAvailability:
    enabled: true

zync データベースが外部である場合、APIManager カスタムリソースでは highAvailabilitytrue に設定し、externalZyncDatabaseEnabledtrue に設定する必要があります。以下の例を参照してください。

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  wildcardDomain: lvh.me
  highAvailability:
    enabled: true
    externalZyncDatabaseEnabled: true

2.7.8. Amazon Simple Storage Service を使用した 3scale ファイルストレージ のインストール

以下の例で、永続ボリューム要求 (PVC) の代わりに Amazon Simple Storage Service (Amazon S3) を使用した 3scale ファイルストレージ について説明します。

3scale をデプロイするために APIManager カスタムリソースを作成する前に、OpenShift シークレットを使用して S3 サービスの接続設定を提供する必要があります。

2.7.8.1. Amazon S3 シークレット

注記

AWS S3 互換プロバイダーは、AWS_HOSTNAMEAWS_PATH_STYLE、および AWS_PROTOCOL オプションキーを使用して S3 シークレットで設定できます。詳細は S3 secret リファレンス を参照してください。

以下の例では、任意の シークレット 名を指定することができます。シークレット名が APIManager カスタムリソースで参照されるためです。

kind: Secret
metadata:
  creationTimestamp: null
  name: aws-auth
stringData:
  AWS_ACCESS_KEY_ID: 123456
  AWS_SECRET_ACCESS_KEY: 98765544
  AWS_BUCKET: mybucket.example.com
  AWS_REGION: eu-west-1
type: Opaque
注記

Amazon S3 リージョンおよび Amazon S3 バケット設定は、APIManager カスタムリソースに直接提供されます。Amazon S3 シークレット名は、APIManager カスタムリソースに直接提供されます。

最後に、3scale をデプロイするための APIManager カスタムリソースを作成します。

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  wildcardDomain: lvh.me
  system:
    fileStorage:
      simpleStorageService:
        configurationSecretRef:
          name: aws-auth

詳細は、APIManager SystemS3Spec を参照してください。

2.7.9. PostgreSQL のインストール

MySQL 内部リレーショナルデータベースがデフォルトのデプロイメントです。このデプロイメント設定を上書きして、代わりに PostgreSQL を使用することができます。

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  wildcardDomain: lvh.me
  system:
    database:
      postgresql: {}

関連情報

2.7.10. コンポーネントレベルでのコンピュートリソース要件のカスタマイズ

APIManager カスタムリソース属性を使用して、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:
      providerContainerResources:
        requests:
          memory: "111Mi"
          cpu: "222m"
        limits:
          memory: "333Mi"
          cpu: "444m"
  zync:
    databaseResources:
      requests:
        memory: "111Mi"
        cpu: "222m"
      limits:
        memory: "333Mi"
        cpu: "444m"

関連情報

コンポーネントレベルのカスタムリソース要件の指定方法についての詳細は、APIManager CRD reference を参照してください。

2.7.10.1. APIManager コンポーネントのデフォルトコンピュートリソース

APIManagerspec.resourceRequirementsEnabled 属性を true に設定すると、デフォルトのコンピュートリソースが APIManager コンポーネントに設定されます。

以下の表に、APIManager コンポーネントに設定された特定のコンピュートリソースのデフォルト値をまとめます。

2.7.10.1.1. CPU およびメモリーの単位

コンピュートリソースのデフォルト値の表に使用される単位について、以下のリストにまとめます。CPU およびメモリーの単位の詳細は、Managing Resources for Containers を参照してください。

リソースの単位について

  • m: ミリ CPU またはミリコア
  • Mi: メビバイト
  • Gi: ギビバイト
  • G: ギガバイト

表2.2 コンピュートリソースのデフォルト値

コンポーネント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-sphinx

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

50 m

150 m

40 Mi

80 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

2.7.11. コンポーネントレベルでのノードのアフィニティーおよび容認のカスタマイズ

APIManager カスタムリソース属性を使用して Red Hat 3scale API Management ソリューションの Kubernetes の アフィニティー および 容認 をカスタマイズし、インストールのさまざまな 3scale コンポーネントが Kubernetes ノードにスケジュールされる場所および方法をカスタマイズします。

以下の例では、バックエンドのカスタムノードのアフィニティーを設定します。また、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

関連情報

アフィニティーおよび容認に関連する属性の完全リストは、APIManager CDR を参照してください。

2.7.12. 調整

3scale をインストールしたら、3scale operator により、カスタムリソースからの特定パラメーターセットを更新してシステム設定オプションを変更することができます。変更は ホットスワップ により行われます。つまり、システムの停止やシャットダウンは発生しません。

APIManager カスタムリソース定義 (CRD) のパラメーターがすべて調整可能な訳ではありません。

調整可能なパラメーターのリストを以下に示します。

2.7.12.1. リソース

すべての 3scale コンポーネントに対するリソースの制限およびリクエスト

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  ResourceRequirementsEnabled: true/false

2.7.12.2. バックエンドレプリカ

バックエンド コンポーネントの Pod 数

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  backend:
    listenerSpec:
      replicas: X
    workerSpec:
      replicas: Y
    cronSpec:
      replicas: Z

2.7.12.3. APIcast レプリカ

APIcast ステージングおよび実稼働環境コンポーネントの Pod 数

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  apicast:
    productionSpec:
      replicas: X
    stagingSpec:
      replicas: Z

2.7.12.4. システムレプリカ

システム アプリケーションおよびシステム sidekiq コンポーネントの Pod 数

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  system:
    appSpec:
      replicas: X
    sidekiqSpec:
      replicas: Z

2.7.12.5. Zync レプリカ

Zync アプリケーションと que コンポーネントの Pod 数

apiVersion: apps.3scale.net/v1alpha1
kind: APIManager
metadata:
  name: example-apimanager
spec:
  zync:
    appSpec:
      replicas: X
    queSpec:
      replicas: Z