本主題將說明基本路徑轉送。您可以透過基本路徑轉送功能,設定及管理 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。