【SFC】学习 -- Service Function Chain背景

754 阅读4分钟

image.png

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情

前言

今天新开一个主题,Opentack,由于任务需要,首先学习的是SFC技术,用于资源池内流量编排,后续会学习Openstack 组件中的Neutron,对网络组件进行一个深入理解,其中SFC技术主要使用互联网查询的方式,而Neutron则采用阅读《深入理解Openstack neutron》一书的方式实现,流程图使用processon进行绘制。废话不多说,先从SFC下手。

Service Function Chaining

SFC (Service function chain)服务链本质上是SDN (software defined networking) 软件定义网络版本的策略路由(policy-based routing)。大多数情况下,SFC包含了安全性在内的很多特性。从原理上讲,SFC通过一个或者多个服务功能对报文进行路由,而不是传统基于IP地址通过查询路由表的的方式,本质上是通过模拟一系列数通设备。

名词解释:

  • Service Function 服务功能或者服务链路,表示提供业务的虚机,虚机上会有一个或者多个网络端口(port)
  • Port Chain: Neutron list 列表和一个 flow classifiers(流分类器),指定分类后的流进入哪个端口
  • 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的尾部。
  • Port Pair Group:可以将不同个port chain里面相同的port pair集合定义成为多个端口组,便于操作
  • Flow Classifier: 只有流量匹配到了flow classifier则会被重定向到port-chain的起始端口,目前可以匹配到的字段包含:ethertype,protocol,source-port,dest-port,source-ip-prefix,dest-ip-prefix,logical-source-port,logical-dest-port,L7层某些字段等。
   +------+      +------+        +------+
   | SF1  |      | SF2  |        | SF3  |
   +------+      +------+        +------+
   p1|   |p2     p3|   |p4       p5|   |p6
     |   |         |   |           |   |
->---+   +---------+   +-----------+   +---->

OpenStack SFC原理

image.png

资源池内计算资源虚拟化后,出口防火墙、防火墙、IPS等传统的硬件设备采用虚拟化形式进行部署,end2end的流量要以此通过不同的安全网元后在到目标地址,在这期间引导流量如何有序通过这些网元就是SFC的基本功能,传统物理设备通过硬件进行连接,流量经过的顺序较为死板,无法进行变通,而SFC能够定义网络功能单元,自定义流量路径,从而给控制器更好的网络支持。

在OpenStack中,网络服务和计算实例都通过端口的形式连接到虚拟网络中,从而可以仅仅使用端口创建业务链进行引流,在一个完成的端口链中,包含一个或者多个计算实例(能力网元),流量通过端口链进行流量转发。

上述的端口链,即Service function path包含以下两部分组成:

  • 一个包含多个端口的集合用于定义业务功能(Service Function)
  • 一组流分类器,用于分类不同流量进入对应的端口链

端口链是单向的业务链。第一个端口作为业务链的起始,第二个端口作为业务链的结束。而双向的业务链是由两个单向的端口链组成。流分类器只能属于一个端口链,但是可以多个流分类器与一个端口链相连接。因为多个流可能请求同一个业务,目前SFC缺乏对多项目服务功能的支持。端口链插件支持后台服务提供商,包括OVS驱动程序和各种SDN控制器驱动程序。公共驱动程序API允许不同的驱动程序为服务链路径呈现提供不同的实现。

image.png

  • SFC Classsifier 识别网络流量,并将其分配到不同的SFC,SFC会将网络流量包添加上SFC识别符号,如SFC Header,因此会改变包结构,这个Header包含SFC的唯一识别ID。
  • SFi: 一个Service Function的实例
  • SFF: 提供服务层的转发,SFF接受带有SFC Header的网络包,利用SFC Header,将网络包转发给相应的SFI
  • SF Porxy:任何不能理解的SFC的设备,在SFC中都必须配合SFC proxy使用,proxy会将SFC Header去掉,并把原始数据转发给传统的SF设备,处理完成后,SFC proxy会将SFC Header加回到网络包中,并转发给SFC钟