環境について

環境は、API プロキシを実行するための分離されたコンテキスト、すなわち「サンドボックス」を提供します。1 つの組織に複数の環境を作成できます。

多くのユーザーは、基本インストール中にテスト用の環境を 1 つだけセットアップします。しかし、おすすめの方法は、複数の環境を作成して各環境に限られた数のプロキシをデプロイすることです。

仮想ホストと環境について

Apigee Hybrid では、Istio Ingress ゲートウェイを使用して受信 API トラフィックを処理します。MART サービスとランタイム サービスはどちらも、クラスタ外に公開される接続を Istio Ingress ゲートウェイで管理するように構成されています。つまり、たとえば API プロキシへのすべての HTTP リクエストと HTTPS リクエストはまず Istio Ingress ゲートウェイで処理されます。

Hybrid では、1 つ以上の環境を作成し、各環境にホスト エイリアスを割り当てます。ホスト エイリアスは DNS 名です。その DNS 名宛ての受信トラフィックは、Ingress によって対応する環境にルーティングされます。内部では、各環境は単一の Message Processor に割り当てられており、その Message Processor がプロキシへのリクエストの処理、ポリシーの適用、ターゲット サービスとの間のトラフィックのルーティングを行います。したがって、受信リクエストがどの Message Processor に送られるかはホスト エイリアスによって決まります。

次のコードは、複数の環境が定義されている構成の例を示します(このような構成はオーバーライド ファイルに含まれます)。環境 dev1prod1 のホスト エイリアスが異なることに注意してください。

    envs:
      - name: dev1
        hostAlias: "apitest.mydomain.net"
        ...

      - name: prod1
        hostAlias: "apiprod.mydomain.net"
        ...
    

/foo1 というベースパスを持つプロキシが環境 dev1 にデプロイされていると仮定します。そのプロキシは次のように呼び出すことができます。

curl -k https://apitest.mydomain.net/foo1

この呼び出しが Ingress に到着したとき、Ingress はその呼び出しの送信先が dev1 環境に関連付けられた Message Processor であることを知っており、リクエストはその MP で処理されます。

同様に、foo1prod1 環境にもデプロイされている場合は、ホスト エイリアス apiprod.mydomain.net に対して次のようなプロキシ リクエストを発行できます。

curl -k https://apiprod.mydomain.net/foo1

この呼び出しは、Ingress によってそのホストに関連付けられた MP にルーティングされます。

要約すると、環境を作成する際はそれぞれ固有のホスト エイリアスを割り当てる必要があります。各環境は単一の Message Processor に対応付けられており、リクエストがどの Message Processor に送られるかはホスト エイリアスによって決まります。

複数の環境で同じホスト エイリアスを共有できる

Apigee Hybrid では、複数の環境を作成してユーザーが自由に管理できます。たとえば、dev1dev2dev3 のように開発環境を複数作成し、各環境に共通のホスト エイリアスを対応付けることができます。さらに、各環境に複数のプロキシをデプロイすることも可能です。

アンチパターン: すべてのプロキシを 1 つの Hybrid 環境にデプロイすることは避けてください。

ベスト プラクティス: 複数の環境を作成し、各環境に限られた数のプロキシをデプロイします。プロキシ呼び出しを正しい環境にルーティングする手法のことを「ベースパス ルーティング」と呼びます。

たとえば、次の構成では、環境 dev1 と dev2 が同じホスト エイリアスを共有しています。

envs:
      - name: dev1
        hostAlias: "apitest.mydomain.net"
        ...
      - name: dev2
        hostAlias: "apitest.mydomain.net"
        ...
    

特定のプロキシ ベースパスを特定の環境にマッピングするには、ベースパス ルーティングという構成手法を使用する必要があります。詳細については、ベースパス ルーティングをご覧ください。

このセクションでは、Hybrid 環境を追加する方法と削除する方法について説明します。

新しい環境を作成する

新しい環境を作成する前に、TLS 鍵と証明書を生成し、新しい環境のホスト エイリアスに対して DNS を設定する必要があります。

新しい環境を作成するには:

  1. overrides.yaml ファイルをエディタで開きます(まだ開いていない場合)。
  2. envs 配列に新しい環境を追加します。

    次の例は、複数の環境を作成する場合の overrides.yaml 構文を示します。

    namespace: namespace
        org: apigee-organization-name
        envs:
          - name: environment-1-name
            sslCertPath: "path_to_cert_1"
            sslKeyPath: "path_to_key_1"
            hostAlias: "domain_name_1"
          - name: environment-2-name
            sslCertPath: "path_to_cert_2"
            sslKeyPath: "path_to_key_2"
            hostAlias: "domain_name_2"
        ...

    各環境には、固有の名前、ホスト エイリアス、鍵 / 証明書ファイルが必要です。

  3. 新しい環境に対して次のプロパティの値を設定します。

    プロパティ
    envs.name

    必須。環境のプログラム上の名前。この値は API プロキシへのリクエスト URL の一部になります。

    envs.sslCertPath
    envs.sslKeyPath

    基本的なクイックスタート インストールでは、環境の証明書 / 鍵のペアに自己署名証明書を使用できます。自己署名証明書 / 鍵のペアは、本番前または本番環境の構成には適していません。自己署名証明書 / 鍵のペアをまだ生成していない場合は、自己署名 TLS 認証情報を生成するの手順に従ってください。

    本番前環境や本番環境など、その他ほとんどのインストール環境では、認証済みの証明書 / 鍵のペアを使用することをおすすめします。認証済みの証明書 / 鍵のペアの生成については、TLS 認証情報を取得する: 例をご覧ください。

    envs.hostAlias 必須。

    サーバーの DNS 名。たとえば、foo-test.mydomain.com とします。DNS 名がない場合は、ワイルドカード('*')を使用できます。ワイルドカードを使用する場合は、istio-ingressgateway の外部 IP を使用できます。この IP を確認するには、インストールの完了後に kubectl get services -n namespace を呼び出します。

    環境が複数ある場合は、各環境に固有のホスト エイリアス名を使用する必要があります。たとえば、foo-test.mydomain.comfoo-prod.mydomain.com とします。

    詳細については、ホスト エイリアスをご覧ください。

    次の例は、testprod の 2 つの環境を含むサンプル overrides.yaml ファイルを示します。

    namespace: my-namespace
        org: my-organization
        envs:
          - name: test
            sslCertPath: "/my-dir/test-ingress-cert.crt"
            sslKeyPath: "/my-dir/test-ingress-key.key"
            hostAlias: "foo-test.mydomain.com"
          - name: prod
            sslCertPath: "/my-dir/prod-ingress-cert.crt"
            sslKeyPath: "/my-dir/prod-ingress-key.key"
            hostAlias: "foo-prod.mydomain.com"
        ...
  4. 変更を保存します。

    まだ完了ではありません。Hybrid UI で新しい環境を追加する必要があります。

  5. ブラウザを開き、Hybrid UI に移動します。
  6. Hybrid UI で新しい環境を作成するの手順に従って新しい環境を追加します。

環境を削除する

環境を削除するには:

  1. overrides.yaml ファイルをエディタで開きます(まだ開いていない場合)。
  2. 削除する環境を envs 配列から削除します。
  3. 変更を保存します。

    まだ完了ではありません。Hybrid UI で環境を更新する必要があります。

  4. ブラウザを開き、Hybrid UI に移動します。
  5. Hybrid UI で既存の環境を削除するの手順に従って環境を削除します。

ホスト エイリアス

環境が複数ある場合は、各環境に固有の DNS 名が必要です。たとえば、testprod の環境にそれぞれ foo-test.mydomain.comfoo-prod.mydomain.com という DNS 名を付けます。

DNS 名とホスト エイリアスとのマッピングは Hybrid 構成で行います。Hybrid におけるホスト エイリアスの概念は、Apigee Edge の仮想ホストに似ています。たとえば、ホスト エイリアスが foo-test.mydomain.com の場合、/helloworld という API プロキシの呼び出しには https://foo-test.mydomain.com/helloworld のような URL を使用できます。

TLS 鍵と証明書

新しい環境を作成するとき、その環境の構成で TLS 鍵と証明書を提供する必要があります。この鍵 / 証明書は、Ingress ゲートウェイとの安全な通信を確立するために使用されます。

テスト目的では、自己署名証明書 / 鍵のペアを使用できます。

自己署名証明書 / 鍵のペアを生成するには:

  1. Ingress 用の鍵と証明書を保存するディレクトリを作成します。
  2. 次のコマンドを実行して鍵と証明書を生成します。
    openssl genrsa -des3 -out /my-dir/server.pass.key 2048
          openssl rsa -in /my-dir/server.pass.key -out /my-dir/ingress-server.key
          openssl req -nodes -new -key /my-dir/ingress-server.key -out /my-dir/ingress-server.csr
          openssl x509 -req -sha256 -days 365 -in /my-dir/ingress-server.csr -signkey /my-dir/ingress-server.key -out /my-dir/ingress-server.crt