このトピックでは、ベースパス ルーティングについて説明します。ベースパス ルーティングを使用すると、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.jsonruntimeコンポーネントをクラスタに適用します。apigeectl apply -f overrides/overrides-dev2.yaml -c runtime
- プロキシを呼び出して、設定をテストします。
curl https://apitest.mydomain.net/foo4
https://apitest.mydomain.net/foo4への API 呼び出しを受信した場合、ハイブリッドは、ルーティング先を環境dev2だと判断します。