为了确保一致性和合规性,每个组织都需要具有在其环境中定义和执行策略的能力。(Open Policy Agent)是一种策略引擎,可对云原生环境进行基于策略的控制。Rancher 提供了在 Kubernetes 集群中启用 OPA Gatekeeper 的功能,并且还安装了一些内置策略定义,也称为约束模板。

OPA 提供了一种声明性语言,您可以使用代码来定义策略,并具有扩展简单 API 的能力以减轻策略决策的负担。

OPA Gatekeeper 是一个支持 OPA 与 Kubernetes 集成的项目。OPA Gatekeeper 提供:

  • 可扩展的参数化策略库。
  • 用于实例化策略库的原生 Kubernetes CRD,也称为“约束”。
  • 原生 Kubernetes CRD,用于扩展策略库,也称为“约束模板”。
  • 审核功能。

要了解有关 OPA 的更多信息,请参阅。

Kubernetes 提供通过准入控制器(Admission Controller)Webhooks 扩展 API Server 功能的能力。在创建,更新或删除资源时,Kubernetes 就会调用这些 Webhooks。 Gatekeeper 被作为验证 Webhook,并执行 Kubernetes CRD 中定义的策略。除了使用准入控制外,Gatekeeper 还提供了审核 Kubernetes 集群中现有资源并标记当前违反策略的功能。

Rancher 的 Helm System Chart 里包含了 OPA Gatekeeper。启用后,它将被安装到命名空间中。

在集群中启用 OPA Gatekeeper

  1. 在左侧菜单上,展开集群菜单,然后单击OPA Gatekeeper
  2. 要使用默认配置安装 Gatekeeper,请单击启用具有默认设置的 Gatekeeper(v0.1.0)
  3. 要更改任何默认配置,请单击自定义 Gatekeeper yaml 配置

约束模板 是 Kubernetes CRD,用于定义 Gatekeeper 将实施的 OPA 策略的结构和 Rego 逻辑。有关 Rego 策略语言的更多信息,请参阅。

要列出集群中安装的约束模板,请转到 OPA Gatekeeper 下的左侧菜单,然后单击模版

Rancher 还支持通过导入 YAML 文件的方式来创建自己的约束模板。

创建和配置约束

约束是 Kubernetes CRD,用于定义在什么范围内实施特定约束模板。完整的策略由约束模板和约束共同定义。

要列出已安装的约束,请转到 OPA Gatekeeper 下的左侧菜单,然后单击约束

可以从约束模板创建新约束。

Rancher 提供了通过表单的形式创建约束的能力,该形式使您可以输入各种约束字段。(在 2.4.2 中,两个默认的约束模版需要数组类型的参数,由于仪表盘目前不支持数组的参数,所以请使用 YAML 使用 Rancher 的两个默认约束模版)。

还可以使用编辑 YAML 选项来配置约束的 YAML 定义。

创建约束后,请确保它不适用于任何 Rancher 或 Kubernetes 系统命名空间。如果不排除系统命名空间,则可能会看到其下的许多资源都被标记为违反了约束。

同样,该约束可能会干扰其他 Rancher 功能并阻止系统工作负载的部署。为了避免这种情况,请从约束中排除所有 Rancher 专用的命名空间。

强制执行措施拒绝时,该约束将立即启用,并将拒绝任何违反已定义策略的请求。默认情况下,强制值为拒绝

强制执行措施试运行时,则任何违反策略的资源都将仅记录在约束的状态字段下。

要强制执行约束,请使用表单创建约束。在强制执行措施字段中,选择拒绝

集群中的审核和违规

OPA Gatekeeper 会定期对集群进行审核,以检查是否有任何现有资源违反任何强制约束。启用 Gatekeeper 时可以配置(默认值为 300s)。

在 Gatekeeper 页面上,列出了所有违反约束的情况。

同样在约束下,可以找到违反约束的次数。

每个约束的详细信息视图列出了有关违反约束的资源的信息。

  1. 导航到集群的仪表板视图
  2. 在左侧菜单上,展开集群菜单,然后单击OPA Gatekeeper
  3. 单击 省略号 > 禁用

结果: 禁用 OPA Gatekeeper 后,所有约束模板和约束也将被删除。