このトピックでは、ベースパス ルーティングについて説明します。ベースパス ルーティングを使用すると、Apigee ハイブリッドが API プロキシの呼び出しを正しい環境にルーティングする方法を構成し、管理できます。
ベースパス ルーティングを使用してプロキシのデプロイを管理する
ハイブリッドでは 1 つの仮想ホストを複数の環境にマッピングできるため、どのプロキシ ベースパスがどの環境にマッピングされるかを指定する手段が必要です。
たとえば、2 つの環境を apitest.mydomain.net
という同じホスト エイリアスにマッピングする場合を考えます。その場合は、オーバーライド ファイルで次の構成を作成し、環境 dev1 と dev2 の両方をこのホストにマッピングします。次に例を示します。
envs: - name: dev1 hostAlias: "apitest.mydomain.net" ... - name: dev2 hostAlias: "apitest.mydomain.net" ...
ここで、これらの環境にプロキシをデプロイするとします。デプロイするプロキシは、次のとおりです。
- プロキシ foo1(ベースパスは /foo1)を dev1 にデプロイする
- プロキシ foo2(ベースパスは /foo2)を dev2 にデプロイする
クライアントが https://apitest.mydomain.net/foo1
API を呼び出すとします。このパス内(または、リクエストで生成されたホストヘッダー内)には、どの環境を呼び出しのルーティング先にするかをハイブリッドに伝える情報がないことにご注意ください。foo1 プロキシが dev1 または dev2 にデプロイされているかをリクエスト URL だけで判断することはできません。各ベースパスを 1 つ以上の環境に明示的にマッピングする必要があります。
プロキシ呼び出しのルーティング先となる環境を指定するには、次の例のように、オーバーライド ファイルの envs
プロパティに paths.uri.prefixes
プロパティを追加します。
gcpProjectID: example k8sClusterName: apigee-hybrid # Apigee org name. org: my-org envs: # Apigee environment name. - name: dev1 hostAlias: "apitest.mydomain.net" sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key serviceAccountPaths: synchronizer: ./service-accounts/example-apigee-synchronizer.json udca: ./service-accounts/example-apigee-udca.json paths: uri: prefixes: - /foo1 - name: dev2 hostAlias: "apitest.mydomain.net" sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key serviceAccountPaths: synchronizer: ./service-accounts/example-apigee-synchronizer.json udca: ./service-accounts/example-apigee-udca.json paths: uri: prefixes: - /foo2 ...
これで、Ingress ルーターが https://apitest.mydomain.net/foo1
のような API 呼び出しを受信したときに、その送信先を判断できます。/foo1 プロキシは dev1 環境にデプロイされているため、この呼び出しは dev1 の Message Processor にルーティングされます。
https://apitest.mydomain.net/foo2
の呼び出しが送信された場合も同様に、dev2
環境の MP にルーティングされます。
まとめると、paths.uri.prefixes
構成を使用することにより、同じホスト エイリアスを共有する複数の環境間でプロキシのデプロイを管理できます。
ベスト プラクティス: 複数の環境で同じホスト エイリアスを共有する場合は、ベースパス ルーティングを使用します。ベースパス ルーティングを使用すると、1 つの環境にデプロイするプロキシの数を抑えることができます。詳細については、プロキシ デプロイの数を制限するをご覧ください。
同じドメインに新しい環境を追加する
このセクションでは、新しい環境をドメインに追加する方法について説明します。
ここでは、環境 dev1
がすでにクラスタにデプロイされていることを前提としています。この構成例では、ベースパスの接頭辞に /foo1
を持つプロキシのみが許可されます。
gcpProjectID: example k8sClusterName: apigee-hybrid # Apigee org name. org: my-org envs: # Apigee environment name. - name: dev1 hostAlias: "apitest.mydomain.net" sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key serviceAccountPaths: synchronizer: ./service-accounts/example-apigee-synchronizer.json udca: ./service-accounts/example-apigee-udca.json paths: uri: prefixes: - /foo1 mart: hostAlias: "mart.apigee-hybrid-docs.net" serviceAccountPath: ./service-accounts/example-apigee-mart.json sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.key metrics: serviceAccountPath: ./service-accounts/willwitman-istio-25240157d44a.json
同じドメインを共有する別の環境を追加するには、次の手順に従います。
- 新しい環境構成を持つ新しいオーバーライド ファイルを作成します。たとえば、この構成では
dev2
という環境が作成されます。この環境では、パスの接尾辞に/foo2
を持つプロキシのみが許可されます。gcpProjectID: example k8sClusterName: apigee-hybrid # Apigee org name. org: my-org envs: # Apigee environment name. - name: dev2 hostAlias: "apitest.mydomain.net" sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key serviceAccountPaths: synchronizer: ./service-accounts/example-apigee-synchronizer.json udca: ./service-accounts/example-apigee-udca.json paths: uri: prefixes: - /foo2 mart: hostAlias: "mart.apigee-hybrid-docs.net" serviceAccountPath: ./service-accounts/example-apigee-mart.json sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.key metrics: serviceAccountPath: ./service-accounts/willwitman-istio-25240157d44a.json
- 次のコマンドを実行します(順序は問いません)。
apigeectl apply -f overrides/overrides-dev2.yaml -c udca
apigeectl apply -f overrides/overrides-dev2.yaml -c synchronizer
apigeectl apply -f overrides/overrides-dev2.yaml -c runtime
- プロキシ foo2 を dev2 環境にデプロイします。
- プロキシを呼び出して、設定をテストします。
curl https://apitest.mydomain.net/foo2
既存の環境に新しいプロキシ ベースパスを追加する
既存の環境に新しいベースパスを追加するには、新しいベースパスごとに prefixes
エントリを追加します。たとえば、ベースパス /foo4 を使用して新しいプロキシを作成し、それを dev2 という環境にデプロイする場合は、次の手順に従います。
- dev2 環境の定義を含むオーバーライド ファイルを開きます。
paths.uri.prefixes
要素に/foo4
ベースパスを追加します。gcpProjectID: example k8sClusterName: apigee-hybrid # Apigee org name. org: my-org envs: # Apigee environment name. - name: dev2 hostAlias: "apitest.mydomain.net" sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key serviceAccountPaths: synchronizer: ./service-accounts/example-apigee-synchronizer.json udca: ./service-accounts/example-apigee-udca.json paths: uri: prefixes: - /foo2 - /foo4 mart: hostAlias: "mart.apigee-hybrid-docs.net" serviceAccountPath: ./service-accounts/example-apigee-mart.json sslCertPath: ./certs/fullchain.pem sslKeyPath: ./certs/privkey.key metrics: serviceAccountPath: ./service-accounts/willwitman-istio-25240157d44a.json
runtime
コンポーネントをクラスタに適用します。apigeectl apply -f overrides/overrides-dev2.yaml -c runtime
- プロキシを呼び出して、設定をテストします。
curl https://apitest.mydomain.net/foo4
https://apitest.mydomain.net/foo4
への API 呼び出しを受信した場合、ハイブリッドは、ルーティング先を環境dev2
だと判断します。