開源Cillium項目為容器提供強大的網絡功能
譯文【51CTO.com快譯】試驗性的開源Cillium項目使用Linux內核的一項現有特性,為容器提供高速、強大的網絡功能。
網絡功能始終是使用容器時最頭痛的棘手問題之一。連Google開源的容器集群管理系統Kubernetes在實現網絡功能方面也存在著限制,雖然它正迅速成為容器編排的***技術。這讓網絡安全之類的棘手問題變得更棘手了。
現在,一項名為Cilium的開源項目試圖基于Linux內核中所用的技術,為容器提供一種新的網絡方法――該項目得到了谷歌的部分贊助,目的在于為容器提供更好的網絡安全和更簡單的網絡模型。
以BPF方式來聯網
Linux中的網絡安全機制(比如iptable)通常只適用于網絡、數據包和地址這些層面,即OSI模型的第3層。那些機制無法與HTTP之類的協議對話。
Cilium使用Linux的伯克利數據***濾(BPF)技術,在網絡層面和HTTP層面為Docker容器或Kubernetes pod執行網絡安全策略。
BPF被引入到了Linux 2.5,此后就成了內核中的一項穩定功能。由于BPF,人們可以在內核里面編譯并運行提供網絡過濾機制和性能分析及跟蹤分析的小程序。
據Cilium的GitHub代碼庫說明文檔顯示,Cilium的工作原理是生成內核層面的BPF程序,這些程序可直接與容器協同運行。Cilium可以為每個容器分配一個IPv6地址(或除此之外的IPv4地址),并使用容器標簽而非網絡路由規則來執行容器之間的隔離,而不是為容器創建覆蓋網絡。它還包括了面向編排系統的整合,以便處理創建和執行Cilium策略的工作。
Cilium使用BPF的兩大原因是速度和便利。BPF程序被編譯成原生機器代碼,那樣它們運行起來速度與其他任何內核代碼一樣快。對Cilium使用的BPF程序加以改動不需要重新引導,甚至不需要容器重啟。Cilium的開發者還聲稱,BPF程序針對每個容器進行了優化,那樣“某個容器不需要的功能完全不需要編譯。”
現處于試驗階段,但最終必不可少
Cilium的一個潛在問題是,它需要版本非常新的Linux內核:4.8.0或更新版本,推薦4.9.17,另外需要LLVM 3.7.1或更新版本。話雖如此,Cilium的功能集合并不受制于任何特定的Linux版本――比如說,“添加Linux內核不提供的額外統計信息”或者“額外的轉發邏輯”。
Cilium是容器處理網絡功能的一種試驗性解決方案,不過對多種方法而言仍有很大的余地――即使是Docker發展過程中的現階段。Docker的最初網絡方法很笨拙,很難管理,所以這家公司收購了SocketPlane,并將其類似OpenDaylight的網絡結構(network fabric)添加到了Docker 1.9。該解決方案默認情況下隨帶Docker,但是從理論上來說,它可以換成可與Docker API兼容的其他網絡產品。
Cilium的優點在于,它是按照與容器同樣的思路構建的,使用了現有的Linux內核技術;Docker式樣的容器實際上重新包裝了長期以來存在于Linux內核中的功能。同樣,Cilium可與存在了一段時間的現有技術兼容,有一系列明確的使用場景,跟容器本身一樣接近內核中的容器層面。
原文標題:Linux kernel holds key for advanced container networking,作者:Serdar Yegulalp
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】