networking-sfc deep dive 1

2021-02-24 11:19:20 浏览数 (1)

介绍

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

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

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

networking-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就是一个sf节点上一对口,一个port是ingress进sf,另一个port是egress出sf,ingress和egress可以是同一个port,这个port能进能出。

port pair group包含一个或者多个port pair,主要是为了做流量负载均衡,假如一条chain中有两个firewall sf,流量可以走任意一个firewall就可以,port pair group就是干这事的,指导流量在这两个firewall上负载均衡。

classifier识别流量的,定义一些规则,哪些流量走这条chain。

port chain把一些port pair group按顺序指定好,再加一个classifier识别出流量上第一个sf就形成了一个port chain。

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

networking-sfc安装和配置

yum install python2-networking-sfc.noarch

控制节点: /etc/neutron/neutron.conf service_plugins=..., networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin,networking_sfc.services.sfc.plugin.SfcPlugin [sfc] drivers=ovs [flowclassifier] drivers=ovs 升级neutron db: $ neutron-db-manage --config-file /etc/neutron/neutron.conf --subproject networking-sfc upgrade head systemctl restart neutron-server.service

计算节点: /etc/neutron/plugins/ml2/openvswitch_agent.ini [agent] extensions=sfc systemctl restart neutron-openvswitch-agent.service

总结

提出一些高大上的概念容易,怎样用具体的技术能实现出来才是难点。SFC就是一些高大上的概念,networking-sfc把它实现出来了,而且借助现有neutron的技术,很好地融合在neutron中,真的非常了不起。

0 人点赞