環境會為執行 API 代理程式提供隔離的背景或「沙箱」。 您可以在單一機構中建立多個環境。
以下程式碼顯示覆寫設定的範例,其中定義了多個環境。
namespace: my-namespace org: my-organization ... envs: - name: test serviceAccountPaths: synchronizer: "your_keypath/synchronizer-manager-service-account.json udca: "your_keypath/analytic-agent-service-account.json - name: prod serviceAccountPaths: synchronizer: "your_keypath/synchronizer-manager-service-account.json udca: "your_keypath/analytic-agent-service-account.json ...
假設有一個 Proxy 已部署至環境 test,其基本路徑為 /foo1
。您可以呼叫 Proxy,如下所示:
curl -k https://api.example.com/foo1
當這項呼叫命中 ingress 時,ingress 會知道要將其傳送至與 test
環境相關聯的訊息處理工具,以便處理要求。
同樣地,如果 foo1
也部署至 prod
環境,您可以向主機別名 apiprod.mydomain.net
提出類似的 Proxy 要求:
curl -k https://apiprod.example.com/foo1
然後由 ingress 將呼叫轉送至與該主機相關聯的 MP。
反模式:將所有 Proxy 部署至單一混合式環境。
最佳做法:建立多個環境,並在每個環境中部署有限數量的 Proxy。
限制 Proxy 部署數量
就混合型而言,由於許多環境可共用相同的虛擬主機 (如環境群組中所定義),因此您必須仔細思考如何管理對任何特定環境的 Proxy 部署作業。在混合式中,最佳做法是建立多個環境,並在每個環境中部署有限數量的 Proxy。
您應該在環境中部署多少 Proxy?這個問題沒有固定答案,不過下表提供一般指引,說明為何限制部署至各環境的 Proxy 數量,以及管理 Proxy 部署作業時需要考量的事項:
需要考量的事項 | 說明 |
---|---|
訊息處理器啟動時間 | 訊息處理器 (MP) 啟動所需的時間與部署至該 MP 的 Proxy 數量之間有直接關聯。在自動調整的 Kubernetes 環境中,啟動時間增加可能會造成問題。部署至 MP 的 Proxy 越多,如果需要縮放或重建,MP 啟動所需的時間就會越長。 |
擴大效能 | 如果您在環境中部署了多個 Proxy,其中一個 Proxy 獲得大量流量,因此經常自動調整規模,那麼該環境中的所有 Proxy 都會隨之調整。使用單一高流量 Proxy 來擴充多個 Proxy 的效能效果可能會出現問題。 |
吵雜的鄰居 | 如果您在同一個環境中部署了多個 Proxy,其中一個 Proxy 發生當機,則在 MP 重新啟動時,環境中的所有 Proxy 都會關閉。限制部署至環境的 Proxy 數量,即可將單一 Proxy 當機的影響降至最低。 |
環境群組和虛擬主機
環境群組可讓您將環境分組。每個群組中的環境都會共用相同的主機名稱。您可以依功能、主機名稱位址、區域 (如果是實作多區域混合式安裝) 或任何其他自選指標,將環境分組。
由於路由是由環境群組主機名稱、API 代理程式基礎路徑和環境組合管理,因此每個虛擬主機只需列出環境群組名稱和任何適當的憑證即可。
以下程式碼為覆寫設定範例,其中定義了多個虛擬主機。請注意,虛擬主機的名稱必須是環境群組的名稱。
gcp: region: us-central1 projectID: hybrid-example k8sCluster: name: apigee-hybrid region: us-central1 org: hybrid-example contractProvider: https://us-apigee.googleapis.com # if using data residency instanceID: "my_hybrid_example" virtualhosts: - name: group-1 # the name of an environment group sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key virtualhosts: - name: group-2 sslCertPath: ./certs/keystore.pem sslKeyPath: ./certs/keystore.key ...