云計算

OpenStack SFC 深入剖析

女主宣言

SFC全稱Service Function Chain,它可以自定義網絡功能單元,自定義流量路徑,很好給SDN網絡提供了支撐。本文主要介紹了openstack中實現SFC功能的一個項目:networking-sfc。

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中。

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不能形成環路。

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?,F在變成in_port前一個port chain的最后一個service function的egress port,把label暫存在reg0中,resubmit(,0),然后match reg0和flowclassifier送去group table,把原來的一條流表變成了多條。group table相同就合并,group table不同就分叉了。

我還沒有學會寫個人說明!

百度云掌舵者尹世明離職,云計算市場競爭更加白熱化

上一篇

如何評估一項技術是否值得長期投入

下一篇

你也可能喜歡

OpenStack SFC 深入剖析

長按儲存圖像,分享給朋友

ITPUB 每周精要將以郵件的形式發放至您的郵箱


微信掃一掃

微信掃一掃
30岁的男人干啥赚钱快赚钱多 快赢481最新开奖结果 云南11选五遗漏前三直选 网上赚钱靠谱的方法 四肖八码中特期期准精选 股票融资融券是什么 山东体彩快乐扑克3走势图 最准确双色球选号技巧 宝博李逵劈鱼正版下载 股票配资平台哪个合法 韩国快乐8开奖查询