北向介面(northbound API)
腦中保持同一疊白板:應用在最上面、控制器在中間、交換器在最下面。如果南向往下指向硬體,北向就往上指向想使用網路的軟體。北向介面是控制器提供給控制應用——路由、負載平衡、安全、監控——的介面,讓它們不必直接碰交換器就能要求自己想要的東西。它是網路給軟體開發者的程式設計介面。
具體來說,北向介面讓應用能表達高階的願望、讀取高階的狀態。應用不必自己裝流規則,而可以說:給主機 A 一條通往主機 B 的路徑;或擋掉來自這個子網路的所有流量;或回報哪些連結壅塞。控制器接下這個請求,查詢它的全域視角,算出具體的流規則,再透過南向介面往下裝設。北向介面通常對程式設計者友善——常見的是走 HTTP 的 REST API,或語言函式庫——而且它說的是網路抽象(主機、路徑、政策),而不是埠與計數器。
為什麼重要:北向介面正是 SDN 「可程式化網路」這個承諾真正觸及寫軟體的人的地方,也是意圖式網路(intent-based networking)的基礎——你陳述目標,讓控制器去把機制想出來。誠實的現實是:與南向的 OpenFlow 不同,北向一直沒有單一主導的標準——不同控制器揭露不同的 API——這使得應用在不同控制器之間較難移植。所以北向是好寫、高階的那一側,但也是較不標準化的那一側。
某監控應用對控制器的北向介面發出一個簡單的 REST 呼叫:GET /links,收到一份 JSON 清單,列出每條連結與它目前的使用率。看到某條連結在 95 趴,應用接著 POST 一個請求,把一條大流改道避開它。這個應用從未講過 OpenFlow、也沒碰過交換器——它完全透過友善的北向介面完成工作。
應用用高階的語彙對網路說話;控制器在底下做低階的工作。
北向不像 OpenFlow 那樣有一個公認的標準把它統一起來,所以為某控制器的北向介面寫的應用,往往得改寫才能在另一個控制器上跑。