設定基本路徑轉送

本主題將說明基本路徑轉送。您可以透過基本路徑轉送功能,設定及管理 Apigee Hybrid 將 API 代理呼叫轉送至正確環境的方式。

使用基本路徑轉送來管理 Proxy 部署作業

由於您可以在混合模式中將單一虛擬主機對應至多個環境,因此需要一種方法來指定哪個 Proxy 基礎路徑對應至哪個環境。

舉例來說,假設您想將兩個環境對應至相同的主機別名:apitest.mydomain.net。您可以在覆寫檔案中建立下列設定,其中環境 dev1dev2 都會對應至這個主機。例如:

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

假設您將 Proxy 部署至這些環境,您部署:

  • 將具有基本路徑 /foo1foo1 代理至 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

如要新增其他共用相同網域的環境,請按照下列步驟操作:

  1. 使用新的環境設定建立新的覆寫檔案。舉例來說,這個設定會建立名為 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
    
  2. 以任意順序執行下列指令:
    1. apigeectl apply -f overrides/overrides-dev2.yaml -c udca
    2. apigeectl apply -f overrides/overrides-dev2.yaml -c synchronizer
    3. apigeectl apply -f overrides/overrides-dev2.yaml -c runtime
  3. 將 Proxy foo2 部署至 dev2 環境。
  4. 呼叫 Proxy 來測試設定。
    curl https://apitest.mydomain.net/foo2

在現有環境中新增 Proxy 基礎路徑

如要在現有環境中新增基本路徑,只要為每個新基本路徑新增 prefixes 項目即可。舉例來說,如果您使用基礎路徑 /foo4 建立新的 Proxy,並想將其部署至名為 dev2 的環境,請按照下列步驟操作:

  1. 開啟包含 dev2 環境定義的覆寫檔案。
  2. /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
    
  3. runtime 元件套用至叢集:
    apigeectl apply -f overrides/overrides-dev2.yaml -c runtime
  4. 呼叫 Proxy 來測試設定。
    curl https://apitest.mydomain.net/foo4

    如果 https://apitest.mydomain.net/foo4 收到 API 呼叫,混合式服務會知道要將其路由至環境 dev2