原文链接:https://blog.csdn.net/bc_vnetwork/article/details/65630355

1.  Service Function Chain概述

Neutron的SFC (Service Function Chaining, SFC, 业务链)是由华为主导并开发的一个neutron下的服务框架。

其目的是动态建立服务链使不同租户的流量可以按照不同顺序导向不同的服务功能模块。其概念类似于策略路由, 即SFC使网络报文流量走特定的路径,而不是通过IP目的地址来查看路由表得最终目的地。

SFC主要应用于SDN网络技术中, 通常用来联同NetworkFunction Virtualization(网络功能虚拟化)来实现特定功能。举个例子, 我们可以强制某流量从A到B必须经过中间的防火墙, 或者不经过防火墙,而不管当前的路由表。

2.  Service Chain操作和API

a)   概念

Service Function:服务功能, 在这里可以认为就是提供业务的虚拟机。虚拟机上会有1个或多个的网络端口(port)。

Port chain(即Service Function Path)包括:

1.neutron ports的列表, 用于定义服务功能的顺序

2.flow classifiers(流分类器)的列表, 指定分类后的流进入哪个port chain

如果一个service function有1对port,那么第一个port为入口, 第二个port为出口。

Port Pair: port chain在实际使用中会以一连串port-pair(端口对)来呈现。  如下图:

SF1,SF2, SF3为三个不同的Service Function, 其port chain可以表示为: [{'p1': 'p2'}, {'p3':'p4'}, {'p5': 'p6'}]

{'p1','p2'}即为一个port-pair, 其中第1个端口为入端口, 第2个端口为出端口。

p1为整条port-chain的头部, 而p6为port-chain的尾部。

+------+      +------+        +------+

| SF1  |      | SF2  |        | SF3  |

+------+      +------+        +------+

p1|   |p2     p3|   |p4       p5|   |p6

|   |         |   |           |   |

->---+   +---------+   +-----------+   +---->

Port Pair Group: 在实际使用中, port-chain较多较复杂的时候, 为了简化操作, 把某些可以复用的多个port-pair定义为  port-pair-group, 类似于防火墙或qos中的policy。

同时,port-pair-group可指定lb_fields, 用来做多条业务链的负载均衡。

如: 有2条port-chain, port-chain-1定义为[{'p1': 'p2'}, {'p3': 'p4'}, {'p5': 'p6'}, {'p7': 'p8'}]

port-chain-2定义为[{'p5': 'p6'}, {'p7': 'p8'},{'p1': 'p2'}, {'p3': 'p4'}]

我们可以把其中相同部分: [{'p1': 'p2'}, {'p3': 'p4'}]定义为一个port-pair-group:port-pair-group-1

[{'p5':'p6'}, {'p7': 'p8'}]定义为一个port-pair-group:port-pair-group-2

那么: port-chain-1可以简化为: [port-pair-group-1,port-pair-group-2]

port-chain-2可以简化为: [port-pair-group-2, port-pair-group-1]

Flow classifier: 其作用在于选择能够访问port-chain的流量, 只要有流量匹配到了flow classifier则会被重定向到  port-chain的第 1个端口。

目前可以匹配的报文字段有: ethertype, protocol, source-port, dest-port. source-ip-prefix,   dest-ip-prefix, logical-source-port(neutron中的port端口),logical-dest-port(neutron中的port端口), L7层某些字  段。

b)   命令行

目前在openstack client上已经可以使用SFC相关命令行:

创建port-pair

openstack sfc port pair create [-h]

[--description DESCRIPTION]

--ingress INGRESS

--egress EGRESS

[--service-function-parameters [correlation=CORRELATION_TYPE, weight=WEIGHT]]

PORT-PAIR-NAME

* 注:

--service-function-parameters可指定参数:

correlation:默认none,目前还可选择mpls。由用户定义该port-pair上的报文与业务链的关联机制, 即底层如何实现业务链封装。

weight:经过该port-pair的流量权重, 默认1, 可以配置正整数

创建port-pair group

openstack sfc port pair group create [-h]

[--description DESCRIPTION]

[--port-pairs PORT-PAIR]

[--port-pair-group-parameters [lb_fields=LB_FIELDS]]

PORT-PAIR-GROUP-NAME

* 注:

--port-pairs可连续指定多个port-pair

--port-pair-group-parameters可指定参数:

默认空列表,可选择loadbalance的报文字段: eth_src, eth_dst, ip_src, ip_dst, tcp_src, tcp_dst, udp_src, udp_dst, 可自由组合, 通过'&'连接。如eth_src&tcp_src。

创建flow-classifier

openstack sfc flow classifier create [-h]

[--description DESCRIPTION]

[--protocol PROTOCOL]

[--ethertype {IPv4, IPv6}]

[--source-port SOURCE_PORT]

[--destination-port DESTINATION_PORT]

[--source-ip-prefix SOURCE_IP_PREFIX]

[--destination-ip-prefix DESTINATION_IP_PREFIX]

[--logical-source-port LOGICAL_SOURCE_PORT]

[--logical-destination-port LOGICAL_DESTINATION_PORT]

[--l7-parameters type=TYPE[,url=URL_PATH]]

FLOW-CLASSIFIER-NAME

* 注:

--logical-source-port必须要指定

--l7-parameters目前还未实现。估计以后可指定http报头中的相关字段, 如: uri path, cookie, hostname, file_type, header中的字段等等。

从实际行为上来看, flow classifier会应用在每一跳的入口处

创建port-chain

openstack sfc port chain create [-h]

[--description DESCRIPTION]

--port-pair-group PORT-PAIR-GROUP

[--flow-classifier FLOW-CLASSIFIER]

[--chain-parameters [correlation=CORRELATION_TYPE, symmetric=BOOLEAN_TYPE]]

PORT-CHAIN-NAME

* 注:

--port-pair-group可连续指定多个

--chain-parameters可指定参数:

correlation:默认: mpls,目前只能选择mpls。由用户定义该port-chain上的报文与业务链的关联机制, 即底层如何实现业务链封装。

symmetric:是否为对称port chain,默认False。如果为symmetric, 则该业务链底层的数据层面会自动双向都打通, 否则只打通单个方向。

c)   API规范

由于篇幅限制, API规范不再详细列出,  与命令行对应, 可参考官方文档: https://docs.openstack.org/developer/networking-sfc/api.htm

OpenStack 业务链networking-sfc介绍 (1) - 概述的更多相关文章

  1. HINOC2.0标准介绍(1):概述

    本文首发于'瀚诺观察'微信公众号 摘要: 2016年3月18日,国家新闻出版广电总局批准发布了行业标准GY/T 297-2016<NGB宽带接入系统HINOC2.0物理层和媒体接入控制层技术规范 ...

  2. OpenStack 业务链networking-sfc介绍 (2) - 底层原理

    原文链接:https://blog.csdn.net/bc_vnetwork/article/details/65630475 1.  SFC底层实现原理 port chain和ovs driver/ ...

  3. Openstack 网络服务 Neutron介绍和控制节点部署 (九)

    Neutron介绍 neutron是openstack重要组件之一,在以前是时候没有neutron项目. 早期的时候是没有neutron,早期所使用的网络的nova-network,经过版本改变才有个 ...

  4. Openstack 网络服务 Neutron介绍和控制节点部署 (十)

    Neutron介绍 neutron是openstack重要组件之一,在以前是时候没有neutron项目. 早期的时候是没有neutron,早期所使用的网络的nova-network,经过版本改变才有个 ...

  5. Openstack Basic Networking 翻译

    自己翻译,加强理解.并学习英文和写作. 英文地址:http://docs.openstack.org/networking-guide/intro_basic_networking.html 目录: ...

  6. OpenStack 存储服务 Cinder介绍和控制节点部署(十五)

    Cinder介绍 OpenStack块存储服务(cinder)为虚拟机添加持久的存储,块存储提供一个基础设施为了管理卷,以及和OpenStack计算服务交互,为实例提供卷.此服务也会激活管理卷的快照和 ...

  7. OpenStack 计算服务 Nova介绍和控制节点部署(七)

    介绍 Nova是openstack最早的两块模块之一,另一个是对象存储swift.在openstack体系中一个叫做计算节点,一个叫做控制节点.这个主要和nova相关,我们把安装为计算节点nova-c ...

  8. OpenStack Object Storage(Swift)概述

    概述 OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性.冗余和持久性. Swift并不是文件系统或者实时 ...

  9. OpenStack 存储服务 Cinder介绍和控制节点部署 (十三)

    Cinder介绍 OpenStack块存储服务(cinder)为虚拟机添加持久的存储,块存储提供一个基础设施为了管理卷,以及和OpenStack计算服务交互,为实例提供卷.此服务也会激活管理卷的快照和 ...

随机推荐

  1. WPF MVVM

    MVVM全称:Model-View-ViewModel 优点:MVVM的引入使程序实现了松耦合设计,UI层与业务逻辑可以并行设计 1.Model:对现实世界的抽象 比如:需要做一个学校的管理系统,学校 ...

  2. URL的名称设置

    1. 对于login.html 此为跳转文件, 加入了参数nid,在views.py中进行关于request.POST.get()的文件中获取 <a href='/detail?nid={{k} ...

  3. log.error(msg)和log.error(msg,e)的显示区别

    log.error(msg): [2017-10-18 11:31:07,652] [Thread-7] (CmsCtlDataUploadFileExchange.java:50) ERROR co ...

  4. JS调用webservice的两种方式

    协议肯定是使用http协议,因为soap协议本身也是基于http协议.期中第二种方式:只有webservice3.5以后版本才可以成功 第一种方式:构造soap格式的body,注意加粗的黄色标识,比如 ...

  5. 与DispatcherServlet的 url-pattern配置问题

    <!--当DispatcherServlet 的url-pattern配置成/ 访问不到静态资源 的解决方法1:使用Tomcat默认的Servlet解决 --> 在web.xml中加以下代 ...

  6. Common Lisp

    [Common Lisp] 1.操作符是什么? 2.quote. 3.单引号是quote的缩写. 4.car与cdr方法. 5.古怪的if语句. 6.and语句. 7.判断是真假. null 与 no ...

  7. [/usr/local/openssl//.openssl/include/openssl/ssl.h] Error 127

    /bin/sh: line 2: ./config: No such file or directorymake[1]: *** [/usr/local/ssl/.openssl/include/op ...

  8. 非root用户使用1024以下端口

      如果你有一个最新的内核,确实有可能使用它作为非root用户启动服务,但绑定低端口.最简单有效的办法是: #setcap 'cap_net_bind_service=+ep' /path/to/pr ...

  9. [leetcode]253. Meeting Rooms II 会议室II

    Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...

  10. mybatis xml中常见配置demo

    新增: <insert id="insertSelective" parameterType="map" > insert into BS_CHNG ...