Horizon 中的抽象策略定义

https://blueprints.launchpad.net/congress/+spec/horizon-policy-abstraction

Congress 旨在为任何云服务提供一个可扩展的开源框架,用于治理和法规遵从性。用户可以通过纯粹的 Datalog 在 Congress 中定义策略。但是,Datalog 与数据表一起使用,对于策略来说是一个非常困难和复杂的描述。用户可能在理解和部署 Datalog 策略时遇到一些问题。因此,本规范为策略提供了一个抽象,并在 Horizon 中以抽象形式展示它,这将有助于用户表达他们的策略。

问题描述

即使对于不熟悉 Datalog 的用户来说,Datalog 也不是直观易用的,并且由于复杂的逻辑,在将实际意图转换为 Datalog 时,可能会导致一些误解。

提议的变更

Congress 通过定义违规状态和违规行为使整个云环境符合规范。

Congress 中的策略可以用 BNF 表示如下:

Congress Policy ::= violation condition, "do" action for violation

因此,策略抽象化是为了抽象违规状态和相应的操作,使策略更直观、更易于使用。

通过分析典型场景,违规主要可以分为两部分。一部分是对象属性的约束,另一部分是多个对象属性之间的关系的约束。所有对象和约束不仅仅是简单的数据源表集合,而是可以根据其功能和关系划分为一些类别。因此,用户只需要选择他们关心的对象,而无需担心它们位于哪个表中。

违规条件可以用 BNF 表示如下:

violation condition ::=object attribute constraint (value | object attribute)
object attribute::=object "." attribute

对于任何违规状态,Congress 将采取一些行动,例如监控、主动和被动。虽然 Congress 已经实现了违规监控,但改变云状态以使云环境符合规范也是 Congress 的一个重要功能。因此,策略抽象将为不同的对象提供一些可选的被动操作来解决违规行为。

违规状态的动作可以用 BNF 表示如下:

action ::= ("monitor"| "proactive"| "reactive") data

因此,Congress 中的策略可以抽象为“名称”、“对象”、“违规条件”、“操作”和“数据”。

其中,“名称”元素定义了策略的标记,用于作为策略的唯一标识。

“对象”元素定义了此策略关注的所有对象。它们不仅仅是数据源表的简单显示,而是一个组织好的集合,包含不同对象之间的关系,例如,“服务器”、“网络”、“主机”、“子网”等。例如,“统计”表不会作为对象出现,而是会成为其他对象的属性,例如,“服务器”、“网络”。另一个例子是用户可以选择“服务器”和“网络”,而无需关心将它们连接在一起的内容(实际上是“端口”)。

“违规条件”元素定义了对象属性的状态,这些状态可能产生违规,并且约束将包括比较、算术运算和一些预定义的关联/函数,例如,“same_group”。

“操作”元素定义了需要为该策略采取的行动,并且操作将包括“主动”、“监控”和一些特定的操作,例如,“删除”、“移除”。所有这些操作都取决于底层组件的能力。

“数据”元素定义了执行操作时获取或需要的信息,例如,当监控服务器违规时,用户可以将“数据”定义为服务器名称作为返回参数。

也就是说,Congress UI 将提供许多策略元素作为下拉列表,这些元素的组合将形成各种策略。所有这些元素都来自典型场景的总结和底层组件的能力。用户需要选择哪些元素可以满足他们的需求。然后 UI 将将 UI 中的信息转换为 Datalog。

备选方案

N/A

策略

这里有一个例子,以抽象形式在 Horizon 中表达典型的策略。

示例:连接到 VM 的每个网络必须是公共网络,或者由与 VM 位于同一组中的某人拥有。

对于这个例子,用户关心“服务器”和“网络”,因此用户将从下拉列表中选择这两个对象。在用户确定对象后,将确定相应的可选违规状态,其中包括这两个对象的属性和一些预定义的关联,因此用户可以选择“not same_group”并选择不在同一组中的人。所有这些选择也将显示为下拉列表。并且用户需要选择此违规的动作和数据。例如,用户选择“监控”,服务器和网络的属性将出现在“数据”中。

在这个策略中,用户可以创建如下策略:

name

对象

违规状态

操作

数据

policy_1

servers networks

not equal(networks.share, public) not same_group(servers.tenant, networks.tenant)

monitoring

servers.name

策略操作

该操作可以是监控、主动或一些可以使云环境符合规范的执行操作。

数据源

N/A

数据模型影响

N/A

REST API 影响

N/A

安全影响

用户输入的所有参数都需要满足预定义的标准,例如,如果“违规条件”中输入的值在合理范围内(例如,CPU 利用率的 0-100%)。

通知影响

N/A

其他最终用户影响

最终用户能够在 Horizon 中编写策略,并使用一些下拉列表和一些简单的输入来创建策略。然后 Horizon 将将 UI 中的信息转换为 Datalog,Datalog 将在 Congress 中处理。

性能影响

N/A

其他部署者影响

N/A

开发者影响

N/A

实现

负责人

主要负责人

张亚丽

其他贡献者

徐 Jim; 夏引本

工作项

  • 以抽象形式编写策略规则和操作。

  • 建立抽象形式与 Datalog 之间的映射关系,以便用户可以在 UI 中而不是 Datalog 中编写策略。

  • 将信息从 Horizon 传递到 Congress 以完成策略创建。

依赖项

N/A

测试

需要用各种场景进行测试。

文档影响

在 UI 中添加策略抽象说明。

参考资料

N/A