使用適用於 Kubernetes 的 Azure 原則來設定 AKS 資源配額原則

已完成

Azure 原則可協助您強制執行標準,並針對您的雲端環境進行大規模的合規性評估。 這是公司實作商務規則來定義如何允許員工使用公司軟體、硬體,以及組織中的其他資源的良好做法。 因此,企業會使用原則來強制執行、檢閱及定義存取權。 原則可協助組織符合治理和法律需求、實作最佳做法,以及建立組織慣例。

Azure Kubernetes Service (AKS) 可讓您使用原則,有效率地協調雲端原生應用程式。 您意識到必須強制執行商務規則來管理小組使用 AKS 的方式,確保符合成本效益的方法。 您決定使用 Azure 原則,以將該構想套用到 Azure 型雲端資源。

在討論如何使用適用於 Kubernetes 的 Azure 原則之前,您應多了解一些從 Kubernetes 內啟用此功能的其他概念。

什麼是 Kubernetes 許可控制器?

「許可」控制器是 Kubernetes 外掛程式,可在將所要求的 Kubernetes 物件進行保存之前,攔截針對 Kubernetes API 的已驗證和授權要求。 例如,假設您部署新的工作負載,而且部署包含具有特定記憶體需求的 Pod 要求。 許可控制器會攔截該部署要求,而且必須在將部署保存到叢集之前,先對其進行授權。

您可以將許可控制器視為會控管並強制執行叢集使用和設計方式的軟體。 其會限制建立、刪除和修改 Kubernetes 物件的要求。

什麼是許可控制器 Webhook?

「許可控制器 Webhook」是 HTTP 回呼函式,其會接收許可要求,然後對這些要求採取動作。 許可控制器必須在執行時間設定。 這些控制器會針對您已編譯的許可外掛程式或作為 Webhook 執行的已部署擴充功能存在。

許可 Webhook 有兩種類型:「驗證 Webhook」或「變動 Webhook」。 系統會先叫用變動 Webhook,而且可以在傳送到 API 伺服器的物件上變更並套用預設值。 驗證 Webhook 會驗證物件值,而且可以拒絕要求。

什麼是 Open Policy Agent (OPA)?

Open Policy Agent (OPA) 是開放原始碼的一般用途原則引擎,可為您提供高階宣告式語言來撰寫原則。 這些原則可讓您定義規則來監督系統的行為。

什麼是 OPA Gatekeeper?

OPA Gatekeeper 是一個開放原始碼的驗證 Kubernetes 許可控制器 Webhook,會強制執行遵循 OPA 語法的自訂資源定義 (CRD) 型原則。

OPA Gatekeeper 的目標是讓您使用設定來自訂許可原則,而不是使用針對服務的硬式編碼原則規則。 其也會為您提供叢集的完整檢視,以識別違反原則的資源。

使用 OPA Gatekeeper 以規則來定義整個組織的原則:

  • 對於所有已設定的 Pod 強制執行最大資源限制,例如 CPU 和記憶體限制。

  • 只允許從已核准的存放庫部署映像。

  • 叢集中所有命名空間的標籤命名慣例必須為每個命名空間指定連絡窗口。

  • 授權叢集服務具有全域唯一的選取器。

適用於 AKS 的 Azure 原則

Azure 原則會擴充 OPA Gatekeeper 第 3 版,並透過內建原則來與 AKS 整合。 這些原則會以集中且一致的方式,在叢集上大規模套用強制動作與保護。

貴公司的開發小組希望將開發最佳化,並引進開發工具 (例如 DevSpaces) 來簡化其 Kubernetes 開發工作流程。 您想要確保小組成員會遵守其專案的特定資源限制。 您決定放置一個原則,此原則會定義開發命名空間中允許的計算資源、儲存體資源,以及物件計數。

若要設定資源限制,您可以在命名空間層級套用資源配額,並監視資源使用狀況以調整原則配額。 使用此策略來保留並限制整個開發小組的資源。

如何啟用適用於 AKS 的 Azure 原則附加元件

註冊「適用於 AKS 的 Azure 原則附加元件」功能有數個步驟。 我們將在這裡提供範例,但您實際上會完成下一個單元中的步驟。

  1. 使用 az provider register 命令來註冊兩個資源提供者:

    • Microsoft.ContainerServiceMicrosoft.PolicyInsights:這些資源提供者支援查詢原則事件和管理容器相關資訊之類的動作。 有一些查詢、建立、更新或刪除原則補救的動作。

    以下是這兩個註冊命令的範例:

    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.PolicyInsights
    
  2. Microsoft. ContainerService 資源提供者註冊 AKS-AzurePolicyAutoApprove 功能。 以下是命令範例:

    az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
    
  3. 確認功能註冊成功之後,請搭配 --namespace 參數執行 az provider register 命令,以傳播新的功能註冊。 以下是命令範例:

    az provider register -n Microsoft.ContainerService
    
  4. 啟用 Azure 原則附加元件:

    az aks enable-addons \
        --addons azure-policy \
        --name myAKSCluster \
        --resource-group myResourceGroup
    

    啟用此附加元件會在叢集的兩個命名空間中排程工作負載。 第一個命名空間是 kube-system,其中包含 azure-policyazure-policy-webhook。 第二個命名空間是 gatekeeper-system,其中包含 gatekeeper-controller-manager。 這些工作負載會負責評估提交給 AKS 控制平面的要求。 根據您設定的原則,您的原則 Webhook 可以允許或拒絕要求。

指派內建原則定義

您可以使用 Azure 原則合規性儀表板來管理 Azure 環境的原則。 此儀表板可讓您向下切入到每個資源、每個原則層級的詳細資料。 其可協助您透過對現有資源使用大量補救功能,以及對新資源使用自動補救功能,來讓您的資源符合規範。

針對每個原則,會列出下列概觀資訊:

項目 說明 範例
名稱 原則名稱。 [預覽]:確保容器 CPU 和記憶體資源限制未超過 Kubernetes 叢集中指定的限制]。
範圍 套用此原則的訂用帳戶資源群組。 mySubscription/rg-akscostsaving。
合規性狀態 已指派原則的狀態。 [符合規範][發生衝突][未啟動][未註冊]
資源合規性 符合原則規範的資源百分比。 此計算會將符合規範、不符合規範及發生衝突的資源納入考慮。 100
不符合規範的資源 違反一或多個原則規則的唯一資源數目。 3
不符合規範的原則 不符合規範的原則數目。 5

從這裡開始,您可以向下切入所觸發事件的個別資源和每個原則的詳細資料。 例如,您可以檢查已遭拒之工作負載部署的詳細資料。

指派原則

若要指派原則,在 Azure 原則導覽面板中,選取 [撰寫] 區段 底下的 [指派] 選項。

您可以利用下列其中一種方式來指派 Azure 原則:以一組原則 (稱為「方案」) 或以單一原則的形式來指派。

方案指派

方案指派是組成群組以滿足特定目標或用途的 Azure 原則定義集合。 例如,目標可能是將支付卡產業資料安全性標準套用到您的資源。

原則指派

原則指派會指派單一原則,例如 [在 Kubernetes 叢集中不允許特殊權限的容器]

如何指派原則

每個原則都會使用一連串的設定步驟來定義。 您擷取的資訊數量取決於您選取的原則類型。

例如,若要依公司雲端環境中的開發人員來限制資源部署,您可以為 Azure Kubernetes Service 指派其中一個內建的 Azure 原則。 原則名稱為「確保容器 CPU 和記憶體資源限制未超過 Kubernetes 叢集中指定的限制」

此原則要求您設定在部署要求所要求的允許資源上設定限制。

讓我們看看指派原則時的可設定選項。

基本原則資訊

第一個步驟要求您選取並輸入定義新原則的基本資訊。 例如,此資訊可以是原則和資源範圍。 下表顯示您可以設定的每個項目:

項目 說明
範圍 範圍會決定在哪些資源或資源群組上強制執行原則指派。 此值會以訂用帳戶或管理群組為依據。 您可以在低於範圍層級的某個層級中,從您的選取項目中排除資源。
原則定義 您想要套用的原則。 您可以從數個內建原則選項中選擇。
指派名稱 用來識別指派原則的名稱。
說明 可描述原則的任意格式文字描述。
原則強制執行 您可以選擇 [已啟用] 和 [已停用]。 如果此選項為 [已停用],則不會套用原則,而且不會因為不符合規範而拒絕要求。
指派者 任意格式的值,預設為註冊的使用者。 您可以變更此值。

原則參數

原則要求您設定適用於每個特定原則的商務規則。 並非所有原則都具有相同的商務規則,這就是每個原則都有不同參數的原因。

例如,[確保容器 CPU 和記憶體資源限制未超過 Kubernetes 叢集中指定的限制] 原則會要求您設定三個參數:

  • 容器允許的最大 CPU 單位數
  • 容器允許的最大記憶體位元組
  • 要從原則中排除的 Kubernetes 命名空間清單

比較上述原則與 [Web 應用程式應只可經由 HTTPS 存取] 原則,其沒有任何要設定的自訂參數。

所有原則都具有效果設定。 此設定會啟用或停用原則執行。 和參數一樣,原則也會有不同的 [效果] 選項。

例如,針對資源管理原則,您可以選取 [稽核]、[拒絕] 或 [停用] 作為 [效果] 值。 針對 Web 應用程式原則,您只能選取 [稽核] 或 [停用]

下表列出原則定義中目前支援的所有效果:

影響 描述
附加 將更多欄位新增至要求的資源
稽核 在活動記錄中建立警告事件
AuditIfNotExists 啟用與符合條件之資源相關資源的稽核
拒絕 透過原則定義防止不符合已定義標準的資源要求,並使要求失敗
DeployIfNotExists 符合條件時,執行範本部署
停用 適用於測試狀況,或當原則定義已將效果參數化,而且您想要停用單一指派時
Modify 在建立或更新期間,新增、更新或移除資源上的標記

原則補救

最後一個步驟是考慮原則補救。 當您指派原則時,資源很可能已經存在,而且會違反新原則。 根據預設,只有新建立的資源會套用至新原則。 在您指派新原則之後,請使用補救來檢查現有的資源。 補救工作可能會根據已套用的原則類型而有所不同。

在下一個練習中,您會使用 [確保容器 CPU 和記憶體資源限制未超過 Kubernetes 叢集中指定的限制] 原則,以進一步降低成本。