Linux內核為高級容器網路提供關鍵技術

【摘要】本文主要介紹一個為容器提供網路解決方案的實驗性開源項目Cilium,該項目利用Linux的BPF技術在應用層完成容器的網路策略。

實驗性開源項目Cilium使用現有的Linux內核特性為容器提供更快更有力的網路。

容器使用過程中,網路一直是最令人頭疼的問題之一。即使是Kubernetes這種快速成為容器編排的首選技術,在完善網路方面也存在局限性。類似網路安全這類棘手問題也變得更棘手。

由Google支持的源項目Cilium也在試圖提供一種基於Linux內核已有技術的全新網路技術。項目的目標是為容器提供更好的網路安全以及更簡單的網路模式。

  • BPF式網路

Linux里的網路安全機制,例如iptables,只是工作在網路、數據包以及地址層面,也就是OSI模式中的第三層。然而這些機制並不會涉及類似HTTP等協議。

Advertisements

Cilium利用Linux的巴克利包過濾(BPF)技術,在網路層和HTTP層為Docker容器或者Kubernetes pods實現網路安全策略。

Linux 2.5版本引入BPF並從此穩定在內核里。多虧了BPF技術,使得我們可以編譯並運行內核態程序,通過這些程序實現網路過濾機制,實現性能分析和跟蹤。

按照Cilium的GitHub資源庫文檔,Cilium的工作模式是生成內核級別的BPF程序與容器直接交互。 區別於為容器創建overlay網路,Cilium允許每個容器分配一個IPv6地址(或者IPv4地址),使用容器標籤而不是網路路由規則去完成容器間的網路隔離。它還包含創建並實施Cilium規則的編排系統的整合。

Advertisements

使用BPF的兩大理由是快速性和方便性。BPF被編譯成內部機器代碼,所以它能像其它內核代碼一樣快速運行。Cilium使用的BPF程序變化時不需要重啟機器甚至容器也不需要重啟。Cilium的創造者也指出BPF程序是基於單個容器進行優化,因此特定容器所不需要的特性不編譯進去就行了。

  • 實驗性質,後續可能成為必要

Cilium的一個潛在爭議是它需要較新的內核版本——4.8.0及以後,建議4.9.17同時LLVM版本要求3.7.1及以後。儘管如此,Cilium的一系列特性並不和特定的Linux版本綁定,舉個例子,附加的額外統計不是由Linux內核提供,此外其它轉發邏輯也是如此。

Cilium為容器展示了一個實驗性質的網路解決方案,在多方面都有很大的發展空間,在這點上,Docker解決方案亦然。Docker原生的網路方案不靈活而且不易於管理,於是公司引入了SocketPlane並且把它的網路結構OpenDaylight添加到了Docker 1.9版本里。這成為Docker默認的網路方案,但是理論上如果有其它網路產品和Docker API配合良好的話,我們可以把SocketPlane方案替換掉。

Cilium的優點在於它使用與容器相同的思路,利用現有的Linux內核技術構建;Docker類型的容器本質上還是既有Linux內核能力的重新整合。同樣的,Cilium兼容現有技術,擁有一系列被充分了解的使用場景,接近於容器在內核中的級別。

Advertisements

你可能會喜歡