將 Azure Spring Apps 遷移至 Azure Kubernetes Service
注意
基本、標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告。
標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps。
本文適用於:✅ 基本/標準 ✅ 企業
本文提供從 Azure Spring Apps 移轉至 Azure Kubernetes Service (AKS) 的概觀。
Azure Spring Apps 是專為 Spring Boot 應用程式設計的平臺即服務 (PaaS) 解決方案。 它可讓您更輕鬆地部署、執行和管理這些應用程式。 Azure Spring Apps 會負責基礎結構、調整和監視,讓開發人員可以專注於其程序代碼。
AKS 是基礎結構即服務 (IaaS) 供應專案,可提供完全受控的 Kubernetes 環境。 AKS 可讓您更充分掌控應用程式的部署和管理方式。 它支援各種不同的容器化應用程式,並啟用自定義以符合特定需求。
將應用程式從 Azure Spring Apps 移轉至 AKS 表示從受控環境移至可讓您更有彈性的環境。 此程式需要採用新的工具和做法,才能在 AKS 上達成與 Azure Spring Apps 相同的結果。
概念對應
由於 Azure Spring Apps 和 AKS 是不同類型的雲端服務供應專案,因此直接將 Azure Spring Apps 概念對應至 AKS 並不完全準確。 此外,在生產環境中使用時,Azure Spring Apps 會相依於許多內部元件,此處並未列出。 下圖和表格提供從 Azure Spring Apps 到 AKS 的概念簡單對應,以協助您瞭解基本概念。 在實際的生產環境中,您應該考慮更安全且可靠的解決方案。
Azure Spring Apps 服務 | Azure Kubernetes Service |
---|---|
服務實例會裝載並保護應用程式和其他資源的界限,並支援自定義虛擬網路。 | 叢 集 是部署的基本單位。 在叢集中, 命名空間 是用來組織和隔離資源的虛擬細分。 它會共用叢集虛擬網路所定義的相同基礎網路基礎結構。 選擇專用叢集或具有命名空間的共用叢集,取決於您的業務需求。 |
應用程式是一個商務應用程式,可作為服務實例內的子資源。 | 商務 應用程式 是 Azure Spring Apps 中的虛擬概念,由 AKS 中的多個資源組成。 輸入 會控制服務的外部存取,並設定將流量路由傳送至不同服務的規則。 服務會將一組 Pod 的存取抽象化。 您可以藉由更新服務以使用標籤指向不同版本的部署,以執行藍色-綠色部署切換。 |
部署是應用程式的版本。 應用程式可以有一個生產部署和一個預備部署。 | 部署會管理特定應用程式或服務的推出和生命週期。 它也啟用輪流更新和復原,啟用受控制且順暢的應用程式變更,而不需要停機。 |
應用程式實例是服務所管理的最低運行時間單位。 | Pod 代表一或多個緊密結合的容器,並裝載執行中應用程式或工作負載的單一實例。 |
網路考量
布建 AKS 叢集之前,請務必仔細考慮網路設定。 這些決策可能會大幅影響應用程式的效能、延展性和安全性。
AKS 依賴容器網路介面 (CNI) 外掛程式來管理其叢集內的網路功能。 這些外掛程式會處理重要工作,例如將IP位址指派給Pod、路由傳送流量,以及透過 Kubernetes Services 啟用通訊。 AKS 支援針對不同網路需求量身打造的多個 CNI 外掛程式,在叢集設計方面提供彈性。
AKS 提供兩個主要的網路模型:重迭網路和一般網路。 重迭網路會將私人IP位址指派給Pod,與AKS節點的 Azure 虛擬網絡 子網分開。 此模型可調整並節省虛擬網路IP位址,但會針對離開叢集的流量使用網路位址轉換 (NAT)。 相反地,一般網路會直接從與節點相同的 Azure 虛擬網絡 子網指派 Pod IP 位址,讓外部服務存取沒有 NAT 的 Pod。 雖然一般網路可啟用直接 Pod 通訊,但需要更廣泛的虛擬網路 IP 位址空間。
適當的IP規劃對於順暢的AKS作業而言非常重要。 請務必確保子網擁有足夠的IP位址供所有資源使用、避免重疊範圍,並保留未來成長空間,以防止連線問題和中斷。 如需詳細資訊,請參閱 Azure Kubernetes Service CNI 網路功能概觀。
若要處理 AKS 中的連入流量,您可以使用負載平衡器或輸入控制器。 負載平衡器會在第 4 層運作,根據通訊協定和埠分散流量,而輸入控制器在第 7 層運作,提供 URL 型路由和 TLS/SSL 終止等進階功能。 輸入控制器透過單一IP管理多個應用程式的流量,以減少多個公用IP的需求。 對於 Web 應用程式,輸入控制器是慣用的,因為它們可提供更佳的流量管理和與 Kubernetes 資源的整合。 如需詳細資訊,請參閱 使用應用程式路由附加元件管理的 NGINX 輸入。
若要保護 AKS 中的網路流量,請使用 Web 應用程式防火牆 (WAF),例如 Azure 應用程式閘道,以防範跨網站腳本和 Cookie 中毒等攻擊,同時管理流量路由和 TLS/SSL 終止。 此外,根據標籤、命名空間或埠,在 YAML 指令清單中定義規則,以實作網路原則來控制 Pod 對 Pod 通訊。 這些原則僅適用於以 Linux 為基礎的節點,可確保叢集中更好的流量控制和安全性。 如需詳細資訊,請參閱在 AKS 中使用網路原則來保護 Pod 之間的流量。
佈建
若要布建 AKS 叢集,您可以使用 Azure 入口網站、Azure CLI 或 ARM 範本。 此程式通常涉及選取所需的區域、定義節點集區大小和類型,以及選擇網路模型 - Azure CNI 或 Kubenet。 您也必須設定驗證選項,例如Microsoft用戶訪問控制的 Entra ID 整合。 若要監視和調整,您可以啟用 Azure 監視器,並根據資源使用量設定自動調整。 布建之後,您可以使用 kubectl 或 Azure CLI 來管理叢集。 如需布建 AKS 的詳細指示,請造訪 建立 AKS 叢集。
存取與身分識別
AKS 提供數種方式來管理 Kubernetes 叢集的驗證、授權和訪問控制。 您可以使用 Kubernetes 角色型存取控制 (RBAC),只授與使用者、群組和服務帳戶存取所需的資源。 如需詳細資訊,請參閱 使用 RBAC 授權。 AKS 也支援 Microsoft Entra ID 和 Azure RBAC 來改善安全性和控制,讓您以更精簡的方式指派和管理許可權。
為了獲得最佳安全性,建議您整合 AKS 與 Microsoft Entra 識別符。 此整合使用 OpenID Connect 和 OAuth 2.0 通訊協議進行驗證。 使用者在與 AKS 叢集互動時,使用 Microsoft Entra 認證進行驗證,以及其受叢集管理員控管的訪問許可權。 如需詳細資訊,請參閱 使用 kubelogin 為 Kubernetes 叢集啟用 Azure 受控識別驗證
Microsoft Entra 工作負載 ID 透過OpenID Connect (OIDC) 同盟整合 Kubernetes 的原生功能與外部識別提供者。 它會使用 服務帳戶令牌磁碟區投影 ,透過批注的服務帳戶將 Kubernetes 身分識別指派給 Pod。 透過這些令牌,Kubernetes 應用程式可以使用 Microsoft Entra ID 安全地驗證和存取 Azure 資源。 此設定可與 Azure 身分識別用戶端連結庫 (Azure.Identity
) 或 Microsoft 驗證連結庫 (MSAL) 等連結庫順暢地運作,以簡化工作負載的驗證。 若要瞭解如何設定叢集並設定具有工作負載識別的應用程式Pod,請參閱 部署和設定工作負載身分識別。
容器化應用程式
將應用程式容器化為容器映像是 AKS 上部署的必要條件。 它可確保部署一致、可攜式且可調整。 使用容器映像可讓您彈性地管理不同版本的應用程式。 它可讓多個容器在單一主機上執行,讓更新和復原變得更容易,並提升資源效率。
Azure Spring Apps 可協助使用者建立容器映像,並以不同方式部署應用程式。 您可以從原始程式碼、從 JAR 或 WAR 檔案等建置成品,或直接從容器映像進行部署。 若要瞭解如何從 JAR 或 WAR 檔案部署,請參閱 從 JAR 或 WAR 建置容器映像。 若要瞭解如何從原始程式碼部署,請參閱 使用Paketo Buildpacks將應用程式容器化。
若要監視 AKS 上部署的應用程式效能,您可以在容器化程式期間整合應用程式 效能監視器 處理(APM) 代理程式。 如需詳細資訊,請參閱 將應用程式效能監視整合到容器映像中。
部署應用程式和 Spring Cloud 元件
若要將應用程式部署至 AKS,您可以使用 Azure Spring Apps 或 StatefulSets 所使用的部署,視應用程式的需求而定。 對於無狀態應用程式,例如微服務,您通常會使用部署,其會管理應用程式的複本,並確保它們能順利執行。 Azure Spring Apps 會使用此類型。 另一方面,StatefulSet 非常適合需要持續性記憶體或穩定身分識別的應用程式,例如具有具狀態需求的資料庫或服務。
除了應用程式部署之外,您也需要定義 服務 來公開後端Pod。 服務是一種抽象概念,可讓您定義一組邏輯Pod,並啟用網路存取它們。 這項功能對於Pod之間的負載平衡和通訊至關重要。
部署 Spring Cloud 元件時,例如 Spring Cloud Config 或 Spring Cloud Gateway,您通常會針對無狀態服務使用部署。 針對需要穩定記憶體或狀態的後端服務,您可以選擇 StatefulSets。
下列連結提供 Spring Cloud 元件的容器映像和指令清單檔案參考範例:
監視器
監視是管理 AKS 上部署之應用程式的重要部分。 AKS 提供一系列工具來追蹤和分析叢集和工作負載的狀態,包括 Azure 監視器、Azure Log Analytics 和 Prometheus 等整合式解決方案。 如需詳細資訊,請參閱下列文章:
除了 Azure 監視器和 Prometheus 之外,您也可以使用其他監視解決方案,例如 Datadog、New Relic 或 Elastic Stack (ELK)。 您可以將這些工具整合到 AKS 中,以收集記錄、計量和追蹤,提供叢集效能的各種見解。
教學課程
我們提供教學課程來示範在 AKS 上執行 ACME Fitness Store 應用程式的端對端體驗。 如需詳細資訊,請參閱 acme-fitness-store/azure-kubernetes-service。 本教學課程提供實用的指引,並適用於參考。 AKS 具有高度彈性,因此您必須根據特定需求選擇組態和自定義專案。