編輯

共用方式為


使用 Azure 防火牆協助保護 Azure Kubernetes Service (AKS) 叢集

Azure 防火牆
Azure Kubernetes Service (AKS)
Azure Private Link
Azure 虛擬網路
Azure DevOps

本指南說明如何使用 Terraform 和 Azure DevOps,在中樞和輪輻網路拓撲中建立私人 AKS 叢集。 Azure 防火牆是用來檢查 Azure Kubernetes Service (AKS) 叢集的流量。 叢集是由一或多個與中樞虛擬網路對等互連的輪輻虛擬網路託管。

架構

此圖顯示一個架構,此架構的中樞和輪輻網路拓撲中具有私人 A K S 叢集。

下載此架構的 Visio 檔案

工作流程

Terraform 模組是用來部署具有四個子網路的新虛擬網路,子網路託管,:

  • AKS 叢集 (AksSubnet)。
  • VmSubnet:一個跳板虛擬機器和私人端點 (VmSubnet)。
  • 應用程式閘道 WAF2 (AppGatewaySubnet)。
  • Azure Bastion (AzureBastionSubnet)。

AKS 叢集會使用使用者定義的受控識別來建立其他資源,例如 Azure 中的負載平衡器和受控磁碟。 Terraform 模組可讓您選擇性地部署具有這些功能的 AKS 叢集:

AKS 叢集是由下列集區所組成:

  • 一個只託管重要系統 Pod 和服務的系統節點集區
  • 一個託管使用者工作負載和工件的使用者節點集區

虛擬機器是部署在託管 AKS 叢集的相同虛擬網路中。 當您將 AKS 部署為私人叢集時,系統管理員可以使用此 VM,透過 Kubernetes 命令行工具來管理叢集。 VM 的開機診斷記錄會儲存在 Azure 儲存體帳戶中。

Azure Bastion 主機透過 SSL 提供改進安全性 SSH 連線至跳板 VM 。 Azure 容器登錄可用來建置、儲存及管理容器映像和工件 (如 Helm 圖表)。

AKS 不提供內建解決方案,以保護叢集與外部網路之間的輸入和輸出流量。

基於這個理由,本文所呈現的架構包含 Azure 防火牆,使用 DNAT規則、網路規則和應用程式規則來控制輸入和輸出流量。 防火牆也會使用威脅情報型篩選來保護工作負載。 Azure 防火牆 和 Bastion 會部署到與託管私人 AKS 叢集之虛擬網路對等互連的中樞虛擬網路。 路由表和使用者定義路由會將輸出流量從 AKS 叢集路由傳送至 Azure 防火牆。

注意

強烈建議您使用 Azure 防火牆的進階版 SKU,因為它提供進階威脅防護

在 AKS 上執行的工作負載會使用金鑰保存庫做為密碼儲存區,以透過 Microsoft Entra Workload ID密碼儲存區 CSI 驅動程式,或 Dapr 擷取金鑰、憑證和密碼。 Azure 私人連結 可讓 AKS 工作負載透過虛擬網路中的私人端點存取 Azure PaaS 服務,例如 Azure Key Vault。

拓撲包含這些服務的私人端點和私人 DNS 區域:

託管 AKS 叢集的虛擬網路與前面所述的私人 DNS 區域之間存在虛擬網路連結。

記錄分析工作區是用來收集來自Azure 服務的診斷記錄和計量:

元件

  • Azure 防火牆是一項雲端原生的智慧型網路防火牆安全性服務,可為在 Azure 中執行的雲端工作負載提供威脅防護。 這是完全具狀態的防火牆即服務,具有內建的高可用性和不受限制的雲端延展性。 其同時提供東西向和南北向的流量檢查。

  • 容器登錄 是一項受控的私人 Docker 登錄服務,以開放原始碼 Docker Registry 2.0 為基礎。 您可以搭配使用 Azure 容器登錄與現有的容器開發與部署管線,或使用容器登錄工作在 Azure 中建置容器映像。

  • Azure Kubernetes Service 藉由將作業經常開支費用卸載至 Azure,來簡化在 Azure 中部署受控 Kubernetes 叢集的作業。 由於託管的 Kubernetes 服務,Azure 會處理重要的工作,例如健康情況監控和維護。 由於 Kubernetes 主機是由 Azure 管理,因此您只需要管理及維護代理程式節點。

  • Azure Key Vault 透過改進的安全性來儲存和控制對 API 金鑰、密碼、憑證和加密金鑰等機密的存取。 Key Vault 也可讓您輕鬆佈建、管理及部署公用和私人傳輸層安全性/安全通訊端層 (TLS/SSL) 憑證,以用於 Azure 和內部連線的資源。

  • Azure Bastion 是您可在虛擬網路內佈建的完全受控平台即服務 (PaaS)。 Azure Bastion 提供改進安全性的遠端桌面協定 (RDP) 和安全殼層 (SSH) 連線至虛擬網路中的 VM (透過 TLS,直接從 Azure 入口網站) 。

  • Azure 虛擬機器提供按需求、可縮放的計算資源,為您提供靈活有彈性的虛擬化。

  • Azure 虛擬網路是 Azure 私人網路的基本建置組塊。 虛擬網路透過改進的安全性讓Azure 資源 (例如 VM) 能夠安全地互相通訊,以及與網際網路和內部部署網路通訊。 Azure 虛擬網路與內部部署的傳統網路類似,但具有可縮放性、可用性和隔離性等 Azure 基礎結構的優勢。

  • 虛擬網路介面讓 Azure VM 能夠與網際網路、Azure 和內部部署資源通訊。 您可以將數張網路介面卡新增至一台 Azure VM,讓子 VM 擁有自己專用的網路介面裝置和 IP 位址。

  • Azure 受控磁碟提供 Azure 在 Azure VM 上管理的區塊層級儲存體磁碟區。 可以使用 Ultra 磁碟、進階固態硬碟 (SSD)、標準 SSD,和標準傳統硬碟 (HDD)。

  • Blob 儲存體是適用於雲端的物件儲存體解決方案。 Blob 儲存體經過最佳化,已能妥善儲存大量的非結構化資料。

  • 私人連結讓你能夠透過虛擬網路中的私人端點存取 Azure PaaS 服務 (例如 Blob 儲存體和 Key Vault)。 您也可以用它來存取您擁有,或由 Microsoft 合作夥伴所提供的 Azure 託管服務。

替代項目

您可以從 Azure Marketplace 使用第三方防火牆,而不是使用 Azure 防火牆。 如果您這麼做,您需負責正確設定防火牆,以檢查和允許或拒絕來自 AKS 叢集的輸入和輸出流量。

案例詳細資料

AKS 叢集是部署在虛擬網路上,可加以管理或自訂。 無論如何,叢集對虛擬網路外部的服務具有輸出相依性。 出於管理和操作目的,AKS 叢集節點需要存取與這些輸出相依性有關的特定埠和完整網域名稱 (FQDN)。 這包括存取您自己叢集的 Kubernetes API 伺服器、下載和安裝叢集元件,以及從 Microsoft容器登錄提取容器映像。 這些輸出相依性是使用 FQDN 定義,而且缺少靜態位址,因此無法使用網路安全性群組鎖定輸出流量。 因此,AKS 叢集預設具有不受限的輸出 (出口) 網際網路存取權,以允許節點和服務根據需要存取外部資源。

不過,在生產環境中,通常最好保護 Kubernetes 叢集免於資料外洩和其他不想要的網路流量。 所有網路流量 (包括傳入和傳出) 都應根據安全規則進行控制。 若要達到此目的,必須限制輸出流量,但同時仍允許存取必要的埠和位址,以進行例行叢集維護工作、輸出相依性和工作負載需求。

一個簡單的解決方案是使用可以根據網域名稱控制輸出流量的防火牆裝置。 防火牆會在受信任的網路與網際網路之間建立屏障。 使用 Azure 防火牆來根據目的地的 FQDN、通訊協定和埠來限制輸出流量,以提供更細緻的輸出流量控制。 它也允許列出與 AKS 叢集輸出相依性相關的 FQDN,這在網路安全性群組中是不可能的。 此外,部署到共用外圍網路的 Azure 防火牆上威脅情報型篩選條件可以控制輸入流量並增強安全性。 這種篩選條件可以產生警示並拒絕傳向和來自已知惡意 IP 位址和網域的流量。

您可以使用 Terraform 和 Azure DevOps,在中樞和輪輻網路拓撲中建立私人 AKS 叢集。 Azure 防火牆是用來檢查 Azure Kubernetes Service (AKS) 叢集的流量。 叢集是由一或多個與中樞虛擬網路對等互連的輪輻虛擬網路託管。

Azure 防火牆支援三種不同的 SKU,以滿足各種客戶使用案例和偏好:

  • 建議使用 Azure 防火牆 進階版 來來保護高度敏感的應用程式,例如付款處理。 其支援進階威脅防護功能,例如惡意程式碼和 TLS 檢查。
  • 對於尋求第 3 層到第 7 層防火牆且需要自動縮放以處理高達 30 Gbps 的高峰流量時段的客戶,建議使用 Azure 防火牆標準版。 它支援企業功能,如威脅情報、DNS 代理、自訂 DNS 和 Web 類別。
  • 對於輸送量需求小於 250 Mbps 的客戶,建議使用 Azure 防火牆基本版

下表顯示三個 Azure 防火牆 SKU 的功能。 如需詳細資訊,請參閱 Azure 防火牆定價

顯示三個 Azure 防火牆 SKU 功能的螢幕截圖

根據預設,AKS 叢集具有不受限制的連出網際網路存取。 此網路存取層級可讓在 AKS 叢集中執行的節點和服務視需要存取外部資源。 如果要限制輸出流量,則必須讓有限數量的埠和位址仍可存取,以維護良好的叢集維護工作。 為 AKS 等 Kubernetes 叢集的輸出流量提供安全性的最簡單方式,就是使用可根據網域名稱控制輸出流量的軟體防火牆。 Azure 防火牆可以根據目標的完整網域名稱 (FQDN) 限制輸出 HTTP 和 HTTPS 流量。 您還可以設定防火牆和安全性規則以允許這些必需的埠和位址。 如需詳細資訊,請參閱控制 AKS 中叢集節點的輸出流量

同樣地,您可以透過在部署到共用外圍網路的 Azure 防火牆上啟用威脅情報型篩選條件 來控制輸入流量並提高安全性。 這種篩選條件可以提供警示並拒絕傳向和來自已知惡意 IP 位址和網域的流量。

潛在使用案例

此情境可解決改進 Kubernetes 叢集輸入和輸出流量安全性的需求。

避免不對稱的路由

在此解決方案中,Azure 防火牆是部署到中樞虛擬網路,而私人 AKS 叢集是部署到輪輻虛擬網路。 Azure 防火牆會使用網路和應用程式規則集合來控制輸出流量。 在此情況下,您需要設定任何在 AKS 上執行之服務所公開的公用端點輸入流量,以透過 Azure 防火牆所使用的其中一個公用 IP 位址進入系統。

資料包到達防火牆的公用 IP 位址,但經由私有 IP 位址 (使用預設路由) 返回防火牆。 這是個問題。 若要避免這種情況,請為防火牆的公用IP位址建立另一個使用者定義的路由,如下圖所示。 到達防火牆公有 IP 位址的資料包是經由網際網路路由傳送。 此設定可避免使用到防火牆私有 IP 位址的預設路由。

若要將 AKS 工作負載的流量路由傳送至中樞虛擬網路中的 Azure 防火牆,您需要:

  • 建立路由表,並將路由表與託管叢集工作者節點的每個子網路產生關聯。
  • 建立使用者定義的路由,將 0.0.0.0/0 CIDR 的流量轉送至 Azure 防火牆的私有 IP 位址。 為下一個躍點類型指定虛擬設備

如需詳細資訊,請參閱教學課程:使用 Azure 入口網站部署和設定 Azure 防火牆

此圖顯示當您在工作負載前面使用 Azure 防火牆時,如何避免不對稱的路由。

如需詳細資訊,請參閱

使用 Azure DevOps 時,將工作負載部署至私人AKS 叢集

如果您使用 Azure DevOps,請注意,您無法使用 Azure DevOps Microsoft 託管的代理程式,將您的工作負載部署至私人 AKS 叢集。 它們無法存取其 API 伺服器。 若要將工作負載部署至私人 AKS 叢集,您必須在與私人 AKS 叢集相同的虛擬網路中,或在對等互連的虛擬網路中佈建和使用 Azure DevOps 自託管的代理程式 。 在後者的情況下,請務必在節點資源群組中 AKS 叢集的私人 DNS 區域與託管 Azure DevOps 自託管代理程式的虛擬網路之間建立虛擬網路連結。

您可以在虛擬機器上部署單一 WindowsLinux Azure DevOps 代理程式,或使用虛擬機器擴展集。 如需詳細資訊,請參閱 Azure 虛擬機器擴展集代理程式。 或者,您可以在 Azure 管線中設定自託管代理程式,以使用 Docker 在 Windows Server Core 容器 (適用於 Windows 主機) 或 Ubuntu 容器 (適用於 Linux 主機) 內執行。 將其部署為 Pod 且在您的私人 AKS 叢集中具有一或多個複製品 。 如需詳細資訊,請參閱

如果託管私人 AKS 叢集之節點集區的子網路已設定為透過路由表和使用者定義路由將輸出流量路由傳送至 Azure 防火牆,請務必建立適當的應用程式和網路規則。 這些規則必須允許代理程式存取外部網站,以在代理程式虛擬機器上下載並安裝像是 DockerKubectlAzure CLI, 和 Helm 等工具。 如需詳細資訊,請參閱在 Docker 中執行自託管代理程式

此圖顯示將工作負載部署至私人 AKS 叢集以搭配 Azure DevOps 使用。

或者,您可以在託管 AKS 叢集的虛擬網路或對等互連虛擬網路中設定受控 DevOps 集區 (MDP)。 受控 DevOps 集區可讓開發小組建立專為其特定需求量身打造的 Azure DevOps 代理程式集區。 它會實作安全性最佳做法、提供平衡成本和效能的選項、提供常見情境的路徑,以及大幅減少建立和維護自訂集區所花費的時間。 如需詳細資訊,請參閱 Microsoft 受控 DevOps 集區架構概觀

您可以從虛擬網路中的受控 DevOps 集區新增代理程式,讓 CI/CD 管線與私人 AKS 叢集的 Kubernetes API 伺服器互動,以及存取已停用公用網路存取的 Azure 容器登錄等 Azure 資源,而且只能透過相同虛擬網路或對等互連網路定義的私人端點來觸達。 如需詳細資訊,請參閱設定受控 DevOps 集區網路

在公用標準 Load Balancer 前面使用 Azure 防火牆

當 Azure 資源在 Terraform 控制項外部變更時,Terraform 模組中的資源定義會使用生命週期中繼引數來自訂動作。 ignore_changes 引數是用來指示 Terraform 忽略指定資源屬性,例如標記的更新。 Azure 防火牆原則資源定義包含生命週期區塊,以防止 Terraform 在建立、更新或刪除規則集合或單一規則時更新資源。 同樣地,Azure 路由表包含生命週期區塊,以防止 Terraform 在建立、刪除或更新使用者定義路由時更新資源。 這可讓您管理 Azure 防火牆原則的 DNAT、應用程式和網路規則,以及 Terraform 控制項外部的 Azure 路由表的使用者定義路由。

與本文相關的樣本包含 Azure DevOps CD 管線,說明如何使用在自託管代理程式上執行的 Azure DevOps 管線,將工作負載部署至私人 AKS 叢集。 此樣本會使用公用 Helm 圖表來部署 Bitnami redmine 專案管理 Web 應用程式。 下圖顯示樣本的網路拓撲:

顯示公用標準 Load Balancer 前面 Azure 防火牆的圖解。

以下是訊息流程:

  1. AKS 託管 Web 應用程式的要求會傳送至透過公用 IP 設定由 Azure 防火牆公開的公用 IP。 公用 IP 和公用 IP 設定都是專用於此工作負載。
  2. Azure 防火牆 DNAT 規則會將 Azure 防火牆公用 IP 和埠轉譯為節點資源群組中,AKS 叢集的 Kubernetes 公用標準 Load Balancer 中工作負載所使用的公用 IP 和埠。
  3. Load Balancer 會將要求傳送至在 AKS 叢集的其中一個代理程式節點上執行的其中一個 Kubernetes 服務 Pod。
  4. 回覆訊息會透過使用者定義的路由傳回原始呼叫端。 Azure 防火牆公用 IP 是位址前綴,而網際網路下一個躍點類型
  5. 根據預設使用者定義路由,任何工作負載起始的輸出呼叫會路由傳送至 Azure 防火牆的私有 IP 位址。 0.0.0.0/0 是位址前綴,而虛擬設備下一個躍點類型

如需詳細資訊,請參閱在 AKS 叢集的公用標準 Load Balancer 前面使用 Azure 防火牆

在內部標準 Load Balancer 前面使用 Azure 防火牆

在與本文相關的樣本中,ASP.NET Core 應用程式是由 AKS 叢集託管為服務,並前面是 NGINX 入口控制器NGINX 入口控制器 會透過內部 load balancer 公開其具有託管 AKS 叢集之輪輻虛擬網路中的私有 IP 位址。 如需詳細資訊,請參閱在 AKS 中建立內部虛擬網路的入口控制器。 當您部署 NGINX 入口控制器,或更一般的LoadBalancerClusterIP服務時,中繼資料區段中的 service.beta.kubernetes.io/azure-load-balancer-internal: "true"註釋會在節點資源群組底下建立名為kubernetes-internal 的內部標準 load balancer。 關於詳細資訊,請參閱將內部負載平衡器與 AKS 結合使用。 如下圖所示,測試 Web 應用程式會透過專用的 Azure 公用 IP,由 Azure 防火牆公開。

顯示內部標準 Load Balancer 前面的 Azure 防火牆的圖解。

以下是訊息流程:

  1. AKS 託管測試 Web 應用程式的要求會傳送至透過公用 IP 設定由 Azure 防火牆公開的公用 IP。 公用 IP 和公用 IP 設定都是專用於此工作負載。
  2. Azure 防火牆 DNAT 規則會將 Azure 防火牆公用 IP 和埠轉譯為節點資源群組中,AKS 叢集的 Kubernetes 內部標準 Load Balancer 中 NGINX 入口控制器所使用的私有 IP 和埠。
  3. 內部 load balancer 會將要求傳送至在 AKS 叢集的其中一個代理程式節點上執行的其中一個 Kubernetes 服務 Pod。
  4. 回覆訊息會透過使用者定義的路由傳回原始呼叫端。 0.0.0.0/0 是位址前綴,而虛擬設備下一個躍點類型
  5. 任何工作負載起始的輸出呼叫會路由傳送至使用者定義路由的私有 IP 位址。

如需詳細資訊,請參閱在內部 Load Balancer 前面使用 Azure 防火牆

考量

這些考量能實作 Azure Well-Architected Framework 的支柱,其為一組指導原則,可以用來改善工作負載的品質。 如需更多資訊,請參閱 Microsoft Azure 結構完善的架構

下列一些考慮是一般建議,這些建議並非專門針對使用 Azure 防火牆來改善 AKS 叢集的保護。 我們相信它們是此解決方案的基本需求。 這些可套用至安全性、效能、可用性和可靠性、儲存體、服務網格,和監視等考量。

安全性

安全性可提供保證,以避免刻意攻擊和濫用您寶貴的資料和系統。 如需詳細資訊,請參閱安全性支柱的概觀

Azure 平台提供針對各種威脅,例如網路入侵和分散式阻斷服務 (DDoS) 攻擊的改進保護。 您應使用 Web 應用程式防火牆 (WAF) 為公開公用 HTTPS 端點的任何 AKS 託管的 Web 應用程式和服務提供保護。 您需要提供保護以避免常見的威脅,例如 SQL 插入式攻擊、跨網站指令碼攻擊和其他 Web 惡意探索。 若要這樣做,請使用 Open Web Application Security Project (OWASP) 規則和自訂規則。 Azure Web 應用程式防火牆可更妥善地集中保護 Web 應用程式,使其免於遭遇常見的攻擊和弱點。 您可以使用 Azure 應用程式閘道Azure Front Door,和 Azure 內容傳遞網路來部署 Azure WAF。

DDoS 攻擊是將應用程式移至雲端之組織所面對的最大可用性和安全性考慮之一。 DDoS 攻擊會嘗試耗盡應用程式的資源,讓合法使用者無法使用該應用程式。 DDoS 攻擊可以鎖定可透過網際網路公開觸達的任何端點。 Azure 中所有屬性都包括透過 Azure DDoS 基本結構保護的保護,無需額外費用。 Azure 全域部署網路的規模與能力可提供改進的防禦,透過一律啟動的流量監視和即時緩解,來抵禦常見的網路層攻擊。 DDoS 基礎結構保護不需要進行任何的使用者設定或應用程式變更。 它可協助保護所有 Azure 服務,包括 Azure DNS 之類的 PaaS 服務。

Azure DDoS 網路保護 (結合應用程式設計最佳做法) 可提供增強的 DDoS 緩解功能,以針對 DDoS 攻擊提供更多的防禦。 您應該在任何外圍虛擬網路上啟用 Azure DDOS 網路保護

以下是一些額外的安全性考慮事項:

  • 為 AKS 工作負載使用的任何 PaaS 服務建立私人端點,例如 Key Vault、Azure 服務匯流排,和 Azure SQL Database。 應用程式與這些服務之間的流量不會公開至公用因特網。 AKS 叢集虛擬網路與 PaaS 服務執行個體之間的流量會透過私人端點傳輸 Microsoft 骨幹網路,但 Azure 防火牆不會讓通訊通過。 此機制提供更好的安全性和更好的資料洩露保護。 如需詳細資訊,請參閱什麼是 Azure 私人連結?
  • 在 AKS 叢集前面使用應用程式閘道時,請使用 Web 應用程式防火牆原則來協助保護在 AKS 上執行之面向公眾的工作負載免受攻擊。
  • 透過控制哪些元件可以彼此通訊,使用網路原則來隔離及協助保護服務內部通訊。 預設情況下,Kubernetes 集群中的所有 Pod 都可以不受限制地發送和接收流量。 若要改善安全性,您可以使用 Azure 網路原則或 Calico 網路原則來定義規則,以控制不同微服務之間的流量。 如需詳細資訊,請參閱網路原則
  • 請勿對您的 AKS 節點公開遠端連線能力。 在管理虛擬網路中建立防禦主機或跳躍箱 (jump box)。 使用 Bastion 主機將流量路由傳送進您的 AKS 叢集。
  • 請考慮在您的生產環境中使用私人 AKS 叢集,或至少在 AKS 中使用授權的 IP 位址範圍,安全地存取 API 伺服器。 當您在公用叢集上使用授權的 IP 位址範圍時,請允許 Azure 防火牆網路規則集合中的所有輸出 IP 位址。 叢集中作業會取用 Kubernetes API 伺服器。
  • 如果您在 Azure 防火牆中啟用 DNS Proxy,Azure 防火牆 可以將 DNS 查詢從一或多個虛擬網路處理和轉送至您選擇的 DNS 伺服器。 此功能對於網路規則中可靠的 FQDN 篩選條件至關重要且是必需的。 您可以在 Azure 防火牆和 [防火牆原則] 設定中啟用 DNS Proxy。 若要了解有關 DNS proxy 紀錄的詳細資訊,請參閱 Azure 防火牆紀錄和指標
  • 當您在應用程式閘道前面使用 Azure 防火牆 時,您可以設定 Kubernetes 輸入資源,以透過 HTTPS 公開工作負載,並針對每個租用戶使用不同的子網域和數位憑證。 應用程式閘道入口控制器 (AGIC) 會自動設定應用程式閘道接聽程式,以用於安全通訊端層 (SSL) 終止。
  • 您可以在服務代理前面使用 Azure 防火牆,例如 NGINX 入口控制器。 此控制器提供反向代理、可設定的流量路由,以及 Kubernetes 服務的 TLS 終止。 Kubernetes 輸入資源可用來設定個別 Kubernetes 服務的輸入規則和路由。 透過使用輸入控制器和輸入規則,您可以單一 IP 位址將流量路由傳送至 Kubernetes 叢集中的多個服務。 您可以使用已認可的憑證頒發機構單位來產生 TLS 憑證。 或者,您可以使用 Let's Encrypt 自動產生具有 動態公有 IP 位址或靜態公有 IP 位址的 TLS 憑證。 如需詳細資訊,請參閱建立 HTTPS 入口控制器,並在 AKS 上使用您自己的 TLS 憑證
  • Azure 防火牆 操作員與叢集和工作負載小組之間的嚴格協調,對於初始叢集部署和持續的方式而言,都是必要的,因為工作負載和叢集需求會不斷演進。 當您設定工作負載用來驗證其用戶端的驗證機制,例如 OAuth 2.0OpenID Connect 時,尤其如此。
  • 使用下列指導方針來協助保護本文所述的環境:

可用性與可靠性

可靠性可確保您的應用程式符合您對客戶的承諾。 如需詳細資訊,請參閱可靠性支柱的概觀 (部分機器翻譯)。

此處的可用性和可靠性考慮並非 AKS 中的多租用戶專屬。 我們相信它們是此解決方案的基本需求。 請考慮下列方法來最佳化 AKS 叢集和工作負載的可用性。

區域內復原能力

  • 在部署期間,您可以設定 Azure 防火牆,以跨越多個可用性區域來提高可用性。 如需上限時間百分比,請參閱 Azure 防火牆 SLA。 為了鄰近性,您也可以將 Azure 防火牆 與特定區域產生關聯,不過此設定會影響 SLA。 部署在可用性區域中的防火牆不需要額外費用,包括可用性區域間資料傳輸。
  • 請考慮跨單一區域中所有可用性區域來部署 AKS 叢集的節點集區。 在節點集區前面使用 Azure 標準 Load Balancer應用程式閘道。 如果單一資料中心中斷,此拓撲可提供更佳的復原能力。 叢集節點會分散到單一區域內三個不同可用性區域的多個資料中心。
  • 啟用 Container Registry 中的區域備援,以實現區域內復原能力和高可用性。
  • 使用 Pod 拓撲分佈條件約束來控制 Pod 在失敗網域 (如區域、可用性區域和節點) 內 AKS 叢集中的分佈方式。
  • 請考慮對託管任務關鍵性工作負載的 AKS 叢集使用正常運行時間 SLA。 正常運行時間 SLA 是一項選用功能,可為叢集啟用較高層級的 SLA,並提供金錢補償。 對於使用可用性區域的叢集,正常運行時間 SLA 保證 Kubernetes API 伺服器端點達到高可用性。 您也可以將它用於不使用可用性區域的叢集,但 SLA 等級較低。 如需 SLA 詳細資料,請參閱正常運行時間 SLA。 AKS 會在更新和容錯網域之間使用主要節點複本,以確保符合 SLA 需求。

災害復原和商務持續性

  • 請考慮將解決方案部署到特定地理位置內至少兩個配對的 Azure 區域。 使用全域 load balancer,例如 Azure 流量管理員Azure Front Door,並採用主動/主動或主動/被動路由方法,以確保商務持續性和災害復原 (DR)。
  • Azure 防火牆是區域性服務。 如果您跨兩個或多個區域部署解決方案,則必須在每個區域中建立 Azure 防火牆。 您可以建立全域 Azure 防火牆原則,以包含適用於所有區域中樞的組織授權規則。 您可以使用此原則作為區域 Azure 原則的上層原則。 使用非空白父代原則所建立的原則,會繼承父代原則的所有規則集合。 從上層原則繼承的網路規則集合始終優先於定義為新原則一部分的網路規則集合。 相同的邏輯適用於應用程式規則集合。 但是,無論繼承如何,網路規則集合始終在應用程式規則集合之前處理。 如需標準和進階原則的詳細資訊,請參閱 Azure 防火牆管理員原則概觀
  • 請務必在 QA 環境中撰寫指令碼、記錄並定期測試任何區域容錯移轉流程。 如果核心服務受到主要區域內中斷的影響,這麼做會有助於避免無法預測的問題。 這些測試也會檢查 DR 方法是否符合 RPO/RTO 目標,以及容錯轉移所需的最終手動流程和干預。
  • 請務必測試容錯回復程序,以驗證其是否如預期般運作。
  • Container Registry 中儲存您的容器映像。 將登錄異地複寫至每個 AKS 區域。 如需詳細資訊,請參閱 Azure Container Registry 中的異地複寫
  • 可以的話,請避免將服務狀態儲存在容器中。 請改用支援多區域複製的 Azure PaaS。
  • 如果您使用 Azure 儲存體,請準備和測試將儲存體從主要區域遷移至備份區域的過程。

卓越營運

卓越營運涵蓋部署應用程式並使其持續在生產環境中執行的作業流程。 如需詳細資訊,請參閱卓越營運支柱的概觀 (部分機器翻譯)。

DevOps

  • 在持續整合與持續傳遞 (CI/CD) 管線中使用 Helm 圖表,將您的工作負載部署至 AKS。 使用 GitHub ActionsAzure DevOps 等 DevOps 系統。 如需詳細資訊,請參閱建置和部署到 Azure Kubernetes Service
  • 若要您提供應用程式給使用者之前,先正確測試應用程式,請使用應用程式生命週期管理中的 A/B 測試和 Canary 部署,。 有數種技術可用來將流量分割到相同服務的不同版本。 或者,您可以使用服務網格實作所提供的流量分割功能。 如需詳細資訊,請參閱 Linkerd 流量分割Istio 流量管理
  • 使用 Azure Container Registry 或其他容器登錄 (例如 Docker Hub),儲存部署至叢集的私人 Docker 映像。 AKS 可以使用其 Microsoft Entra 身分識別,透過 Azure 容器登錄進行驗證。
  • 在個別生產階段前環境中測試工作負載的輸入和輸出,以鏡像生產環境的網路拓撲和防火牆規則。 分段推出原則可協助您在把新功能或網路規則發行至生產環境之前,偵測任何網路或安全性問題。

監視

Azure 防火牆 與 Azure 監視器完全整合,以記錄防火牆處理的傳入和傳出流量。 如需詳細資訊,請參閱 Azure 防火牆威脅情報型篩選

下列監視考慮並非專屬於 AKS 中的多租用戶,但我們相信它們是此解決方案的基本需求。

  • 使用容器深入解析來監視 AKS 叢集和工作負載的健全狀態。
  • 設定所有 PaaS 服務 (如容器登錄和 Key Vault) 以收集診斷紀錄和指標。

成本最佳化

此結果架構的成本取決於下列設定詳細資料:

  • 服務層
  • 可縮放性 (服務動態分配以支援指定需求的執行個體數目)
  • 自動化指令碼
  • 您的災害復原層級

評估這些設定詳細資料之後,請移至 Azure 定價計算機來預估您的成本。 如需更多定價最佳化選項,請參閱 Microsoft Azure Well-Architected Framework 中的成本最佳化原則

部署此案例

此案例的原始程式碼位於 GitHub。 此解決方案是開放原始碼並提供 MIT 授權

必要條件

對於連線部署,您需要一個 Azure 帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費 Azure 帳戶。 您必須先符合這些需求,才能使用 Azure DevOps 部署 Terraform 模組:

  • 將 Terraform 狀態檔案儲存在 Azure 記憶體帳戶中。 如需使用記憶體帳戶來儲存遠端 Terraform 狀態、狀態鎖定和待用時加密的詳細資訊,請參閱在 Azure 儲存體中儲存 Terraform 狀態
  • 建立 Azure DevOps 專案。 如需詳細資訊,請參閱在 Azure DevOps 中建立專案
  • 建立 Azure DevOps 服務連接 到您的 Azure 訂用帳戶。 當您建立服務連線時,可以使用服務主體驗證 (SPA) 或 Azure 受控服務識別。 無論是哪一種情況,請確定 Azure DevOps 用來連線到 Azure 訂用帳戶的服務主體或受控識別已被指派整個訂用帳戶的擁有者角色。

部署至 Azure

  1. 請準備好您的 Azure 訂用帳戶資訊。

  2. 複製 Workbench GitHub 存放庫

    git clone https://github.com/Azure-Samples/private-aks-cluster-terraform-devops.git
    
  3. 按照 README.md 檔案中提供的指示進行。

參與者

本文由 Microsoft 維護。 原始投稿人如下。

主要作者:

若要查看非公開的 LinkedIn 設定檔,請登入 LinkedIn。

下一步

檢閱 Microsoft Azure Well-Architected Framework 中的 AKS 建議和最佳做法:

Azure 防火牆

Azure Kubernetes Service

架構指引

參考架構