容器化是應用程式現代化的常見方法。 您可以考慮針對進階工作負載使用 Azure Kubernetes Service,或針對簡單的容器工作負載使用「Azure 容器執行個體」,例如簡單的 Web 應用程式。 本文著重於在「應用程式閘道」作為防火牆時,在「容器執行個體」實作基礎結構層級無伺服器自動化。
我們將從常見案例開始。 若要保護 Azure 容器執行個體,您可以在「Azure 容器執行個體」中使用容器群組。 您可以使用容器群組,在虛擬網路中部署 Azure 容器執行個體,讓這些容器可以透過 Azure 私人端點存取其他私人資源或其他 Azure 服務。 對於託管 Web 應用程式的客戶,通常會使用像「Azure 應用程式閘道」這樣的 Web 應用程式防火牆來攔截進入的流量,並使用「Azure 容器執行個體」作為後端集區。 本文是絕佳的起點:公開容器群組的靜態 IP 位址。
使用非靜態私人 IP 位址作為後端集區是這種方法的一個潛在挑戰。 私人 IP 可能會在維護期間輪替,要求雲端管理員手動重新設定後端集區。 如果已新增用於縮放的新容器,系統管理員也需要進行重新設定,以確保流量會路由至正確的後端集區。 容器群組不支援活躍度探查和整備度探查,因此更難識別工作負載停機時間。
本文探討透過採用 Application Insights 和「Azure 監視器」來監視及使用 Azure Functions 執行私人 IP 自動輪替來解決這些常見問題的增強功能。 此方法可改善工作負載的備援。
潛在使用案例
此架構最適合:
- 無伺服器部署。
- 使用自動化進行雲端原生工作負載的最小作業。
- 不需要進階容器協調流程的簡單容器工作負載。
- 具有自動重新設定的高備援面向外部工作負載。
- 需要存取私人資源的容器工作負載,例如 Azure 私人端點所公開的容器工作負載。
架構
下載此架構的 Visio 檔案。
資料流程
第 1 部分:典型的 Web 應用程式流量流程
1a. 「應用程式閘道」具有 Web 應用程式防火牆功能,非常適合在公用流量到達後端工作負載之前在前端進行攔截。 「應用程式閘道」公開公用 IP 位址,因此「Azure DDoS 保護」提供另一層保護。
1b. 「應用程式閘道」的後端集區會設定為容器群組中 Azure 容器執行個體的私人 IP 位址。 容器群組中的 Azure 容器執行個體未隨附完整網域名稱 (FQDN),因此必須使用 IP 位址。
1c. 「Azure 容器執行個體」中的容器可以透過私人連結取用私人資源,例如 Azure Cosmos DB。
第 2 部分:自動化的增強功能
2a. 「應用程式閘道」包含狀況良好的主機計數計量,可讓您作為 Azure 容器執行個體的活躍度探查,因為「容器執行個體」中的容器群組不支援活躍度或整備度探查。
2b. 在容器中使用 Application Insights 收集其他計量,包括心跳,可傳送至 Application Insights,以透過自訂執行緒進行監視。
2c. 您可以根據步驟 2a 和 2b 中所定義的閾值層級來設定警示。 例如,假設您的系統有三個容器執行個體以後端集區的形式執行。 您可以設定警示,以在狀況良好的主機計數小於 3 時觸發。 在警示規則的動作群組中,您可以使用 Azure 函式作為動作類型來觸發自訂動作。
2d. 在 Azure 函式中,Azure SDK 可用來取得現有容器執行個體的組態,並重新建立相同的執行個體。 此函式是由步驟 2c 中所定義的警示所觸發。 視設定的複雜度而定,此函式可能需要很長的時間才能執行。 Azure 函式可能會逾時,因此您可以使用 Azure Durable Functions 來處理長時間執行程序並取得狀態更新。
元件
自動化
- Azure Durable Functions:不同於 Azure Functions,Durable Functions 是具狀態的,並支援數個具狀態的工作流程模式。 在此範例中,使用監視模式。
- Azure SDK:Azure SDK 是程式庫的集合,您可以使用慣用的程式設計語言來與 Azure 服務互動。 SDK 可讓您更靈活地整合執行自動化的邏輯。
監視
- Azure 監視器計量:「Azure 監視器」的這項功能會從 Azure 服務收集預先定義的數值資料。
- 動作群組:動作群組是資源擁有者所定義的通知喜好設定集合。 您可以根據觸發的警示來定義通知通道和動作。
網路
- Azure DDoS 保護:「Azure DDoS (基本) 保護」是免費的,而且在所有公用 IP 上都已啟用。 「Azure DDoS 網路保護」提供更多功能,例如將記錄擷取至其他位置,而且能夠參與「DDoS 保護快速回應小組」。
- Azure 應用程式閘道:「Azure Web 應用程式防火牆」保護公用應用程式免於 SQL 插入式攻擊和 XSS 攻擊等惡意探索。
- Azure Private Link:Azure Private Link 可透過 Microsoft 骨幹上的私人端點來存取 Azure PaaS 服務,以進一步增強網路存取安全性。
申請
- Azure 容器執行個體:「Azure 容器執行個體」順暢地執行容器映像,而不需要您設定另一個基礎結構。 您應該考慮 Azure Kubernetes Service (AKS) 以進行進階容器協調流程。
- Azure Cosmos DB:Azure Cosmos DB 是完全受控的 NoSQL 資料庫,支援 SQL、Cassandra 和 MongoDB 等多個平台。
- Azure 金鑰保存庫:作為安全性最佳做法,開發人員不會將連接字串以純文字形式儲存在應用程式的原始程式碼中。 「Azure 金鑰保存庫」可作為儲存秘密的中心位置,並提高了安全性。 應用程式可以擷取必要的金鑰,並提高安全性。
替代項目
上述案例會更新「應用程式閘道」的後端集區。 或者,您可以使用 Azure 私人 DNS 區域作為「應用程式閘道」的目標後端,並使用 Azure 函式來更新記錄,而不是在「應用程式閘道」上進行變更。 此替代方式可減少部署時間。 另一方面,「應用程式閘道」計量無法識別主機計數,因為 DNS 會將其抽象化。 因此,此自動化必須透過 Application Insights 或「Azure 監視器」等應用程式監視解決方案直接觸發。
Azure 提供多個選項來裝載容器型工作負載,例如 Azure Kubernetes Service、Azure App Service 和 Azure Container Apps。
Azure Kubernetes Service 提供進階容器協調流程和網路功能,例如服務資源,此資源無法在「容器執行個體」中使用。 此參考架構可解決這項需求。
App Service 也可以裝載容器工作負載,且 App Service 環境 可讓開發人員在「Azure 虛擬網路」中部署 App Service。 相較於 App Service,「容器執行個體」的定價結構讓小型工作負載更具吸引力。
「Azure 容器應用程式」是以 Kubernetes 為基礎的無伺服器容器平臺。 它可讓開發人員建置 Kubernetes 樣式的應用程式,而不需要直接存取所有原生 Kubernetes API 和叢集管理。 「Azure 容器應用程式」會根據最佳做法提供完全受控的體驗。
考量
可用性
因為容器群組中不支援活躍度和整備度探查,因此建議您使用「Azure 監視器計量」和 Azure Application Insights 進行監視。 容器健康情況和執行時間並不是確定系統是否端到端運作的確定性方法。
Operations
如果「容器執行個體」失敗,或容器群組的私人 IP 變更,則會使用 Azure Durable Functions 重新設定基礎結構。 如文件中所述,佈建程序的時間稍長。 如果容器未及時就緒,使用者可能會遇到最短停機時間。
此架構會新增一個復原層。 但仍建議您在應用程式中設定監視,並監視平台失敗的 Azure 狀態。
延展性
建立容器時會定義 CPU 和記憶體需求,因此您將無法直接執行垂直縮放。 您可以將容器新增至容器群組,以水平縮放。 但請注意,容器群組中的每個容器都會取用一個私人 IP,因此限制將取決於已佈建的子網路大小。
縮放的另一個重要考量是應用程式的狀態。 該應用程式必須在本機或使用 Azure Cache for Redis 等外部服務來處理狀態,以確保隨選縮放不會在應用程式中造成資料遺失。
安全性
如果組態未正確設定,將 PaaS 部署至虛擬網路 (VNet 插入) 的能力並不會提高安全性。 VNet 插入可讓系統管理員有更多的網路控制,提供更緊密的網路安全性群組和未公開的資源使用等優點。
Private Link 會將私人端點投影到虛擬網路,讓應用程式可以直接透過私人 IP 位址存取 Azure PaaS。 同時,系統管理員可以進一步控制誰可以存取相關的 Azure PaaS。
如果您在 Azure Container Registry 中儲存容器映射,您可以啟用適用於容器登錄的 Microsoft Defender 以執行容器映像弱點掃描。
定價
使用 Azure 定價計算機估算 Azure 資源的成本。
請參閱上述實作的這個範例。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主要作者:
- Marcus Tee | 技術策略 & 藍圖
下一步
相關資源
瀏覽我們的架構:
相關指引: