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 的基本功能,但更改云状态以使云环境符合规范也是一个重要的功能。因此,策略抽象将为不同的对象提供一些可选的被动操作来解决违规行为。
违规状态的操作可以用 BNF 表示如下:
action ::= ("monitoring"| "proactive"| "reactive action") data
因此,Congress 中的策略可以抽象为“名称”、“对象”、“违规条件”、“操作”和“数据”。
其中,“名称”元素定义了策略的标记,用于作为策略的唯一标识。
“对象”元素定义了此策略关注的所有对象。它们不仅仅是数据源表的简单显示,而是一个组织好的集合,包含不同表和对象之间的关系,例如,“服务器”、“网络”、“主机”、“子网”等。例如,“统计”表不会作为对象出现,但它将是其他对象的属性,例如,“服务器”、“网络”。另一个例子是,用户可以选择“服务器”和“网络”,而无需关心将它们连接在一起的内容(实际上是“端口”)。
“违规条件”元素定义了对象属性的状态,这些状态可能产生违规,并且约束将包括比较、算术运算和一些预定义的关联/函数,例如,“same_group”。
“操作”元素定义了需要为该策略采取的操作,操作将包括“主动”、“监控”和一些特定操作,例如“创建”、“暂停”。所有这些操作都取决于底层组件的能力。
“数据”元素定义了执行操作时获取或需要的信息,例如,在监控服务器违规时,用户可以将服务器名称定义为返回参数。
也就是说,Congress UI 将提供许多策略元素作为下拉列表,这些元素的组合将形成各种策略。所有这些元素都来自典型场景的总结和底层组件的能力。用户需要选择哪些元素可以匹配他们的需求。
如果底层组件有扩展,任何组件的属性或打包函数,用户可以在高级 UI 中添加对象、属性并定义函数,该 UI 显示底层组件中的所有详细表和属性。在高级 UI 中定义的所有扩展都将在抽象 UI 中可用,因此用户可以通过组合这两个 UI 来自定义自己的策略。
当用户提交选择的内容时,UI 将 UI 中的信息转换为 Datalog。
备选方案¶
N/A
策略¶
这里有一个例子,以 Horizon 中的抽象形式表达典型的策略:
示例:连接到 VM 的每个网络必须是公共网络,或者由与 VM 位于同一组中的某人拥有。
对于这个例子,用户关心“服务器”和“网络”,因此用户将从下拉列表中选择这两个对象。在用户确定对象后,他们可以使用这些属性来定义违规状态。在这个例子中,违规条件是服务器租户组与网络租户组不相同。因此,用户可以选择这两个属性并将它们的关系设置为“不相等”。所有选择都将显示为下拉列表。
用户还需要选择操作和数据来定义应用于此违规的操作。例如,用户选择“监控”,服务器和网络的属性将出现在“数据”中。
在这个策略中,用户可以创建如下策略:
name |
对象 |
违规条件 |
操作 |
数据 |
policy_1 |
服务器 网络 |
不等于(networks.share, public) 不等于(servers.tenant.group, networks.tenant.group) |
监控 |
servers.name |
如果用户定义了 same_group 的打包函数,它将被添加到违规条件中,因此用户可以选择此函数并设置哪些两个属性是此函数的参数。
如果使用这种方式,上述策略将显示如下:
name |
对象 |
违规条件 |
操作 |
数据 |
policy_1 |
服务器 网络 |
不等于(networks.share, public) 不 same_group(servers.tenant, networks.tenant) |
监控 |
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