193. SDN和OpenStack的關係?

首先從大的角度談區別,OpenStack是一個IaaS開源實現方案之一,提供計算、存儲、網絡等基礎服務以及諸如數據庫服務、大數據服務、容器編排服務等高級服務,而SDN主要聚集在網絡這一塊。因此從技術生態覆蓋面角度看,OpenStack的生態方方面面十分龐大,網絡只是其中的一個點,由組件Neutron負責實現。而SDN的生態只有網絡這一點。

同樣是網絡,OpenStack Neutron注重的是爲虛擬機、容器、物理服務器等提供網絡服務,提供的是面向用戶的北向RESTFul API,而SDN注重的是解決網絡設備的配置以及轉發控制問題,更側重於底層網絡設備的配置管理以及控制,既要提供面向用戶的北向API,還要提供南向API,對接各種硬件設備的協議。

更細化的角度看聯繫,SDN的思想是控制轉發分離,這是一種網絡設計理念和變革。具體什麼是控制轉發分離,google有很專業的描述。我的簡單理解就是把以前需要手動ssh或者通過console一臺一臺配置交換機、路由器、防火牆、負載均衡等硬件的活,現在通過一箇中心控制器統一納管起來,對用戶屏蔽了底層硬件區別,網絡管理員只需要調用標準API或者Web界面操作控制器就能自動下發配置策略到指定的設備中。當然除了配置問題,有些功能也從網絡設備中剝離出來,放到控制器實現,不再揉到一塊,這些功能包括鏈路發現、mac地址學習、路由計算等。硬件只負責轉發或者路由即可。控制器如何與硬件打交道呢?當然是通過協議了,如openflow、netconf等。這裏我們只關注SDN中的控制器,顯然這是一個調度與控制中心,向上對用戶負責,爲用戶提供API,向下對接各種網絡設備,下發策略。

我們再來看OpenStack Neutron,我們知道,OpenStack Neutron由neutron-server和一堆agents/drivers組成。這個neutron-server的功能和SDN中的控制器非常類似,向上對用戶負責,爲用戶提供可編程API,向下對接各種agents,只是對接的協議不同,neutron-server與agent的交互的南向協議是RPC。所以我們可以簡單理解neutron-server其實就是SDN控制器實現之一(不一定準確),負責向各種agents下發策略,agents再向各種網絡設備轉發策略。問題是除了虛擬網絡設備(如OVS),還有各種各樣的硬件網絡設備,這些網絡設備的功能、配置標準以及協議等均存在很大的差別,如果OpenStack Neutron要全部納管起來,需要寫一堆的agents和drivers,而且是重複造輪子,功能上也沒有解耦,Neutron會非常重。最好的方式是不要直接去對接硬件,直接對接現成的SDN控制器即可,因爲SDN控制器提供的北向API通常是標準的,而又屏蔽了底層硬件設備的差異化,不再需要實現各種各種的agents和drivers了,只需要實現對接SDN控制器的agent或者driver即可,比如對接開源的SDN控制器ODL(openstack/networking-odl)以及華爲AC控制器等等。

簡而言之,SDN是一種思想,核心理念是控制與轉發分離,控制由控制器實現,轉發由網絡設備實現,其中ODL是控制器的開源實現之一。OpenStack Neutron是爲OpenStack提供網絡服務的組件,neutron-server服務可以當作是SDN控制器的實現之一,Neutorn可以串接其它的SDN控制器,比如ODL。

另外,如果想從事SDN或者OpenStack開發,並不是一定要兩者都懂,看你負責什麼工作了。OpenStack的大多數開發都不需要直接接觸SDN,比如你負責存儲服務Cinder或者計算服務Nova,基本就不會直接與SDN打交道。同樣的,從事SDN也不一定非要和OpenStack扯上關係,二者可以說是完全解耦獨立的。當然,如果你負責OpenStack Neutron開發,並且需要對接SDN,則對二者的熟悉是必須的了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章