編輯

共用方式為


使用 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)。
  • 跳板式虛擬機 (VM) 和私人端點 (VmSubnet)。
  • 應用程式閘道 WAF2 (AppGatewaySubnet)。
  • Azure Bastion (AzureBastionSubnet)。

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

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

  • 僅裝載重要系統 Pod 和服務的系統節點集區
  • 裝載使用者工作負載和成品的用戶節點集區

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

Azure Bastion 主機透過 SSL 提供對跳板 VM 的改良安全性 SSH 連線。 Azure Container Registry 可用來建置、儲存及管理容器映像和成品(例如 Helm 圖表)。

此架構包含 Azure 防火牆,可用來透過DNAT規則、網路規則和應用程式規則來控制輸入和輸出流量。 它也有助於使用 威脅情報型篩選來保護工作負載。 Azure 防火牆 和 Bastion 會部署至中樞虛擬網路,該虛擬網路會與裝載私人 AKS 叢集的虛擬網路對等互連。 路由表和使用者定義的路由可用來將私人 AKS 叢集的輸出流量路由傳送至 Azure 防火牆。

注意

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

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

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

  • Azure Blob 儲存體 帳戶
  • Container Registry
  • 金鑰保存庫
  • Kubernetes 叢集的 API 伺服器

中樞與輪輻虛擬網路之間有一個虛擬網路連結,可裝載 AKS 叢集和稍早所述的私人 DNS 區域。

Log Analytics 工作區可用來從 Azure 服務收集診斷記錄和計量。

元件

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

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

  • Azure Kubernetes Service 藉由將作業額外負荷卸除至 Azure,簡化在 Azure 中部署受控 Kubernetes 叢集。 由於託管的 Kubernetes 服務,Azure 會處理重要的工作,例如健康情況監控和維護。 由於 Kubernetes 主機是由 Azure 管理,因此您只會管理和維護代理程序節點。

  • 金鑰保存庫 儲存和控制對秘密的存取,例如 API 金鑰、密碼、憑證和密碼編譯密鑰,並具有改善的安全性。 金鑰保存庫 也可讓您輕鬆地布建、管理及部署公用和私人傳輸層安全性/安全套接字層 (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 儲存體經過最佳化,已能妥善儲存大量的非結構化資料。

  • Private Link 可讓您透過虛擬網路中的私人端點存取 Azure PaaS 服務(例如 Blob 儲存體 和 金鑰保存庫)。 您也可以使用它來存取您擁有或由 Microsoft 合作夥伴所提供的 Azure 託管服務。

替代項目

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

案例詳細資料

在生產環境中,與 Kubernetes 叢集的通訊應該受到防火牆的保護,以根據一組安全性規則來監視和控制傳入和傳出網路流量。 防火牆通常會在受信任的網路與不受信任的網路之間建立屏障,例如因特網。

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

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

  • 建議 Azure 防火牆 進階版 來保護高度敏感的應用程式,例如付款處理。 其支援進階威脅防護功能,例如惡意程式碼和 TLS 檢查。
  • 建議 Azure 防火牆 標準版的客戶尋找第 3 層 7 層防火牆,且需要自動調整才能處理高達 30 Gbps 的尖峰流量期間。 它支持企業功能,例如威脅情報、DNS Proxy、自定義 DNS 和 Web 類別。
  • 對於輸送量需求小於 250 Mbps 的客戶,建議使用 Azure 防火牆 Basic

下表顯示三個 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 Pipelines 中設定自我裝載代理程式,以在 Windows Server Core 容器(適用於 Windows 主機)或 Ubuntu 容器(適用於 Linux 主機)與 Docker 內執行。 將其部署為具有私人 AKS 叢集中一或多個複本的 Pod。 如需詳細資訊,請參閱

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

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

在公用 Standard 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 公用標準負載平衡器中工作負載所使用的公用 IP 和埠。
  3. 負載平衡器會將要求傳送至其中一個在 AKS 叢集的代理程式節點上執行的 Kubernetes 服務 Pod。
  4. 回應消息會透過使用者定義的路由傳回原始呼叫端。 Azure 防火牆 公用IP是位址前綴,而因特網則是下一個躍點類型
  5. 任何工作負載起始的輸出呼叫會路由傳送至預設使用者定義路由所 Azure 防火牆 的私人IP位址。 0.0.0.0/0 是地址前綴,而 虛擬設備下一個躍點類型

如需詳細資訊,請參閱 AKS 叢集公用標準負載平衡器前面使用 Azure 防火牆。

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

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

顯示內部 Standard Load Balancer 前面 Azure 防火牆 的圖表。

以下是訊息流程:

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

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

考量

這些考量能實作 Azure Well-Architected Framework 的要素,其為一組指導原則,可以用來改善工作負載的品質。 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework (部分機器翻譯)。

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

安全性

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

Azure 平臺可改善保護各種威脅,例如網路入侵和分散式阻斷服務 (DDoS) 攻擊。 您應該使用 Web 應用程式防火牆 (WAF) 來為公開公用 HTTPS 端點的任何 AKS 裝載 Web 應用程式和服務提供保護。 您需要提供保護,避免常見的威脅,例如 SQL 插入式、跨網站腳本和其他 Web 惡意探索。 若要這樣做,請使用 Open Web Application Security Project (OWASP) 規則和自定義規則。 Azure Web 應用程式防火牆 可改善 Web 應用程式的集中式保護,免於常見的惡意探索和弱點。 您可以使用 Azure 應用程式閘道、Azure Front DoorAzure 內容傳遞網路 來部署 Azure WAF。

DDoS 攻擊是組織將應用程式移至雲端的最大可用性和安全性考慮之一。 DDoS 攻擊會嘗試耗盡應用程式的資源,讓合法使用者無法使用該應用程式。 DDoS 攻擊可針對可透過因特網公開連線的任何端點。 Azure 中的每個屬性都包含透過 Azure DDoS 基礎結構保護的保護,不需額外費用。 全域部署的 Azure 網路的規模和容量可透過 Always-On 流量監視和即時防護,改善針對常見網路層攻擊的防禦。 DDoS 基礎結構保護不需要進行任何的使用者設定或應用程式變更。 其可協助保護所有 Azure 服務,包括 Azure DNS 之類的 PaaS 服務。

Azure DDoS 網路保護結合應用程式設計最佳做法,提供增強的 DDoS 風險降低功能,以提供更多防禦 DDoS 攻擊。 您應該在任何周邊虛擬網路上啟用 Azure DDOS 網路保護

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

  • AKS 工作負載所使用的任何 PaaS 服務建立私人端點,例如 金鑰保存庫、Azure 服務匯流排 和 Azure SQL 資料庫。 應用程式與這些服務之間的流量不會公開至公用因特網。 AKS 叢集虛擬網路與 PaaS 服務實例之間的流量會透過私人端點傳輸 Microsoft 骨幹網路,但通訊不會通過 Azure 防火牆。 此機制提供更佳的安全性和更好的數據外泄防護。 如需詳細資訊,請參閱 什麼是 Azure Private Link?
  • 當您在 AKS 叢集前面使用 應用程式閘道 時,請使用 Web 應用程式防火牆 原則來協助保護在 AKS 上執行的公開工作負載免受攻擊。
  • 使用網路原則來隔離並協助保護內部服務通訊,方法是控制哪些元件可以彼此通訊。 根據預設,Kubernetes 叢集中的所有 Pod 都可以傳送和接收流量,而不受限制。 若要改善安全性,您可以使用 Azure 網路原則或 Calico 網路原則來定義規則,以控制不同微服務之間的流量流程。 如需詳細資訊,請參閱 網路原則
  • 請勿對您的 AKS 節點公開遠端連線能力。 在管理虛擬網路中建立防禦主機或跳躍箱 (jump box)。 使用防禦主機將流量路由傳送到您的 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) 終止 應用程式閘道 接聽程式。
  • 您可以在服務 Proxy 前面使用 Azure 防火牆,例如 NGINX 輸入控制器。 此控制器提供 Kubernetes 服務的反向 Proxy、可設定的流量路由和 TLS 終止。 Kubernetes 輸入資源可用來設定個別 Kubernetes 服務的輸入規則和路由。 透過使用輸入控制器和輸入規則,您可以單一 IP 位址將流量路由傳送至 Kubernetes 叢集中的多個服務。 您可以使用已辨識的證書頒發機構單位來產生 TLS 憑證。 或者,您可以使用 Let's Encrypt 來自動產生具有 動態公用 IP 位址或靜態公用 IP 位址的 TLS 憑證。 如需詳細資訊,請參閱 建立 HTTPS 輸入控制器,並在 AKS 上使用您自己的 TLS 憑證。
  • Azure 防火牆 操作員和叢集和工作負載小組之間的嚴格協調,對於初始叢集部署,以及隨著工作負載和叢集需求的演進,需要持續進行。 當您設定驗證機制,例如 OAuth 2.0OpenID 連線,工作負載用來驗證其用戶端時,尤其如此。
  • 使用下列指導方針來協助保護本文所述的環境:

可用性和可靠性

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

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

區域內復原能力

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

災害復原和商務持續性

  • 請考慮將解決方案部署到地理位置內至少 兩個配對的 Azure 區域 。 使用全域負載平衡器,例如 Azure 流量管理員Azure Front Door,搭配主動/主動或主動/被動路由方法來保證商務持續性和災害復原(DR)。
  • Azure 防火牆 是區域服務。 如果您跨兩個或多個區域部署解決方案,則必須在每個區域中建立 Azure 防火牆。 您可以建立全域 Azure 防火牆 原則,以包含適用於所有區域中樞的組織授權規則。 您可以使用此原則作為區域 Azure 原則的父原則。 使用非空白父代原則所建立的原則,會繼承父代原則的所有規則集合。 繼承自父原則的網路規則集合一律優先於定義為新原則一部分的網路規則集合之上。 相同的邏輯適用於應用程式規則集合。 不過,不論繼承為何,一律會在應用程式規則集合之前處理網路規則集合。 如需標準和 進階版 原則的詳細資訊,請參閱 Azure 防火牆 Manager 原則概觀
  • 請務必編寫腳本、記錄並定期測試 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 Container Registry 進行驗證。
  • 在個別的生產前環境中測試工作負載的輸入和輸出,以鏡像生產環境的網路拓撲和防火牆規則。 分段推出策略可協助您在將新功能或網路規則發行至生產環境之前,偵測任何網路或安全性問題。

監視

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

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

  • 使用 容器深入解析 來監視 AKS 叢集和工作負載的健康情況狀態。
  • 設定所有 PaaS 服務(例如 Container Registry 和 金鑰保存庫),以收集診斷記錄和計量。

成本最佳化

產生的架構成本取決於下列組態詳細數據:

  • 服務層
  • 延展性 (服務動態設定以支援指定需求的實體數目)
  • 自動化指令碼
  • 災害復原層級

評估這些設定詳細數據之後,請使用 Azure 定價計算機 來預估您的成本。 如需更多定價優化選項,請參閱 Microsoft Azure 良好架構架構中的成本優化 原則。

部署此案例

此案例的原始程式碼可在 GitHub 中使用。 此解決方案 開放原始碼 並提供 MIT 授權

必要條件

針對在線部署,您需要 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 架構良好架構檢閱 AKS 的建議和最佳做法:

Azure 防火牆

Azure Kubernetes Service

架構指引

參考架構