設定基本路徑轉送

本主題將探討基本路徑轉送。您可以透過基本路徑路由設定及管理 Apigee Hybrid 如何將 API Proxy 呼叫路由至正確的環境。

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

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

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

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

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

  • 將底層路徑為 /foo1 的 Proxy foo1 轉送至 dev1
  • 將底層路徑為 /foo2 的 Proxy foo2 傳送至 dev2

假設用戶端呼叫這個 API:https://apitest.mydomain.net/foo1。請注意,這個路徑 (或為要求產生的主機標頭) 中沒有任何資訊,可告知混合式環境要將呼叫路徑導向哪個環境。foo1 Proxy 是否已部署至 dev1dev2?單從要求網址來看,無法判斷。您必須將每個基本路徑明確對應至一或多個環境。

如要指定 Proxy 呼叫應轉送至哪個環境,請將 paths.uri.prefixes 屬性新增至覆寫檔案中的 envs 屬性,如下列範例所示:

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),Ingress 路由器就知道要將呼叫傳送至何處。系統會知道 /foo1 Proxy 已部署至 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 呼叫,Hybrid 會知道要將其路由至環境 dev2