SDN 控制器(SDN controller)
想像一座航管塔台。各架飛機不會彼此協商誰先降落;塔台把整片空域顯示在螢幕上,直接下達指令。SDN 控制器在網路裡扮演這個角色。它是一套跑在普通伺服器上的軟體,握有對每台交換器與每條連結的全網視角,決定流量該如何流動,並把轉送規則下推給交換器。交換器不再是獨立的決策者,而成為控制器指揮的手臂。
具體來說,控制器坐在 SDN 堆疊的中央,對外提供兩種介面。往下看,它用南向介面(常見的是 OpenFlow)在交換器裡裝設、修改、刪除流規則,並得知事件(一個沒有匹配規則的新封包、某個埠掉線)。往上看,它對控制應用——路由、負載平衡、防火牆、監控——提供北向介面,讓這些應用表達它們要什麼,再由控制器把它翻譯成具體規則。由於它握有全域、一致的圖像,控制器常被稱為網路作業系統:應用在它之上執行,就像程式在作業系統上執行,而它把底下雜亂的硬體抽象掉。
為什麼重要:控制器正是讓網路能從一處被程式化的關鍵——這也是 SDN 的全部魅力所在。它同時也是核心風險。單一、未複製的控制器是單點故障與潛在瓶頸;它若掛掉或被切斷,交換器會照最後的規則繼續轉送,卻無法調適。因此真實佈署會跑一群控制器,做到邏輯上集中(呈現單一一致的視角)但實體上分散,並用共識協定讓副本彼此一致。集中換來乾淨的全域視角;分散換來存活。
某台交換器收到一個目的地它沒有規則可循的封包。它無法獨自決定,於是把這個封包往上轉給控制器,問該怎麼辦。控制器看見整個拓樸,算出一條路徑,再在那台交換器(以及沿途其他交換器)裡裝上一條流規則,使這條流之後的封包都能以線路速率直接轉送,不必再問。
問控制器一次;之後這條流的其餘封包就照裝好的規則全速轉送。
把控制器稱為網路作業系統是一種類比,不是說它真的就是一個。而邏輯上的集中並不需要一台實體機器——正式環境的控制器通常是複製的叢集,正是為了避免成為單點故障。