Neutron安全组分析(一)

1.       neutron安全组介绍

neutron安全组由L2 Agent来实现,也就是说L2Agent,比如 neutron-linuxbridge-agent,会将安全组规则转换成IPTables规则。一般发生在所有计算节点上,可以作用于任何进出虚拟机的流量。

2.       数据模型

2.1 eutron安全组共涉及五张表:

Ports                                     存放port信息

Securitygroupportbindings                 存放port和安全组绑定关系

Securitygroups                            存放安全组信息

Default_security_group                    存放默认安全组信息                       

Securitygrouprules                        存放安全组规则信息

这五张表之间的关系如图所示:


Ports通过port_id和Securitygroupportbindings关联。Securitygroupportbindings、 Default_security_group和Securitygrouprules通过security_group_id和Securitygroups关联。Default_security_group中存放租户默认安全组,每个租户有且只有一个默认安全组。

2.2 数据表结构说明

表名:ports

列名

类型

允许为空

主键

外键/属性

说明

tenant_id

Varchar(255)

租户id

id

Varchar(36)

port id

name

Varchar(255)

Port name

network_id

Varchar(36)

是/ RESTRICT

network id。和networks表关联,删除networks中的network时,如果本表有数据,则不允许删除。

mac_address

Varchar(32)

Mac address

status

Varchar(16)

Port状态 ACTIVE BUILD

device_id

Varchar(255)

Device id

device_owner

Varchar(255)

Device owner

 

表名:Securitygroupportbindings

列名

类型

允许为空

主键

外键

说明

security_group_id

Varchar(36)

是/RESTRICT

安全组id。和Securitygroups表关联,删除Securitygroups中的安全组时,如果本表有数据,则不允许删除。

port_id

Varchar(36)

是/CASCADE

port id。和ports表关联,删除ports中的port,则删除本表中port_id相同的项。

 

表名:Securitygroups

列名

类型

允许为空

主键

外键

说明

tenant_id

Varchar(255)

租户id

id

Varchar(36)

安全组id

name

Varchar(255)

安全组名字

description

Varchar(255)

安全组描述

 

表名:Default_security_group

列名

类型

允许为空

主键

外键

说明

tenant_id

Varchar(255)

租户id

id

Varchar(36)

是/CASCADE

默认安全组id。删除Securitygroups中的Securitygroup,则删除本表中id相同的项。

 

表名:Securitygrouprules

列名

类型

允许为空

主键

外键

说明

tenant_id

Varchar(255)

租户id

id

Varchar(36)

安全组id

security_group_id

Varchar(36)

是/CASCADE

安全组id。删除Securitygroups中的Securitygroup,则删除本表中id相同的项。

remote_group_id

Varchar(36)

是/CASCADE

远端安全组id。删除Securitygroups中的Securitygroup,则删除本表中id相同的项。

direction

enum

方向,取值ingress、egress。

ethertype

Varchar(40)

安全组规则类型。ipv4或ipv6。

protocol

Varchar(40)

安全组规则控制的协议。

port_range_min

Int(11)

安全组规则控制的最小端口值。

port_range_max

Int(11)

安全组规则控制的最大端口值。

remote_ip_prefix

Varchar(255)

远端ip前缀。

 

3.       包类设计

虚线部分为RPC调用,箭头表示方向。双箭头则上边表示方向,下面表示回应消息。

图中的类说明:


Neutron-server plugin:Ml2Plugin、SecurityGroupServerRpcMixin。Ml2Plugin提供基本资源的操作,SecurityGroupServerRpcMixin提供安全组、安全组规则的操作。

Ml2Plugin继承的类有:SecurityGroupServerRpcMixin(继承SecurityGroupDbMixin(继承SecurityGroupPluginBase))。

 

RPC:SecurityGroupAgentRpcApiMixin、SecurityGroupServerRpcCallback、DhcpAgentNotifyAPI、DhcpRpcCallback。SecurityGroupAgentRpcApiMixin提供发送给linuxbridge安全组消息的接口。SecurityGroupServerRpcCallback提供接收linuxbridge安全组消息的方法。DhcpAgentNotifyAPI提供发送给dhcp消息的接口。DhcpRpcCallback提供接收dhcp消息的方法。

 

Linuxbridge agent:SecurityGroupServerRpcApi、LinuxBridgeNeutronAgentRPC、SecurityGroupAgentRpc。SecurityGroupServerRpcApi提供发送给neutron-server安全组消息的接口。LinuxBridgeNeutronAgentRPC提供linuxbridge的启动流程和轮询任务的处理方法。SecurityGroupAgentRpc提供接收neutron-server安全组消息的方法。

LinuxBridgeNeutronAgentRPC在启动的时候,设置SecurityGroupServerRpcApi作为sg_plugin_rpc,设置SecurityGroupAgentRpc作为自己的sg_agent,设置LinuxBridgeRpcCallbacks作为endpoints。LinuxBridgeRpcCallbacks继承自SecurityGroupAgentRpcCallbackMixin,而在SecurityGroupAgentRpcCallbackMixin的安全组相关方法中会调用sg_agent(SecurityGroupAgentRpc)中的对应方法。

 

Dhcp agent:DhcpAgent、DhcpPluginApi、DhcpLocalProcess、DeviceManager、DhcpBase。

DhcpPluginApi提供发送给neutron-server消息的接口。DhcpAgent提供接收neutron-server消息的方法。DhcpBase是DhcpLocalProcess的基类,DhcpLocalProcess、DeviceManager是dhcp agent的处理driver,负责处理接收的RPC消息,并调用linux的driver进行处理。

 

Driver:IptablesFirewallDriver、IptablesManager。这两个类主要提供iptables相关操作。

IptablesFirewallDriver继承自FirewallDriver类

你可能感兴趣的:(neutron)