OpenStack Congress 简介

Congress 是云端开放的策略框架。云的操作者可以通过 Congress 在异构云环境中申报、监测、执行和审计“策略”。Congress 从云端不同的云服务中获取输入;例如在OpenStack 中,Congress 从 Nova、Neutron的网络状态中获VMs 信息。然后 Congress会把这些输入数据从这些服务中输入到策略引擎当中,在那里Congress 可以通过云运营商的政策来验证云端实际的状态。

一 Congress 架构

如上图所示Congress 主要包括策略引擎和一些云服务的driver或者其他的数据store来为策略引擎提供数据源,并根据策略完成一系列可自定义的动作。

其主要架构由Drivers、policy、Capabilities、Congress Server and API几部分构成。其中最重要的是policy、Capabilitie、auditing部分主要由三部分组成:

1、Drivers

Driver则是针对这些服务的驱动,Congress主要采用这些driver和云服务联系,并获取到源数据,提供给策略引擎来根据用户自定义的策略做处理。

目前支持的driver已经比较多了,包括:

aodh、cinder、neutronv2、swift、nova、ceilometer、keystonev3、glancev2、heat

比如nova的driver收集的信息如下:

---------------------------------------------
| VM id | Name | Status | Power State | ... |
---------------------------------------------
| 12345 | foo  | ACTIVE | Running     | ... |
| ...   |      |        |             |     |
---------------------------------------------

2、policy

policy则是由用户自定义的策略,用户可以根据目前云平台的各种driver中收集的源数据条目来设计。目前来说Congress 采用Datalog 作为一种策略的语言。

Datalog 是一种针对演绎式数据库的查询和规则语言,其在语法构成上是Prolog 的一个子集。Datalog 的查询求值是合理和完全的和甚至针对大型数据库都能够有效完成。

查询求值通常使用至上而下策略。对受限形式的 datalog 不允许任何功能符号,查询求值的安全被保证。policy Engine为策略引擎,主要负责自定义策略的设置和匹配,而下面的driver则负责各个组件源数据的收集。

3、Capabilities

当Congress上面配置好了策略,便可以根据策略做如下三种动作:

• monitoring the cloud for policy violations

就是根据上面设置的policy来分类过滤上面driver中的源数据,如果发现源数据中有和设置的policy规则有冲突的地方,那么就把有冲突的配置放到另一个自定义的表中去,比如 “error”表。便于其它模块或者云维护人员来查询。

• Proactive Enforcement

这个就是说在上面监控的基础上可以去避免冲突的发生,具体的做法其实是采用模拟的方式,比如nova 需要新配置一个VM,带有2个不同的物理网络的vnic,那么可以在congress中采用模拟增加源数据表的方式,增加一条带有2个vnic的VM的source date在nova的server表中,而原有的策略是VM只能有一个vnic那么policy就会发现这个条目和原有的policy冲突,会在error的表中加上这个VM的信息。

• Reactive Enforcement

该功能其实就是在发生violations的时候可以自动纠正问题,这个就需要采用相应的命令去执行,比如在上面的例子中,当发现新建的VM和已经有的规则有冲突,在规则中需要加上 execute表示要通过nova去删除从而修复。

• Inter active Enforcement

这个就和上面的区别是需要人的加入,有的场景下,不需要系统自动的去做操作。

4、Auditing

历史记录的查询(目前还没有实现)

要实现上面的集中功能。congress实现了下面的策略表格:

a) Classification policy .

分类的策略就是识别了哪一个是错误的,需要我们去纠正的。所以这个功能是一切的基础。

下面举个例子。

b )Enforcement Policy.

这个策略就是设置了当当前云处于某一个装态的时候,去执行什么样的操作

c) Access Control policy

这个策略是表示哪个用户在哪种情况下允许执行哪条命令。

Congress Server and API

Congress 会单独跑一个server进程,并给client测提供RESTful API服务,driver作为服务其中的一部分被执行。

API部分允许下面的操作:

a 插入和删除策略

b 检查策略是否有冲突

c 模拟输入的数据源是否和现有的策略冲突

d 执行相应的动作

从上面的介绍可以看到Congress是一个策略配置、策略检查、策略执行的组件,其源数据主要来源于各个driver的上报。对于DC的监控、管理是非常有作用的。同时针对不同策略还可以对云平台中各种资源归类收集。从而为DC中的分类处理提供了可能。

二 Congress的使用

通过上面的介绍,我们知道了,congress的架构和执行策略,下面我们通过三个简单的例子来说明congress是如何使用的。

1、分类出router名字为test的router的id

需求:

假设我们需要把所有route的name为test的route找出来

分析:

可以看到我们的需求就是要分类出所有router的名字是test的,那么我们需要分类的策略去把名字为test的router放到一个单独的表中去。

用到的Data Sources

● Neutron

步骤:

创建一个名字叫做reserved_subnet_error表,并把所有CIDR为192.168.1.0/24的子网放到这个里面

penstack congress policy rule create test_class "error(id):-

neutronv2:routers(id, col_1, col_2, col_3, "test", col_5)"

2、保留特定的子网网段,不允许使用

需求:

假设我们要保留192.168.1.0/24的子网网段不允许在当前的DC中使用。如果一旦发现有人使用了这个网段,我们就把使用的子网强制删除。

分析:

可以看到我们的需求就是需要保留192.168.1.0的网段,那么我们就需要有一个分类和一个执行的policy,分类的策略需要识别出这个网段的子网,并把这个自网放到reserved_subnet_error的表中去;而执行的策略则是把这个表中的子网删除掉,具体如下:

用到的Data Sources

● Neutron

Policy

● Reactive:

步骤:

创建一个名字叫做reserved_subnet_error表,并把所有CIDR为192.168.1.0/24的子网放到这个里面

openstack congress policy rule create test "reserved_subnet_error(x):- neutronv2:subnets(id=x, cidr='192.168.1.0/24')" --name rsv_subnet_test

删除reserved_subnet_error表里面的子网

openstack congress policy rule create test "execute[neutronv2:delete_subnet(x)]:-reserved_subnet_error(x)" --name deleted_reserved_subnet_error

3、发现在ingress方向TCP端口号25(SMTP)打开的VM

需求:

假设我们要防止有vm打开TCP端口为25的端口服务

分析:

可以看到我们的需求就是需要防止有vm打开TCP端口为25的服务,那么我们就需要有一个分类和一个执行的policy,分类的策略需要识别出这个VM,并把这个自网放到smtp_ingress的表中去;而执行的策略则是把这个vm停掉,具体如下:

用到的Data Sources

● Neutron

● Nova

Policy

● Reactive

步骤:

创建一个名字叫做smtp_ingress表,并把所有vm的安全组中TCP端口号为25的端口打开的vm放到这个表里面去

openstack congress policy rule create est "smtp_ingress(x):- nova:servers(id=x,status='ACTIVE'), neutronv2:ports(port_id, status='ACTIVE'), neutronv2:security_groups(sg,tenant_id, sgn,sgd), neutronv2:security_group_port_bindings(port_id,sg), neutronv2:security_group_rules(sg, rule_id, tenant_id, remote_group_id, 'ingress', ethertype, 'tcp', port_range_min, port_range_max, remote_ip), lt(port_range_min,26), gt(port_range_max, 24)" --name smtp_ingress

把上面表中的vm停止

openstack congress policy rule create test "execute[nova:servers.pause(id)]:-smtp_ingress(id), nova:servers(id,status='ACTIVE')" --name paused_smtp_ingress

三 congress的安装

采用devstack安装,具体步骤如下:

1、下载devstack

$ git clone https://git.openstack.org/openstack-dev/devstack.git

$ cd devstack

2、修改local.conf 增加如下内容

[[local|localrc]]

enable_plugin congress https://git.openstack.org/openstack/congress

enable_plugin heat https://git.openstack.org/openstack/heat

enable_plugin aodh https://git.openstack.org/openstack/aodh

enable_plugin ceilometer https://git.openstack.org/openstack/ceilometer

enable_service s-proxy s-object s-container s-account

3、修改run devstack

$ ./devstack.sh

发布了39 篇原创文章 · 获赞 247 · 访问量 103万+

猜你喜欢

转载自blog.csdn.net/zhongbeida_xue/article/details/104696375
今日推荐