Kuryr是個什么鬼?Neutron擁抱容器的先鋒軍已經出發!
Kuryr一詞來自捷克語,意思是“信使”。在OpenStack的大家庭里,Kuryr正在嘗試做一項具有重大意義的工作,即把容器和Docker網絡加入到Neutron解決方案和網絡服務的使用中,從而彌補其中現存的差距。
Kuryr正在嘗試解決什么問題?
OpenStack和Neutron已經不再是新的東西。目前Neutron已經成熟,它們正在nova-network上的OpenStack部署中流行起來,并且有著非常豐富的插件與驅動生態系統,可以提供網絡解決方案和服務(例如負載平衡即服務LBaaS、虛擬私有網絡即服務VPNaaS,以及防火墻即服務FWaaS)。云部署者可以對Neutron抽象層組件進行互換。
在容器網絡和容器與OpenStack混合的環境中,我們已經注意到每個網絡解決方案都試著進行改造,以便讓網絡能夠適應容器,但是這次涉及的是Docker API(或者其他抽象層)。例如,OpenStack Magnum項目已經根據所使用的容器編排引擎(Container OrchestrationEngine,簡稱為COE)為不同的libnetwork驅動引入了一個抽象層。如果Kuryr能夠成為Magnum COE的默認選項,那么這將是最理想的情況。
Kuryr背后的理念是能夠利用抽象層、Neutron及其插件與服務中的所有工作,為容器應用案例提供一個生產級的網絡。與試圖解決這一問題的每個獨立的Neutron插件或解決方案不同,我們可以集聚所有力量,并將這些力量聚焦在Kuryr這一個點之上。
Kuryr旨在成為一座連接Docker和Neutron兩個社區的“整合橋梁”,將Neutron(或Docker)中的建議與實際變化結合在一起,讓它們能夠滿足容器網絡所需的使用案例。
值得注意的是,Kuryr本身并不是一個網絡解決方案,同時它也沒有嘗試成為一個網絡解決方案。Kuryr將重點放在了“信使”功能上,以向Docker 傳遞Neutron網絡和服務。
Kuryr的架構
Kuryr的組件很少,其中部分組件已經處于工作流程當中,另有一部分組件正處于討論和設計過程中。
將Docker libnetwork映射至Neutron API
下列示意圖展示的是Kuryr架構的基本概念,其在Docker和libnetwork網絡模式之間向Neutron API進行映射。

Kuryr映射了libnetwork API,并在Neutron中創建了一個適當的對象。這意味著每個執行NeutronAPI的解決方案都能夠被用于容器網絡。Neutron的所有附加功能都可以應用至容器端口,例如安全群組、NAT服務和浮動IP的端口處。
不過,Kuryr的潛力并不止步于核心API和基本的擴展,它還能夠利用網絡服務和LBaaS等功能,從而為執行Kubernetes服務提供抽象層。
當API的映射并不明顯,或是所需驅動在Neutron社區中發生了變化時,Kuryr還可以用于彌補這些問題。最近的一個例子是,除了Neutron資源外的標簽允許Kuryr這樣的API客戶端存儲映射數據和端口轉發,并且可以提供Docker類型的端口(當然,所有的這些仍處于評估和批準流程中)。
提供通用的VIF-Binding基礎設施
希望支持容器網絡的Neutron解決方案中存在的一個常見問題是,在這些環境中缺乏綁定了nova端口的基礎設施,以及沒有libvirt的支持
。Kuryr嘗試著為不同類型的端口提供一個通用的VIF綁定機制,讓它們能夠從Docker那里接收命名空間端點,并根據它們的類型將其附加在網絡解決方案基礎設施中。
VIF綁定也是運行內嵌在VM產品內部的容器所需要的。我們會在隨后內容中進行詳細敘述。這些VM產品沒有被nova直接管理,因此也不需要在內部有任何OpenStack代理,這意味著需要一些機制執行VIF綁定,其可通過本地Docker遠程驅動調用Kuryr層的方式啟動(目前這部分也仍在討論當中)。
下圖展示了VIF綁定與Kuryr的關系:

提供Neutron插件的容器化鏡像和與Kolla的整合
Kuryr旨在提供不同Neutron插件的容器化鏡像,并有望與Kolla程序整合在一起。如果不清楚OpenStack Kolla項目的內容可以訪問https://wiki.openstack.org/wiki/Kolla。
這意味著我們有許多如OVS L2 Agent、Midonet和帶來有Kuryr 層的OVN的不同Neutron插件的鏡像。Kolla整合可以讓部署變得更加容易,運營者希望既不喪失對內部服務的控制權,也不損害可配置性。
嵌入式的VM和Magnum使用案例
Kuryr致力于解決的另一個使用案例是,以一種通用方案在由用戶自己的OpenStack所生成的VM上部署容器。這種部署方案為容器部署提供了一個額外的層,用戶需要將自己的容器從Nova Compute機器中分離出來。
這種使用案例也被OpenStack Magnum所使用。Magnum是OpenStack容器團隊通過容器編排引擎所開發出來的OpenStack API服務。它使得在OpenStack中,Docker和Kubernetes可作為一類資源使用。
目前,Neutron插件已經支持這類使用案例,其提供一種將嵌入式容器附加至不同邏輯網絡中、而不是VM網絡中的好辦法,并且可以將Neutron功能應用其中,例如OVN。
Kuryr的目的是提供一個組件,以支持類似定義neutron端口和為其附加子端口的解決方案。通過Kuryr,OVN和MidoNet等Neutron廠商可以利用通用基礎設施與Docker進行交互,讓他們一直聚焦在執行Neutron API和推動網絡發展方面。