Azure Policy 及其如何与 Azure Kubernetes 服务集成

已完成

Azure Policy 是一项 Azure 服务,可帮助管理不同 Azure 服务的符合性状态。 适用于 Kubernetes 的 Azure Policy 让你可以在 Kubernetes 群集中使用相同的 Azure 策略,从而可以像管理 Azure 资源一样管理 Kubernetes 资源(如 Pod、部署和服务)的符合性状态。

Azure Policy 简介

利用 Azure Policy,可以管理 Azure 服务的符合性状态。 它通过将 Azure 资源的状态与定义的业务规则进行比较来实现此目的。 常见规则是某些区域限制、资源标签要求或限制哪些 Azure 服务可以使用。

在 Azure Policy 中定义这些业务规则的方式是使用策略定义。 许多内置策略涵盖了一系列常见场景。 如果其中一个内置策略不能满足需求,你还可使用基于 JSON 的语言定义自定义策略。 也可将多个策略定义组合到一个计划中。

在策略定义中,定义资源合规性条件,以及满足该条件时应产生的效果。 条件将资源的属性与所需的值进行比较。 条件的一个示例是将资源的位置与允许位置的预定义列表进行比较。 策略的效果可以是审核条件、拒绝创建资源或修改创建的资源。 在资源位置的示例中,可以拒绝创建不在允许位置列表中的资源。 有关策略定义的详细说明,请参阅 Azure Policy 定义结构

Azure Policy 通过将策略定义或计划分配给特定范围来发挥作用。 范围可以是管理组、订阅或资源组。 如果不设置排除范围,策略分配将自动继承到分配下的所有范围。 多个策略定义可以应用于一个特定范围。 我们认为分层策略的最终结果是累积最多限制:如果对某项资源应用了多个策略,则只有当应用于该资源的所有策略定义都合规时,该资源才合规。

在创建或更新 Azure 资源时会对策略分配进行评估。 如果定义或作用域发生更改,则也会对它们进行评估,并定期进行持续监视。 实际上,策略在你创建新资源时会立即生效。 同时还会扫描所有历史资源,以便你可以持续了解所有资源的合规性。

将 Azure Policy 与 AKS 集成

有两种方法可以将 Azure Policy 与 Azure Kubernetes 服务 (AKS) 集成。

  • 在 AKS 的 Azure 控制平面上强制实施合规性的策略。
  • 对群集中运行的工作负载强制实施合规性的策略。

第一组策略更侧重于表示群集设计的 Azure 资源,而第二组策略侧重于群集中运行的工作负载。

强制使用专用群集的策略就属于侧重于 AKS 的 Azure 控制平面的策略。 此策略评估 AKS 群集是否正在使用专用群集功能。 此策略是 Azure API 上的一个配置,用于控制群集本身的设计。

强制使用允许的映像的策略则属于侧重于群集中运行的工作负载的这组策略。 此策略评估 Kubernetes 中的 Pod 定义是否使用与特定正则表达式匹配的映像。 此策略是群集自身中的一个配置,不与 Azure API 进行交互。

第一组策略是针对 Azure API 本身。 第二组策略与 Kubernetes API 进行交互。 若要应用并强制实施这些内置的安全策略,你需要在 AKS 群集中设置适用于 AKS 的 Azure Policy 加载项

了解适用于 AKS 的 Azure Policy 背后的工作原理

为了在 Kubernetes API 上强制实施策略,适用于 Kubernetes 的 Azure Policy 使用了许多工具:许可 Webhook、开放策略代理 (OPA)、Gatekeeper,最后是 Azure Policy Pod。

Azure Policy 使用 Kubernetes 中的许可 Webhook。 许可 Webhook 是 Kubernetes API 的内置功能。 它们让 Kubernetes API 可以调用外部 Webhook 来验证是应该允许还是拒绝创建、删除、修改或连接资源的请求 (ValidatingAdmissionWebhook);或者是否应该更改请求 (MutatingAdmissionWebhook)。

开放策略代理 (OPA) 是一个开源策略引擎。 OPA 提供用于定义策略的高级语言。 可以使用 OPA 在你自己的微服务、CI/CD 管道和 Kubernetes 中强制实施策略。 适用于 Kubernetes 的 Azure Policy 将 Azure 策略转换为要部署在 Kubernetes 群集上的 OPA 语言。

OPA Gatekeeper 是特定于 Kubernetes 的 OPA 实现,它与 Kubernetes API 进行集成。 它与前面介绍的许可 Webhook 进行集成。 你无需部署自己的 Webhook 处理程序,而是可以使用 OPA Gatekeeper 为许可 Webhook 响应提供服务。 适用于 Kubernetes 的 Azure Policy 在 Kubernetes 群集上部署 OPA Gatekeeper 以实现此功能。

1.

如何将 Azure 策略分配给组织的所有订阅?

2.

如何使用 Azure 确保在 Kubernetes 群集中创建的所有 Pod 都配置了请求和限制,并拒绝创建没有这些配置的 Pod?

3.

将“Kubernetes 群集容器应仅使用允许的映像”策略分配给 Kubernetes 群集的资源组。 如果现有 Pod 不使用允许的映像,会发生什么情况?