新技术论坛
搜索
查看: 557|回复: 0
打印 上一主题 下一主题

GBP 开启新型网络设计时代

[复制链接]
  • TA的每日心情
    开心
    2016-10-18 06:23
  • 签到天数: 72 天

    连续签到: 1 天

    [LV.6]常住居民II

    扫一扫,手机访问本帖
    楼主
    跳转到指定楼层
    发表于 2016-5-2 01:36:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    在传统物理网络环境下,划分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中的各种网络元素。在使用时,用户定义各种“组”,然后定义“组”之间的网络特性,包括安全,性能,网络服务等。
    它的核心模型有:
    • 策略目标(Policy Target),定义策略所作用的对象,一般定义为可以定位的个体,比如一个网卡,一个IP地址。
    • 策略目标组(Policy Target Group),代表一组策略目标,这组目标有一定的相同的属性。策略目标组能提供或消费规则集。
    • 策略规则集(policy rule set),是一组策略规则。
    • 策略规则(policy rule)是一分类器和动作对。
    • 分类器(policy classier),一个对网络流量,比如IP地址,mac地址,方向进行分类的手段
    • 动作(policy action),在分类器对流量进行分类后,针对这个种类的流量的动作,包括允许(allow),从定向(redirect),丢弃(drop)。
    除了上述的模型,它还定义了下面的网络策略:
    • 二层策略(L2 Policy), 它定义了一个策略目标组的集合。代表一个二层网络交换域。可以定义一些二层网络属性,比如是否允许二层广播。二层策略必须引用一个三层策略。
    • 三层策略(L3 Policy)。定义了一个三层路由空间,可以包括多个二层策略。
    • 网络服务策略(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服务的虚拟机。操作过程如下:
    • 创建web策略目标 组
    • 创建client策略目标组
    • 创建动作allow
    • 创建分类器http和https,分别指定80和443端口,方向为in。
    • 创建policy 规则 webrule和websrule,分别添加分类器http和https
    • 创建policy 规则组 web,添加webrule和websrule规则
    • 更改web策略目标组,使其提供web规则组
    • 更改client策略目标组,使其消费web规则组。
    这些操作完后,在horizon中的界面就如下所示:
    接下来就是启动虚拟机了。一般情况下,不能使用先前neutron网络下启动虚拟机的方式使其进入策略目标组。下面我们先介绍基于客户端工具的方法:
    第一步: 在策略目标组中创建端口
    1. $ WEB_PORT=$(gbp policy-target-create web_port_1 --policy-target-group web | awk "/port_id/ {print \$4}”)
    复制代码

    第二步:使用这个端口创建虚拟机:
    1. $ nova boot --flavor m1.tiny --image image_name --nic port-id=$WEB_PORT web-vm-1
    复制代码

    除了这种方式,我们可以在horizon的界面上创建虚拟机,但不是以前的操作入口,操作过程如下:
    第一步:找到策略目标组:
    第二步:点击策略目标组web,进入这个组的界面:
    第三步:点击“create member”,调出虚拟机创建界面:
    这个界面和普通的虚拟机创建界面貌似没什么区别,但是在“访问&安全”这个界面上,我们是不能选择“安全组”的,因为GBP会帮我们管理安全组。我们到“组”这个特别标签看看。
    第四步:填写所在的“目标策略组”:
    我们可以点击“+”和“-”来调整组成员身份。
    结语
    GBP这个项目目前进展还算比较顺利,但是社区参与度不是很大,基本由思科在主导。本文只阐述了其中一个部分,服务链还没有阐述。但是根据我们PTL沟通下来,这个项目可能还需要一个比较大的代码调整,特别是服务链这块。GBP项目现在只在网络领域,将来会扩展到其它的范围。
    整体来说GBP是一个新思想,给用户的不是那些创建网络,路由,子网等比较低级的操作接口,这个应该属于基础设施部分。GBP提供给用户的是一个更高级的抽象,直接面对应用部署,使得用户可以直接表达自己的“应用意图”。
    最后感谢张磊同学搭建环境。


    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    手机版|Archiver|开发者俱乐部 ( ICP/ISP证:辽B-2-4-20110106号 IDC证:辽B-1-2-20070003号 )

    GMT+8, 2024-12-23 05:10 , Processed in 0.149704 second(s), 22 queries .

    X+ Open Developer Network (xodn.com)

    © 2009-2017 沈阳讯网网络科技有限公司

    快速回复 返回顶部 返回列表