使用适用于 Kubernetes 的 Azure Policy 配置 AKS 资源配额策略
Azure Policy 可帮助你强制实施标准并大规模评估云环境的合规性。 公司最好实施业务规则来定义员工如何使用组织中的公司软件、硬件和其他资源。 因此,企业使用策略来强制、审查和定义访问权限。 策略可帮助组织满足治理和法律要求、实施最佳做法并建立组织约定。
Azure Kubernetes 服务(AKS)允许你使用策略高效协调云原生应用程序。 你意识到你需要强制实施业务规则来管理团队如何使用 AKS 来确保经济高效的方法。 你决定使用 Azure Policy 在基于 Azure 的云资源上应用此想法。
在讨论如何使用 Azure Policy for Kubernetes 之前,应了解一些从 Kubernetes 中启用此功能的概念。
什么是 Kubernetes 准入控制器?
允许控制器是一个 Kubernetes 插件,在请求的 Kubernetes 对象的持久性之前截获对 Kubernetes API 的经过身份验证和授权的请求。 例如,假设你部署了一个新的工作负载,而且部署中包含一个具有特定内存要求的 Pod 请求。 准入控制器会截获该部署请求,必须先授权部署,然后再将它保存到群集。
可以将允许控制器视为管理并强制实施群集的使用和设计方式的软件。 它限制创建、删除和修改 Kubernetes 对象的请求。
什么是准入控制器 Webhook?
准入控制器 Webhook 是一个 HTTP 回调函数,用于接收准入请求,然后对这些请求执行操作。 准入控制器需要在运行时进行配置。 这些控制器可用于编译的准入插件,或者用作作为 Webhook 运行的已部署扩展。
准入 Webhook 有两种类型:验证型 Webhook 或修改型 Webhook。 首先调用可变的 Webhook,可以对发送到 API 服务器的对象更改和应用默认值。 验证 Webhook 验证对象值,并可以拒绝请求。
什么是开放策略代理(OPA)?
开放策略代理(OPA)是一种开源常规用途策略引擎,提供用于创作策略的高级声明性语言。 这些策略允许你定义用于监督系统行为方式的规则。
什么是 OPA Gatekeeper?
OPA Gatekeeper 是一种开源、验证 Kubernetes 允许控制器 Webhook,用于强制实施基于自定义资源定义(CRD)的策略,这些策略遵循 OPA 语法。
OPA Gatekeeper 的目标是通过使用配置而不是服务的硬编码策略规则来允许你自定义准入策略。 它还提供群集的完整视图,用于标识违反策略的资源。
使用 OPA Gatekeeper 通过规则定义组织范围的策略:
对所有配置的 Pod 强制实施最大资源限制,例如 CPU 和内存限制。
仅允许从已批准的存储库部署映像。
群集中所有命名空间的标签命名约定必须为每个命名空间指定一个联系点。
强制要求群集服务具有全局唯一的选择器。
适用于 AKS 的 Azure Policy
Azure Policy 扩展 OPA Gatekeeper 版本 3,并通过内置策略与 AKS 集成。 这些策略以集中且一致的方式在群集上应用大规模强制措施和安全措施。
贵公司的开发团队希望优化开发并引入开发工具(如 DevSpaces),以简化其 Kubernetes 开发工作流。 你希望确保团队成员遵守其项目的特定资源限制。 你决定制定一个策略,用于定义开发命名空间中允许的计算资源、存储资源和对象计数。
若要设置资源限制,可以在命名空间级别应用资源配额,并监视资源使用情况以调整策略配额。 使用此策略可以在整个开发团队中保留和限制资源。
如何为 AKS 启用 Azure Policy 加载项
为 AKS 功能注册 Azure Policy 加载项需要几个步骤。 我们将在此处提供示例,但实际上你将完成下一单元中的步骤。
使用
az provider register
命令注册两个资源提供程序。- Microsoft.ContainerService 和 Microsoft.PolicyInsights:这些资源提供程序支持作,例如查询有关策略事件的信息和管理容器。 这些是用于查询、创建、更新或删除策略修正的操作。
下面是两个注册命令的示例:
az provider register --namespace Microsoft.ContainerService az provider register --namespace Microsoft.PolicyInsights
向
AKS-AzurePolicyAutoApprove
资源提供程序注册Microsoft. ContainerService
功能。 下面是命令的示例:az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
确认功能注册成功后,使用
az provider register
参数运行--namespace
命令以传播新功能注册。 下面是命令的示例:az provider register -n Microsoft.ContainerService
启用 Azure Policy 插件:
az aks enable-addons \ --addons azure-policy \ --name myAKSCluster \ --resource-group myResourceGroup
启用插件将在群集的两个命名空间中安排工作负载。 第一个命名空间是 kube-system,其中包含
azure-policy
和azure-policy-webhook
. 第二个命名空间是 gatekeeper-system,其中包含gatekeeper-controller-manager
. 这些工作负载负责计算提交到 AKS 控制平面的请求。 根据配置的策略,策略 Webhook 可以允许或拒绝请求。
分配内置策略定义
使用 Azure 策略符合性仪表板管理 Azure 环境的策略。 通过仪表板,可以向下钻取到每个资源、每个策略的详细信息级别。 它通过为现有资源使用批量修正和为新资源使用自动修正,帮助你使资源符合要求。
对于每个策略,将列出以下概述信息:
条目 | DESCRIPTION | 示例: |
---|---|---|
名称 | 策略的名称。 | [预览]:确保容器 CPU 和内存资源限制不超过 Kubernetes 群集中的指定限制。 |
范围 | 此策略应用到的订阅资源组。 | mySubscription/rg-akscostsaving。 |
符合性状态 | 已分配策略的当前状态。 | 合规、 冲突、 未启动或 未注册。 |
资源符合性 | 符合策略的资源百分比。 此计算考虑到了合规、不合规和冲突的资源。 | 100 |
不合规资源 | 违反一个或多个策略规则的唯一资源数。 | 3 |
不符合的策略 | 不合规政策的数量。 | 5 |
在此处,可以深入查看关于触发事件的每项资源和每项策略的详细信息。 例如,可检查遭到拒绝的工作负载部署的详细信息。
分配策略
若要分配策略,请在 Azure Policy 导航面板中的“创作”部分下选择“分配”选项。
可通过以下两种方式之一分配 Azure 策略:作为称为 计划或单个策略的策略组。
计划分配
计划分配是组合在一起以满足特定目标或目的的 Azure 策略定义的集合。 例如,目标可能是跨资源应用支付卡行业数据安全标准。
策略分配
策略分配会分配单个策略,例如“不允许 Kubernetes 群集中有特权容器”。
如何分配策略
每个策略都是使用一系列配置步骤定义的。 捕获的信息量取决于所选策略的类型。
例如,若要限制公司云环境中的开发人员的资源部署,可以为 Azure Kubernetes 服务分配一个内置 Azure 策略。 策略的名称是 确保容器 CPU 和内存资源限制不超过 Kubernetes 群集中的指定限制。
策略要求你对部署请求请求请求的允许资源设置限制。
我们来看看分配策略时的可配置选项。
基本策略信息
第一步要求你选择并输入定义新策略的基本信息。 例如,此信息可以是策略和资源范围。 下表显示了可以配置的每个项:
条目 | DESCRIPTION |
---|---|
范围 | 策略分配的范围决定了其在何种资源或资源组上强制执行。 此值基于订阅或管理组。 你可以从所选内容中排除级别低于范围级别的资源。 |
策略定义 | 要应用的策略。 可以从多个内置策略选项中进行选择。 |
分配名称 | 用于标识已分配策略的名称。 |
说明 | 描述策略的自由文本说明。 |
策略实施 | 可以选择 “已启用 ”和 “已禁用”。 如果选项 为“已禁用”,则不会应用该策略,并且不会拒绝不符合要求的请求。 |
分配者 | 默认为已注册的用户的自由文本值。 可以更改此值。 |
策略参数
策略要求配置适用于每个特定策略的业务规则。 并非所有策略都具有相同的业务规则,因此每个策略都有不同的参数。
例如, 确保容器 CPU 和内存资源限制不超过 Kubernetes 群集策略中的指定限制 要求设置三个参数:
- 容器允许的最大 CPU 单位
- 容器允许的最大内存字节数
- 要从策略中排除的 Kubernetes 命名空间的列表
将此策略与 Web 应用程序进行比较,只能通过 HTTPS 策略进行访问,而 HTTPS 策略没有要配置的自定义参数。
所有策略都具有 效果 设置。 此设置启用或禁用策略执行。 与参数一样,策略还可以有不同的 效果 选项。
例如,对于资源管理策略,可以选择 审核、 拒绝或 禁用 作为 效果 值。 对于 Web 应用程序策略,只能选择 审核 或 禁用。
下表列出了策略定义中当前支持的所有效果:
影响 | DESCRIPTION |
---|---|
追加 | 向请求的资源添加更多字段 |
审核 | 在活动日志中创建警告事件 |
AuditIfNotExists | 启用与资源相关的审核,该资源与条件相匹配 |
拒绝 | 通过策略定义阻止与定义的标准不匹配的资源请求,并且请求失败 |
DeployIfNotExists | 满足条件时执行模板部署 |
已禁用 | 适用于测试情况或在策略定义已将效果参数化时使用,以及在你想要禁用单个分配时使用 |
修改 | 在创建或更新期间在资源上添加、更新或删除标记 |
策略修正
最后一步是考虑策略修正。 分配策略时,资源可能已存在并违反新策略。 默认情况下,仅新创建的资源应用于新策略。 分配新策略后,使用修正检查现有资源。 修正任务可能因应用的策略类型而异。
在下一个练习中,你将使用 “确保容器 CPU 和内存资源限制不超过 Kubernetes 群集策略中的指定限制 ”以进一步降低成本。