本主題將說明基本路徑轉送。您可以透過基本路徑轉送功能,設定及管理 Apigee Hybrid 將 API 代理呼叫轉送至正確環境的方式。
使用基本路徑轉送來管理 Proxy 部署作業
由於您可以在混合模式中將單一虛擬主機對應至多個環境,因此需要一種方法來指定哪個 Proxy 基礎路徑對應至哪個環境。
舉例來說,假設您想將兩個環境對應至相同的主機別名:apitest.mydomain.net
。您可以在覆寫檔案中建立下列設定,其中環境 dev1 和 dev2 都會對應至這個主機。例如:
envs: - name: dev1 hostAlias: "apitest.mydomain.net" ... - name: dev2 hostAlias: "apitest.mydomain.net" ...
假設您將 Proxy 部署至這些環境,您部署:
- 將具有基本路徑 /foo1 的 foo1 代理至 dev1
- 將具有 /foo2 基礎路徑的 foo2 代理至 dev2
假設用戶端呼叫這個 API:https://apitest.mydomain.net/foo1
。請注意,這個路徑 (或為要求產生的主機標頭) 中沒有任何內容會告知混合型應用程式要將呼叫轉送至哪個環境。foo1 Proxy 是部署至 dev1 還是 dev2?僅憑要求網址,我們無法判斷。您必須明確將每個基本路徑對應至一或多個環境。
如要指定要將 Proxy 呼叫導向至哪個環境,請在覆寫檔案的 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 ...
從現在開始,當 API 呼叫 (例如 https://apitest.mydomain.net/foo1
) 傳入時,入口路由器就會知道要將其傳送至何處。它知道 /foo1 代理程式已部署至 dev1 環境,且呼叫會路由至 dev1 的訊息處理器。
如果您傳送這項呼叫 https://apitest.mydomain.net/foo2
,系統也會將其導向 dev2
環境的 MP,依此類推。
總而言之,paths.uri.prefixes
設定可讓您在共用相同主機別名的多個環境中管理 Proxy 部署作業。
最佳做法:如要讓多個環境共用相同的主機別名,請使用基本路徑轉送。您可以透過基礎路徑轉送功能,限制部署至任何單一環境的 Proxy 數量。詳情請參閱「 限制 Proxy 部署數量」。
在相同網域中新增環境
本節說明如何在網域中新增環境。
在這種情況下,假設您已將環境 dev1
部署至叢集。在這個範例設定中,系統只允許 basepath 前置字串為 /foo1
的 Proxy:
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
的 Proxy: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
- 將 Proxy foo2 部署至 dev2 環境。
- 呼叫 Proxy 來測試設定。
curl https://apitest.mydomain.net/foo2
在現有環境中新增 Proxy 基礎路徑
如要在現有環境中新增基本路徑,只要為每個新基本路徑新增 prefixes
項目即可。舉例來說,如果您使用基礎路徑 /foo4 建立新的 Proxy,並想將其部署至名為 dev2 的環境,請按照下列步驟操作:
- 開啟包含 dev2 環境定義的覆寫檔案。
- 將
/foo4
基本路徑新增至paths.uri.prefixes
元素: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
- 呼叫 Proxy 來測試設定。
curl https://apitest.mydomain.net/foo4
如果
https://apitest.mydomain.net/foo4
收到 API 呼叫,混合式服務會知道要將其路由至環境dev2
。