在传统物理网络环境下,划分VLAN,分配网段,设置路由是个网工应该熟悉的内容。在SDN环境下,比如neutron虚拟网络,我们用API创建网络,子网,虚拟路由器,负载均衡和防火墙,这些还是太网络化了。GBP,基于组的策略模型,开启了新型的网络设计时代,我感觉就是“没有网络”。现在实现GBP的项目比较多,比如OpenStack的GBP,OpenDaylight的GBP和思科的ACI。OpenStack的GBP除了可以驱动Neutron外,还能和OpenDaylight GBP和思科的ACI集成。本文针对OpenStack的GBP进行阐述。

一、GBP介绍

GBP,group-based policy,基于组的策略,提供了声明式的、从使用者意图出发的一种架构。在这个模式下,用户面对的是应用架构本身,而不是Neutron中的各种网络元素。在使用时,用户定义各种“组”,然后定义“组”之间的网络特性,包括安全,性能,网络服务等。

它的核心模型有:
1. 策略目标(Policy Target),定义策略所作用的对象,一般定义为可以定位的个体,比如一个网卡,一个IP地址。
2. 策略目标组(Policy Target Group),代表一组策略目标,这组目标有一定的相同的属性。策略目标组能提供或消费规则集。
3. 策略规则集(policy rule set),是一组策略规则。
4. 策略规则(policy rule)是一分类器和动作对。
5. 分类器(policy classier),一个对网络流量,比如IP地址,mac地址,方向进行分类的手段
6. 动作(policy action),在分类器对流量进行分类后,针对这个种类的流量的动作,包括允许(allow),从定向(redirect),丢弃(drop)。

除了上述的模型,它还定义了下面的网络策略:
1. 二层策略(L2 Policy), 它定义了一个策略目标组的集合。代表一个二层网络交换域。可以定义一些二层网络属性,比如是否允许二层广播。二层策略必须引用一个三层策略。
2. 三层策略(L3 Policy)。定义了一个三层路由空间,可以包括多个二层策略。
3. 网络服务策略(Network service policy),为网络服务链(service function chaining)定义一些特殊的网络参数。

它们之间的关系可以表述为:

这个模型和neutron模型的映射关系如下:

二、组件架构

模型定义了之后,就是看看它的实现构成。

除了REST Ful API外,它对外提供了命令行,界面和heat的接口。向下则是两种驱动,neutron和native驱动。Neutron驱动结合neutron社区的ML2 实现,使用neutron的网络模型来实现GBP。native 驱动是纯的第三方驱动,比如ACI,ODL。它们在形成neutron模型之后,结合自身的ML2实现,调用各自的SDN controller。ACI调用APIC,ODL则是OpenDaylight GBP。

三、内部实现

GBP项目的代码是从neutron库分支出来的,在部署的时候也借壳于neutron server。如下所示,GBP项目提供了两个接口,一是GBP模型本身,另外一个是网络链接口。本文只讲GBP这个模型接口。

GroupPolicyPlugin接口实现了GBP模型,它有两个主要的成员变量,如下图

ExtensionManager负责管理扩展,在neutron.conf中有extension_drivers配置项来配置系统支持的扩展功能。
PolicyDriverManager管理前面我们所说的neutron和第三方驱动。在neutron.conf中policy_drivers配置项来配置这些驱动。Implicit_policy驱动会创建缺省的二层和三层policy。Resource_mapping则是把GBP模型映射到neutron模型的驱动。

上图显示了系统定义的一些驱动,其中odl和apic都是继承自resource_mapping

四、操作过程

下面就一个简单的应用模型介绍GBP的经典操作过程。

在这个应用中,我们有两个策略目标组web和client。Web组放置起开80和443端口的虚拟机,提供web服务。而Client组则是要访问web服务的虚拟机。操作过程如下:
1.创建web策略目标组
2.创建client策略目标组
3.创建动作allow
4.创建分类器http和https,分别指定80和443端口,方向为in。
5.创建policy 规则 webrule和websrule,分别添加分类器http和https
6.创建policy 规则组 web,添加webrule和websrule规则
7.更改web策略目标组,使其提供web规则组
8.更改client策略目标组,使其消费web规则组

这些操作完后,在horizon中的界面就如下所示:

接下来就是启动虚拟机了。一般情况下,不能使用先前neutron网络下启动虚拟机的方式使其进入策略目标组。下面我们先介绍基于客户端工具的方法:

第一步: 在策略目标组中创建端口

第二步:使用这个端口创建虚拟机:

除了这种方式,我们可以在horizon的界面上创建虚拟机,但不是以前的操作入口,操作过程如下:

第一步:找到策略目标组:

第二步:点击策略目标组web,进入这个组的界面:

第三步:点击“create member”,调出虚拟机创建界面:

这个界面和普通的虚拟机创建界面貌似没什么区别,但是在“访问&安全”这个界面上,我们是不能选择“安全组”的,因为GBP会帮我们管理安全组。我们到“组”这个特别标签看看。

第四步:填写所在的“目标策略组”:

我们可以点击“+”和“-”来调整组成员身份。

五、结语

GBP这个项目目前进展还算比较顺利,但是社区参与度不是很大,基本由思科在主导。本文只阐述了其中一个部分,服务链还没有阐述。但是根据我们PTL沟通下来,这个项目可能还需要一个比较大的代码调整,特别是服务链这块。GBP项目现在只在网络领域,将来会扩展到其它的范围。

整体来说GBP是一个新思想,给用户的不是那些创建网络,路由,子网等比较低级的操作接口,这个应该属于基础设施部分。GBP提供给用户的是一个更高级的抽象,直接面对应用部署,使得用户可以直接表达自己的“应用意图”。
最后感谢张磊同学搭建环境。
 
来源:九州云 龚永生

基于组的策略(GBP)开启新型网络设计时代的更多相关文章

  1. Mysql 5.7 基于组复制(MySQL Group Replication) - 运维小结

    之前介绍了Mysq主从同步的异步复制(默认模式).半同步复制.基于GTID复制.基于组提交和并行复制 (解决同步延迟),下面简单说下Mysql基于组复制(MySQL Group Replication ...

  2. 基于C#.NET的高端智能化网络爬虫(一)(反爬虫哥必看)

    前两天朋友发给我了一篇文章,是携程网反爬虫组的技术经理写的,大概讲的是如何用他的超高智商通过(挑衅.怜悯.嘲讽.猥琐)的方式来完美碾压爬虫开发者.今天我就先带大家开发一个最简单低端的爬虫,突破携程网超 ...

  3. MySQL 5.7基于组提交的并行复制

    参考链接: http://mysql.taobao.org/monthly/2016/08/01/ https://www.kancloud.cn/thinkphp/mysql-parallel-ap ...

  4. 基于RxJava2+Retrofit2简单易用的网络请求实现

    代码地址如下:http://www.demodashi.com/demo/13473.html 简介 基于RxJava2+Retrofit2实现简单易用的网络请求,结合android平台特性的网络封装 ...

  5. 【转】 基于C#.NET的高端智能化网络爬虫

    [转] 基于C#.NET的高端智能化网络爬虫 前两天朋友发给我了一篇文章,是携程网反爬虫组的技术经理写的,大概讲的是如何用他的超高智商通过(挑衅.怜悯.嘲讽.猥琐)的方式来完美碾压爬虫开发者.今天我就 ...

  6. 基于MACVLAN配置VMWARE虚拟机中容器网络

    基于MACVLAN配置VMWARE虚拟机中容器网络 测试部环境组 201711 0 文档说明 MACVLAN是docker的一种支持跨主机网络的driver.macvlan本身是linux kerne ...

  7. TKE基于弹性网卡直连Pod的网络负载均衡

    前言 Kubernetes在集群接入层设计并提供了两种原生资源Service和Ingress,分别负责四层和七层的网络接入层配置. 传统的做法是创建Ingress或LoadBalancer类型的Ser ...

  8. 【转】 基于C#.NET的高端智能化网络爬虫 2

    [转] 基于C#.NET的高端智能化网络爬虫2 本篇故事的起因是携程旅游网的一位技术经理,豪言壮举的扬言要通过他的超高智商,完美碾压爬虫开发人员,作为一个业余的爬虫开发爱好者,这样的言论我当然不能置之 ...

  9. 基于RYU restful api实现的VLAN网络虚拟化

    基于RYU restful api实现的VLAN网络虚拟化 前言 本次实验是基于OVS的VLAN虚拟化简易实践方案的进一步的实验,采用RYU restful api进行配置.本质上和上次实验没什么差, ...

随机推荐

  1. jQuery之map()和get() map().get().join意思

    jQuery下有个概念叫“类数组”,比如$( " li " ),当取到一个集合的时候,会有数组的一些属性,但是instancseof Array仍然是false.但是var a=$ ...

  2. redis集群报错,(error) MOVED 15495 127.0.0.1:7003

        节点会对命令请求进行分析和key的slot计算,并且会查找这个命令所要处理的键所在的槽.如果要查找的哈希槽正好就由接收到命令的节点负责处理, 那么节点就直接执行这个命令. 另一方面, 如果所查 ...

  3. 修改本机域名localhost为任意你想要的名称

    web项目研发中,测试的时候项目路径与发布以后的路径不一致,项目组之间的路径不一致,这样会加大工作量,这个时候我们可以统一一下开发的路径,这样可以省很多事,话不多说,看下面教程: 在系统盘中的如下路径 ...

  4. MySQL中的索引提示Index Hint

    MySQL数据库支持索引提示(INDEX HINT)显式的高速优化器使用了哪个索引.以下是可能需要用到INDEX HINT的情况 a)MySQL数据库的优化器错误的选择了某个索引,导致SQL运行很慢. ...

  5. Linux vim编写程序时出现高亮字符,如何取消?

    在“命令模式”下输入“:nohl“,再按回车,便可以取消高亮显示.

  6. boost之实用工具

    1.noncopyable用于禁止复制和拷贝的类继承.声明拷贝和赋值函数为私有,将运行时的错误转化为编译期的错误. #include <iostream> #include <boo ...

  7. PHP获取微信openid 简单教程

    //***方法一 获取code https://open.weixin.qq.com/connect/oauth2/authorize?appid=这里是你的公众号的APPID&redirec ...

  8. 系统日志服务rsyslog

    一.系统日志服务rsyslog:多线程,可以基于UDP.TCP.TLS协议进行远程通信,还可以将数据存储到MySQL.PGSQL.Oracle,强大的过滤器,可实现过滤日志信息中任何部分,可以自定义输 ...

  9. Vim 指令一览表

    vim 程序编辑器 移动光标的方法 h 或 向左箭头键(←) 光标向左移动一个字符 j 或 向下箭头键(↓) 光标向下移动一个字符 k 或 向上箭头键(↑) 光标向上移动一个字符 l 或 向右箭头键( ...

  10. linux下从源代码安装git的问题(install from source)

    安装环境:centos7.2 安装依赖包: yum install -y gcc .el7..x86_64 openssl-devel.x86_64 yum install -y curl.x86_6 ...