将 Congress 表转换为基于 Neutron Group 的策略表

https://blueprints.launchpad.net/congress/+spec/congress-gbp-translation

本文档描述了如何将 Congress 策略与 Neutron 基于 Group 的策略 (GBP) 集成。

问题描述

Congress 提供了一种机制,允许 OpenStack 客户端定义应用于所有 OpenStack 组件(包括网络)的策略。Neutron 基于 Group 的策略为定义端点组之间的网络连接提供了一个高级抽象。

将 Congress 和 GBP 集成是可取的,以便 Congress 可以监控和强制执行 GBP 策略。可以使用 Congress 可达性表来指定端点之间的连接策略。可以将此表转换为一组表示 GBP 实体的表,例如策略目标组、策略规则、策略分类器等。

提议的变更

GBP 可以由以下表表示

  • 端点 (endpoint_id)

  • 端点组 (endpoint_id, endpoint_group_id)

  • 分类器 (classifier_id, port, protocol, direction)

  • 分类器组 (classifier_id, classifer_group_id)

  • 动作 (action_id, action_type, action_value)

  • 动作组 (action_id, action_group_id)

  • 策略规则 (policy_rule_id, classifier_group_id, action_group_id)

  • 合约 (contract_id, policy_rule_id)

  • 策略实例 (endpoint_group_id, relation, contract_id)

可以定义一个 Congress 可达性策略表,以形成两个端点组之间的策略

可达 (id, group1, group2, src_port, dst_port)

目标是从输入的可达策略表转换为输出的 GBP 表,使用 Congress 策略语言,并使用诸如以下函数:

PolicyInstance(group_id1, relation, contract_id) :-

reachable(contract_id, group_id1, group_id2, x, y), producer_relation(relation)

备选方案

无。

策略

以下是使用 Congress datalog 语法编写的策略示例,用于两个组(tier 1 和 tier 2)在端口 80 上双向通信。

操作员输入数据(来自操作员或云管理系统)

层级成员关系 (tier_id, vm_id)

(1, 100) (1, 101) (2, 102)

策略输入数据

层级 (tier_id)

(1) (2)

可达性策略表

可达 (id, src, dst, src_port, dst_port)

(10, tier1, tier2, *, 80)

(11, tier2, tier1, *, 80)

策略操作

这些表允许 Congress 监控和强制执行 GBP 策略。

数据源

Neutron 基于 Group 的策略。有关 GBP 的详细信息,请参见此处

https://wiki.openstack.org/wiki/GroupBasedPolicy/StackForge/repos

数据模型影响

REST API 影响

无。

安全影响

无。

通知影响

无。

其他最终用户影响

无。

性能影响

无。

其他部署者影响

无。

开发者影响

无。

实现

负责人

主要负责人

louis.fourie, alex.yip, cathy.zhang

其他贡献者

工作项

  • 定义转换函数。

  • 实现新的常量表和函数表以执行转换。

依赖项

  • 这取决于 Congress 的 GBP 数据源驱动程序的实现。

测试

将创建一些示例输入表,并通过检查输出触发表的内容来验证转换。

文档影响

所有转换细节都将记录在案。