女主宣言

SFC全称Service Function Chain,它可以自定义网络功能单元,自定义流量路径,很好给SDN网络提供了支撑。本文主要介绍了openstack中实现SFC功能的一个项目:networking-sfc。

PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!

1

SFC简介

传统网络都是物理设备,网络高级服务和网络拓扑强相关的,而且要配置复杂的路由策略或者ARP欺诈等特殊处理方法才能引导流量经过这些高级服务功能单元,所有特殊处理请求都是针对报文的二层和三层头,还有一个问题就横向扩展困难。

计算虚拟化之后,对网络也提出了虚拟化的要求,虚拟网卡,虚机交换机,虚拟路由器,overlay网络拓扑自定义,虚拟机到处漂移,传统网络添加网络高级服务的方法已经无法应对这多复杂多变的局面了。

SFC全称Service Function Chain,RFC 7665 Service Function Chaining (SFC) Architecture对SFC的体系做了很详细的介绍。end to end流量中间要有序经过FW,NAT,IDS等网络功能单元,对这些网络功能的定义和管理,以及引导流量如何有序经过这些网络功能单元就是SFC。为什么现在需要SFC,是因为以前FW,NAT,IDS等网络功能单元是实体物理设备,它的部署位置是和网络拓扑强相关的,所有流量共享这些设备,而且流量经过这些设备的序列是固定死的,总结是不够灵活,而SFC可以自定义网络功能单元,自定义流量路径,很好给SDN网络提供了支撑。

SFC首先由classifier识别出要经过这条chain的流量,然后再不断地经过这条chain上的service function,从classifier到第一个service function和从上一下service function到下一个service function,报文都要做封装,目前主推的是RFC 8300 Network Service Header (NSH),封装头一般包含chain id和chain上的位置,就是这个报文走的是哪个chain,现在在chain上走了几步了,这样靠这个头就可以保证报文走正确的chain,而且在chain上依次一个一个地走service function,不会重复走service function,也不会跳过一些service function。NSH头可以包含更多字段,携带数据以便service function之间共享信息。

从上一个service function到下一个service function由sf forwarder来转发,service function又分为service function aware和service function unaware,service function aware可以正确解析报文携带的NSH头,反之service function unaware就不能识别NSH等这样的头,需要proxy把NSH等这头去掉,再发往service function中。

2

network-sfc

networking-sfc是openstack中实现sfc功能的一个项目,openstack neutron中port是一个很重要概念,所以networking-sfc就把port连在一起形成一条chain,就是service function chain,在opnestack中叫做port chain,RFC中并没有说SFF和SF怎么传递报文,port chain明确指出用port,而且分为ingress port和egress port。networking-sfc实现了neutron extension,对外提供api,service plugin负责真正干活,plugin又包含各种各样的driver,其中就有ovs driver,ovs driver和计算节点上opensvswitch agent 中的sfc extension用rpc通信。

networking-sfc中有如下几个重要概念:

port pair

port pair就是一个service function节点上一对口,一个port是ingress进service function,另一个port是egress出service function,ingress和egress可以是同一个port,这个port能进能出,是否需要proxy由参数创建port pair时的参数--service-function-parameters correlation=xxxx来指定。

port pair group

port pair group包含一个或者多个port pair,主要是为了做流量负载均衡,假如一条chain中有两个firewall service function,流量可以走任意一个firewall就可以,port pair group就是干这事的,指导流量在这两个firewall上负载均衡,创建port pair group时指定参数,例如--port-pair-group-parameters lb_fields=ip_src&ip_dst。

port chain

port chain把一些port pair group按顺序指定好,再加一个classifier识别出流量上第一个service function就形成了一个port chain。流量怎么装由参数--chain-parameters correlation=<correlation-type>,symmetric=<boolean>]来指定。

service graph

service graph把几条chain组合在一起形成一个复杂的流量多路径,流量经过一条chain后分叉,两个分支分别走不同的chain,理论上这个graph不能形成环路。

3

networking-sfc模式

chain

流量只有一条路径,从src依次经过service function节点到dst,service function有一个ingress port和一个egress port,ingress和egress port可以是同一个port。

tap

这种模式适用于IDS等流量只进不出的模式,流量复制一份到IDS,继续流向下一个节点。

LB

流量在两个service function节点之间做负载均衡,具体由openflow的group表来实现,根据报文的信息(eth_src,eth_dst,ip_src,ip_dst,tcp_src,tcp_dst,udp_src,udp_dst)来hash。

service graph

这种模式由多条chain组成,一条分叉成几条,分叉点由re-classifier来控制流量走向。这种模式适合于报文会被service function修改,如service function是NAT功能,报文的IP被修改后,原来的classifier有可能匹配不到,所以后续创建新的port chain,关联新的classifier。

4

应用

这是一个networking-sfc service graph的例子,分为四条port chain,每个service function是一条单独的chain,service graph实现了分叉再合并。流量从src出来到sf1,分叉到sf2和sf3,sf4合并sf2和sf3出来的流量,最后送给dst。用的是networking-sfc的ovs driver,src,sf1,sf2,sf3,sf4,dst都是虚拟机,分布在两个不同的物理上,物理机之间用vxlan tunnel通信。由于ovs实现的NSH的bug,导致流量转发不通,这里用MPLS做SFC封装。

流表最大的特点就是分叉点或者合并点引进了reg0,原来的流表match in_port=xxx和 flowclassifier,然后就到group table。现在变成in_port前一个port chain的最后一个service function的egress port,把label暂存在reg0中,resubmit(,0),然后match reg0和flowclassifier送去group table,把原来的一条流表变成了多条。group table相同就合并,group table不同就分叉了。

360云计算

由360云平台团队打造的技术分享公众号,内容涉及数据库、大数据、微服务、容器、AIOps、IoT等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享

OpenStack SFC 深入剖析相关推荐

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

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

  2. 《企业私有云建设指南》-导读

    内容简介 第1章总结性地介绍了云计算的参考架构.典型解决方案架构和涉及的关键技术. 第2章从需求分析入手,详细讲解了私有云的技术选型.资源管理.监控和运维. 第3章从计算.网络.存储资源池等方面讲解了 ...

  3. OpenStack网络 - 使用vlan模式来剖析openstack网络相关概念及原理

    OpenStack网络 - 使用vlan模式来剖析openstack网络相关概念及原理 OpenStack网络 OpenStack网络设置比较复杂,阅读了一些文档,主要是采用两种网络 flat net ...

  4. 《OpenStack实战》——第1章 介绍OpenStack 1.1OpenStack是什么

    本节书摘来自异步社区<OpenStack实战>一书中的第1章,第1.1节,作者: [美]V. K. Cody Bumgardner(V. K. 科迪•布姆加德纳)著,更多章节内容可以访问云 ...

  5. EasyStack华丽亮相OpenStack Days China

    近日,2016年度OpenStack核心会议之一.首次登陆中国内地的OpenStack Days China在北京国家会议中心拉开帷幕.大会获OpenStack基金会授权:由十七位从业于OpenSta ...

  6. OpenStack高可用核心架构分析

    摘要:对任何一个分布式系统,高可用HA都是最核心的设计目标之一,而OpenStack这样一个复杂系统,高可用更是涉及到多个层面,本文重点解析了OpenStack各层次的HA设计. [编者按]本文从Op ...

  7. OpenStack Neutron浅析(二)

    计算.存储和网络,奠定了当今云计算格局的三足鼎立之势. 计算通过虚拟化CPU.disk.Memory等硬件来获得高效的应用:存储通过分布式的文件系统,提供了众多特性的功能.而相对于,计算和存储两方面的 ...

  8. OpenStack技术峰会PPT集萃

    备受瞩目的OpenStack Days China大会将于7月14日-15日在北京国家会议中心举办,众多云计算领域优秀企业都将参加此次盛会,这也是本年度中国云计算技术领域规模最大.海内外云计算技术领袖 ...

  9. 绝不能错过的10款最新OpenStack网络运维 监控工具

    摘要 今天我们要推荐给大家的是关于奥斯汀OpenStack Summit的OpenStack网络方面功能与工具相关的技术演讲. 希望可以帮助国内的开发者.架构师和用户更好地了解OpenStack在SD ...

最新文章

  1. ×××linux下samba服务器
  2. mysql批量更新后返回id_如何批量插入Mysql并取得各自的递增ID
  3. 手机按键中控运行思路的个人理解
  4. 客户端分析php代码,分享:一个简单的全网解析客户端代码。
  5. 企业微信可以同步微信好友吗?怎么同步?
  6. matlab 分段函数 傅里叶变换,2005_09傅里叶变换及其应用 (第3版)_11482158.pdf
  7. java 支付宝 验证签名失败,支付宝支付错误返回ILLEGAL_SIGN,签名验证错误
  8. Qt摄像头热插拔实现
  9. GitHub上12k Star的《Java工程师成神之路》终于开放阅读了!
  10. NetApp Storage MetroCluster 双活解析
  11. 如何围绕自身打造个人IP,做长线引流布局?
  12. Typora数学公式和符号整理
  13. 【记一次开发油猴插件的过程】——逆水寒
  14. 移动硬盘如何分区?分区软件推荐:
  15. 魔趣开源系统 6.0 使用体验(Nubia Z9 mini)
  16. html右侧有白边,html5有白边解决办法
  17. JS加密解密对于asp.net解密加密
  18. 中国科学技术大学计算机学院读博,2019年中国科学技术大学拟录取博士研究生名单公示(27)...
  19. 百度「文心一言」阿里「通义千问」腾讯的AI将会叫什么呢
  20. C++ 【vector模拟实现】

热门文章

  1. Linux API函数总结
  2. Android风格与主题
  3. HTML中利用堆栈方式对Table进行行排序
  4. idea 使用 Gradle 构建过程中控制台中文显示乱码解决
  5. Ditto剪贴板增强工具
  6. WeakReference类详解
  7. go语言和java比_闲话Python, Go, Java
  8. 哈夫曼编码压缩率计算_考研经验分享(哈工大计算机)
  9. Python程序员面试必备常用问题答案及解析
  10. Laravel 5.1 源码阅读